Home | History | Annotate | Line # | Download | only in gcc
      1 /* Core data structures for the 'tree' type.
      2    Copyright (C) 1989-2022 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_TREE_CORE_H
     21 #define GCC_TREE_CORE_H
     22 
     23 #include "symtab.h"
     24 
     25 /* This file contains all the data structures that define the 'tree' type.
     26    There are no accessor macros nor functions in this file. Only the
     27    basic data structures, extern declarations and type definitions.  */
     28 
     29 /*---------------------------------------------------------------------------
     30    Forward type declarations.  Mostly to avoid including unnecessary headers
     31 ---------------------------------------------------------------------------*/
     32 struct function;
     33 struct real_value;
     34 struct fixed_value;
     35 struct ptr_info_def;
     36 struct range_info_def;
     37 struct die_struct;
     38 
     39 
     40 /*---------------------------------------------------------------------------
     41                               #defined constants
     42 ---------------------------------------------------------------------------*/
     43 /* Nonzero if this is a call to a function whose return value depends
     44    solely on its arguments, has no side effects, and does not read
     45    global memory.  This corresponds to TREE_READONLY for function
     46    decls.  */
     47 #define ECF_CONST		  (1 << 0)
     48 
     49 /* Nonzero if this is a call to "pure" function (like const function,
     50    but may read memory.  This corresponds to DECL_PURE_P for function
     51    decls.  */
     52 #define ECF_PURE		  (1 << 1)
     53 
     54 /* Nonzero if this is ECF_CONST or ECF_PURE but cannot be proven to no
     55    infinite loop.  This corresponds to DECL_LOOPING_CONST_OR_PURE_P
     56    for function decls.*/
     57 #define ECF_LOOPING_CONST_OR_PURE (1 << 2)
     58 
     59 /* Nonzero if this call will never return.  */
     60 #define ECF_NORETURN		  (1 << 3)
     61 
     62 /* Nonzero if this is a call to malloc or a related function.  */
     63 #define ECF_MALLOC		  (1 << 4)
     64 
     65 /* Nonzero if it is plausible that this is a call to alloca.  */
     66 #define ECF_MAY_BE_ALLOCA	  (1 << 5)
     67 
     68 /* Nonzero if this is a call to a function that won't throw an exception.  */
     69 #define ECF_NOTHROW		  (1 << 6)
     70 
     71 /* Nonzero if this is a call to setjmp or a related function.  */
     72 #define ECF_RETURNS_TWICE	  (1 << 7)
     73 
     74 /* Nonzero if this call replaces the current stack frame.  */
     75 #define ECF_SIBCALL		  (1 << 8)
     76 
     77 /* Function does not read or write memory (but may have side effects, so
     78    it does not necessarily fit ECF_CONST).  */
     79 #define ECF_NOVOPS		  (1 << 9)
     80 
     81 /* The function does not lead to calls within current function unit.  */
     82 #define ECF_LEAF		  (1 << 10)
     83 
     84 /* Nonzero if this call returns its first argument.  */
     85 #define ECF_RET1		  (1 << 11)
     86 
     87 /* Nonzero if this call does not affect transactions.  */
     88 #define ECF_TM_PURE		  (1 << 12)
     89 
     90 /* Nonzero if this call is into the transaction runtime library.  */
     91 #define ECF_TM_BUILTIN		  (1 << 13)
     92 
     93 /* Nonzero if this is an indirect call by descriptor.  */
     94 #define ECF_BY_DESCRIPTOR	  (1 << 14)
     95 
     96 /* Nonzero if this is a cold function.  */
     97 #define ECF_COLD		  (1 << 15)
     98 
     99 /* Call argument flags.  */
    100 
    101 /* Nonzero if the argument is not used by the function.  */
    102 #define EAF_UNUSED		(1 << 1)
    103 
    104 /* Following flags come in pairs.  First one is about direct dereferences
    105    from the parameter, while the second is about memory reachable by
    106    recursive dereferences.  */
    107 
    108 /* Nonzero if memory reached by the argument is not clobbered.  */
    109 #define EAF_NO_DIRECT_CLOBBER	(1 << 2)
    110 #define EAF_NO_INDIRECT_CLOBBER	(1 << 3)
    111 
    112 /* Nonzero if the argument does not escape.  */
    113 #define EAF_NO_DIRECT_ESCAPE	(1 << 4)
    114 #define EAF_NO_INDIRECT_ESCAPE	(1 << 5)
    115 
    116 /* Nonzero if the argument does not escape to return value.  */
    117 #define EAF_NOT_RETURNED_DIRECTLY (1 << 6)
    118 #define EAF_NOT_RETURNED_INDIRECTLY (1 << 7)
    119 
    120 /* Nonzero if the argument is not read.  */
    121 #define EAF_NO_DIRECT_READ	(1 << 8)
    122 #define EAF_NO_INDIRECT_READ	(1 << 9)
    123 
    124 /* Call return flags.  */
    125 /* Mask for the argument number that is returned.  Lower two bits of
    126    the return flags, encodes argument slots zero to three.  */
    127 #define ERF_RETURN_ARG_MASK	(3)
    128 
    129 /* Nonzero if the return value is equal to the argument number
    130    flags & ERF_RETURN_ARG_MASK.  */
    131 #define ERF_RETURNS_ARG		(1 << 2)
    132 
    133 /* Nonzero if the return value does not alias with anything.  Functions
    134    with the malloc attribute have this set on their return value.  */
    135 #define ERF_NOALIAS		(1 << 3)
    136 
    137 
    138 /*---------------------------------------------------------------------------
    139                                   Enumerations
    140 ---------------------------------------------------------------------------*/
    141 /* Codes of tree nodes.  */
    142 #define DEFTREECODE(SYM, STRING, TYPE, NARGS)   SYM,
    143 #define END_OF_BASE_TREE_CODES LAST_AND_UNUSED_TREE_CODE,
    144 
    145 enum tree_code {
    146 #include "all-tree.def"
    147 MAX_TREE_CODES
    148 };
    149 
    150 #undef DEFTREECODE
    151 #undef END_OF_BASE_TREE_CODES
    152 
    153 /* Number of language-independent tree codes.  */
    154 #define NUM_TREE_CODES \
    155   ((int) LAST_AND_UNUSED_TREE_CODE)
    156 
    157 #define CODE_CONTAINS_STRUCT(CODE, STRUCT) \
    158   (tree_contains_struct[(CODE)][(STRUCT)])
    159 
    160 
    161 /* Classify which part of the compiler has defined a given builtin function.
    162    Note that we assume below that this is no more than two bits.  */
    163 enum built_in_class {
    164   NOT_BUILT_IN = 0,
    165   BUILT_IN_FRONTEND,
    166   BUILT_IN_MD,
    167   BUILT_IN_NORMAL
    168 };
    169 
    170 /* Last marker used for LTO stremaing of built_in_class.  We cannot add it
    171    to the enum since we need the enumb to fit in 2 bits.  */
    172 #define BUILT_IN_LAST (BUILT_IN_NORMAL + 1)
    173 
    174 /* Codes that identify the various built in functions
    175    so that expand_call can identify them quickly.  */
    176 #define DEF_BUILTIN(ENUM, N, C, T, LT, B, F, NA, AT, IM, COND) ENUM,
    177 enum built_in_function {
    178 #include "builtins.def"
    179   /* Complex division routines in libgcc.  These are done via builtins
    180      because emit_library_call_value can't handle complex values.  */
    181   BUILT_IN_COMPLEX_MUL_MIN,
    182   BUILT_IN_COMPLEX_MUL_MAX
    183     = BUILT_IN_COMPLEX_MUL_MIN
    184       + MAX_MODE_COMPLEX_FLOAT
    185       - MIN_MODE_COMPLEX_FLOAT,
    186 
    187   BUILT_IN_COMPLEX_DIV_MIN,
    188   BUILT_IN_COMPLEX_DIV_MAX
    189     = BUILT_IN_COMPLEX_DIV_MIN
    190       + MAX_MODE_COMPLEX_FLOAT
    191       - MIN_MODE_COMPLEX_FLOAT,
    192 
    193   /* Upper bound on non-language-specific builtins.  */
    194   END_BUILTINS
    195 };
    196 
    197 /* Internal functions.  */
    198 enum internal_fn {
    199 #define DEF_INTERNAL_FN(CODE, FLAGS, FNSPEC) IFN_##CODE,
    200 #include "internal-fn.def"
    201   IFN_LAST
    202 };
    203 
    204 /* An enum that combines target-independent built-in functions with
    205    internal functions, so that they can be treated in a similar way.
    206    The numbers for built-in functions are the same as for the
    207    built_in_function enum.  The numbers for internal functions
    208    start at END_BUITLINS.  */
    209 enum combined_fn {
    210 #define DEF_BUILTIN(ENUM, N, C, T, LT, B, F, NA, AT, IM, COND) \
    211   CFN_##ENUM = int (ENUM),
    212 #include "builtins.def"
    213 
    214 
    215 #define DEF_INTERNAL_FN(CODE, FLAGS, FNSPEC) \
    216   CFN_##CODE = int (END_BUILTINS) + int (IFN_##CODE),
    217 #include "internal-fn.def"
    218 
    219   CFN_LAST
    220 };
    221 
    222 /* Tree code classes.  Each tree_code has an associated code class
    223    represented by a TREE_CODE_CLASS.  */
    224 enum tree_code_class {
    225   tcc_exceptional, /* An exceptional code (fits no category).  */
    226   tcc_constant,    /* A constant.  */
    227   /* Order of tcc_type and tcc_declaration is important.  */
    228   tcc_type,        /* A type object code.  */
    229   tcc_declaration, /* A declaration (also serving as variable refs).  */
    230   tcc_reference,   /* A reference to storage.  */
    231   tcc_comparison,  /* A comparison expression.  */
    232   tcc_unary,       /* A unary arithmetic expression.  */
    233   tcc_binary,      /* A binary arithmetic expression.  */
    234   tcc_statement,   /* A statement expression, which have side effects
    235 		      but usually no interesting value.  */
    236   tcc_vl_exp,      /* A function call or other expression with a
    237 		      variable-length operand vector.  */
    238   tcc_expression   /* Any other expression.  */
    239 };
    240 
    241 /* OMP_CLAUSE codes.  Do not reorder, as this is used to index into
    242    the tables omp_clause_num_ops and omp_clause_code_name.  */
    243 enum omp_clause_code {
    244   /* Clause zero is special-cased inside the parser
    245      (c_parser_omp_variable_list).  */
    246   OMP_CLAUSE_ERROR = 0,
    247 
    248   /* OpenACC/OpenMP clause: private (variable_list).  */
    249   OMP_CLAUSE_PRIVATE,
    250 
    251   /* OpenMP clause: shared (variable_list).  */
    252   OMP_CLAUSE_SHARED,
    253 
    254   /* OpenACC/OpenMP clause: firstprivate (variable_list).  */
    255   OMP_CLAUSE_FIRSTPRIVATE,
    256 
    257   /* OpenMP clause: lastprivate (variable_list).  */
    258   OMP_CLAUSE_LASTPRIVATE,
    259 
    260   /* OpenACC/OpenMP clause: reduction (operator:variable_list).
    261      OMP_CLAUSE_REDUCTION_CODE: The tree_code of the operator.
    262      Operand 1: OMP_CLAUSE_REDUCTION_INIT: Stmt-list to initialize the var.
    263      Operand 2: OMP_CLAUSE_REDUCTION_MERGE: Stmt-list to merge private var
    264                 into the shared one.
    265      Operand 3: OMP_CLAUSE_REDUCTION_PLACEHOLDER: A dummy VAR_DECL
    266                 placeholder used in OMP_CLAUSE_REDUCTION_{INIT,MERGE}.
    267      Operand 4: OMP_CLAUSE_REDUCTION_DECL_PLACEHOLDER: Another dummy
    268 		VAR_DECL placeholder, used like the above for C/C++ array
    269 		reductions.  */
    270   OMP_CLAUSE_REDUCTION,
    271 
    272   /* OpenMP clause: task_reduction (operator:variable_list).  */
    273   OMP_CLAUSE_TASK_REDUCTION,
    274 
    275   /* OpenMP clause: in_reduction (operator:variable_list).  */
    276   OMP_CLAUSE_IN_REDUCTION,
    277 
    278   /* OpenMP clause: copyin (variable_list).  */
    279   OMP_CLAUSE_COPYIN,
    280 
    281   /* OpenMP clause: copyprivate (variable_list).  */
    282   OMP_CLAUSE_COPYPRIVATE,
    283 
    284   /* OpenMP clause: linear (variable-list[:linear-step]).  */
    285   OMP_CLAUSE_LINEAR,
    286 
    287   /* OpenMP clause: affinity([depend-modifier :] variable-list).  */
    288   OMP_CLAUSE_AFFINITY,
    289 
    290   /* OpenMP clause: aligned (variable-list[:alignment]).  */
    291   OMP_CLAUSE_ALIGNED,
    292 
    293   /* OpenMP clause: allocate ([allocator:]variable-list).  */
    294   OMP_CLAUSE_ALLOCATE,
    295 
    296   /* OpenMP clause: depend ({in,out,inout}:variable-list).  */
    297   OMP_CLAUSE_DEPEND,
    298 
    299   /* OpenMP clause: nontemporal (variable-list).  */
    300   OMP_CLAUSE_NONTEMPORAL,
    301 
    302   /* OpenMP clause: uniform (argument-list).  */
    303   OMP_CLAUSE_UNIFORM,
    304 
    305   /* OpenMP clause: to (extended-list).
    306      Only when it appears in declare target.  */
    307   OMP_CLAUSE_TO_DECLARE,
    308 
    309   /* OpenMP clause: link (variable-list).  */
    310   OMP_CLAUSE_LINK,
    311 
    312   /* OpenMP clause: detach (event-handle).  */
    313   OMP_CLAUSE_DETACH,
    314 
    315   /* OpenACC clause: use_device (variable-list).
    316      OpenMP clause: use_device_ptr (ptr-list).  */
    317   OMP_CLAUSE_USE_DEVICE_PTR,
    318 
    319   /* OpenMP clause: use_device_addr (variable-list).  */
    320   OMP_CLAUSE_USE_DEVICE_ADDR,
    321 
    322   /* OpenMP clause: is_device_ptr (variable-list).  */
    323   OMP_CLAUSE_IS_DEVICE_PTR,
    324 
    325   /* OpenMP clause: inclusive (variable-list).  */
    326   OMP_CLAUSE_INCLUSIVE,
    327 
    328   /* OpenMP clause: exclusive (variable-list).  */
    329   OMP_CLAUSE_EXCLUSIVE,
    330 
    331   /* OpenMP clause: from (variable-list).  */
    332   OMP_CLAUSE_FROM,
    333 
    334   /* OpenMP clause: to (variable-list).  */
    335   OMP_CLAUSE_TO,
    336 
    337   /* OpenACC clauses: {copy, copyin, copyout, create, delete, deviceptr,
    338      device, host (self), present, present_or_copy (pcopy), present_or_copyin
    339      (pcopyin), present_or_copyout (pcopyout), present_or_create (pcreate)}
    340      (variable-list).
    341 
    342      OpenMP clause: map ({alloc:,to:,from:,tofrom:,}variable-list).  */
    343   OMP_CLAUSE_MAP,
    344 
    345   /* OpenMP clause: has_device_addr (variable-list).  */
    346   OMP_CLAUSE_HAS_DEVICE_ADDR,
    347 
    348   /* Internal structure to hold OpenACC cache directive's variable-list.
    349      #pragma acc cache (variable-list).  */
    350   OMP_CLAUSE__CACHE_,
    351 
    352   /* OpenACC clause: gang [(gang-argument-list)].
    353      Where
    354       gang-argument-list: [gang-argument-list, ] gang-argument
    355       gang-argument: [num:] integer-expression
    356                    | static: size-expression
    357       size-expression: * | integer-expression.  */
    358   OMP_CLAUSE_GANG,
    359 
    360   /* OpenACC clause: async [(integer-expression)].  */
    361   OMP_CLAUSE_ASYNC,
    362 
    363   /* OpenACC clause: wait [(integer-expression-list)].  */
    364   OMP_CLAUSE_WAIT,
    365 
    366   /* OpenACC clause: auto.  */
    367   OMP_CLAUSE_AUTO,
    368 
    369   /* OpenACC clause: seq.  */
    370   OMP_CLAUSE_SEQ,
    371 
    372   /* Internal clause: temporary for combined loops expansion.  */
    373   OMP_CLAUSE__LOOPTEMP_,
    374 
    375   /* Internal clause: temporary for task reductions.  */
    376   OMP_CLAUSE__REDUCTEMP_,
    377 
    378   /* Internal clause: temporary for lastprivate(conditional:).  */
    379   OMP_CLAUSE__CONDTEMP_,
    380 
    381   /* Internal clause: temporary for inscan reductions.  */
    382   OMP_CLAUSE__SCANTEMP_,
    383 
    384   /* OpenACC/OpenMP clause: if (scalar-expression).  */
    385   OMP_CLAUSE_IF,
    386 
    387   /* OpenMP clause: num_threads (integer-expression).  */
    388   OMP_CLAUSE_NUM_THREADS,
    389 
    390   /* OpenMP clause: schedule.  */
    391   OMP_CLAUSE_SCHEDULE,
    392 
    393   /* OpenMP clause: nowait.  */
    394   OMP_CLAUSE_NOWAIT,
    395 
    396   /* OpenMP clause: ordered [(constant-integer-expression)].  */
    397   OMP_CLAUSE_ORDERED,
    398 
    399   /* OpenACC/OpenMP clause: default.  */
    400   OMP_CLAUSE_DEFAULT,
    401 
    402   /* OpenACC/OpenMP clause: collapse (constant-integer-expression).  */
    403   OMP_CLAUSE_COLLAPSE,
    404 
    405   /* OpenMP clause: untied.  */
    406   OMP_CLAUSE_UNTIED,
    407 
    408   /* OpenMP clause: final (scalar-expression).  */
    409   OMP_CLAUSE_FINAL,
    410 
    411   /* OpenMP clause: mergeable.  */
    412   OMP_CLAUSE_MERGEABLE,
    413 
    414   /* OpenMP clause: device (integer-expression).  */
    415   OMP_CLAUSE_DEVICE,
    416 
    417   /* OpenMP clause: dist_schedule (static[:chunk-size]).  */
    418   OMP_CLAUSE_DIST_SCHEDULE,
    419 
    420   /* OpenMP clause: inbranch.  */
    421   OMP_CLAUSE_INBRANCH,
    422 
    423   /* OpenMP clause: notinbranch.  */
    424   OMP_CLAUSE_NOTINBRANCH,
    425 
    426   /* OpenMP clause: num_teams(integer-expression).  */
    427   OMP_CLAUSE_NUM_TEAMS,
    428 
    429   /* OpenMP clause: thread_limit(integer-expression).  */
    430   OMP_CLAUSE_THREAD_LIMIT,
    431 
    432   /* OpenMP clause: proc_bind ({master,close,spread}).  */
    433   OMP_CLAUSE_PROC_BIND,
    434 
    435   /* OpenMP clause: safelen (constant-integer-expression).  */
    436   OMP_CLAUSE_SAFELEN,
    437 
    438   /* OpenMP clause: simdlen (constant-integer-expression).  */
    439   OMP_CLAUSE_SIMDLEN,
    440 
    441   /* OpenMP clause: device_type ({host,nohost,any}).  */
    442   OMP_CLAUSE_DEVICE_TYPE,
    443 
    444   /* OpenMP clause: for.  */
    445   OMP_CLAUSE_FOR,
    446 
    447   /* OpenMP clause: parallel.  */
    448   OMP_CLAUSE_PARALLEL,
    449 
    450   /* OpenMP clause: sections.  */
    451   OMP_CLAUSE_SECTIONS,
    452 
    453   /* OpenMP clause: taskgroup.  */
    454   OMP_CLAUSE_TASKGROUP,
    455 
    456   /* OpenMP clause: priority (integer-expression).  */
    457   OMP_CLAUSE_PRIORITY,
    458 
    459   /* OpenMP clause: grainsize (integer-expression).  */
    460   OMP_CLAUSE_GRAINSIZE,
    461 
    462   /* OpenMP clause: num_tasks (integer-expression).  */
    463   OMP_CLAUSE_NUM_TASKS,
    464 
    465   /* OpenMP clause: nogroup.  */
    466   OMP_CLAUSE_NOGROUP,
    467 
    468   /* OpenMP clause: threads.  */
    469   OMP_CLAUSE_THREADS,
    470 
    471   /* OpenMP clause: simd.  */
    472   OMP_CLAUSE_SIMD,
    473 
    474   /* OpenMP clause: hint (integer-expression).  */
    475   OMP_CLAUSE_HINT,
    476 
    477   /* OpenMP clause: defaultmap (tofrom: scalar).  */
    478   OMP_CLAUSE_DEFAULTMAP,
    479 
    480   /* OpenMP clause: order (concurrent).  */
    481   OMP_CLAUSE_ORDER,
    482 
    483   /* OpenMP clause: bind (binding).  */
    484   OMP_CLAUSE_BIND,
    485 
    486   /* OpenMP clause: filter (integer-expression).  */
    487   OMP_CLAUSE_FILTER,
    488 
    489   /* Internally used only clause, holding SIMD uid.  */
    490   OMP_CLAUSE__SIMDUID_,
    491 
    492   /* Internally used only clause, flag whether this is SIMT simd
    493      loop or not.  */
    494   OMP_CLAUSE__SIMT_,
    495 
    496   /* OpenACC clause: independent.  */
    497   OMP_CLAUSE_INDEPENDENT,
    498 
    499   /* OpenACC clause: worker [( [num:] integer-expression)].  */
    500   OMP_CLAUSE_WORKER,
    501 
    502   /* OpenACC clause: vector [( [length:] integer-expression)].  */
    503   OMP_CLAUSE_VECTOR,
    504 
    505   /* OpenACC clause: num_gangs (integer-expression).  */
    506   OMP_CLAUSE_NUM_GANGS,
    507 
    508   /* OpenACC clause: num_workers (integer-expression).  */
    509   OMP_CLAUSE_NUM_WORKERS,
    510 
    511   /* OpenACC clause: vector_length (integer-expression).  */
    512   OMP_CLAUSE_VECTOR_LENGTH,
    513 
    514   /* OpenACC clause: tile ( size-expr-list ).  */
    515   OMP_CLAUSE_TILE,
    516 
    517   /* OpenACC clause: if_present.  */
    518   OMP_CLAUSE_IF_PRESENT,
    519 
    520   /* OpenACC clause: finalize.  */
    521   OMP_CLAUSE_FINALIZE,
    522 
    523   /* OpenACC clause: nohost.  */
    524   OMP_CLAUSE_NOHOST,
    525 };
    526 
    527 #undef DEFTREESTRUCT
    528 #define DEFTREESTRUCT(ENUM, NAME) ENUM,
    529 enum tree_node_structure_enum {
    530 #include "treestruct.def"
    531   LAST_TS_ENUM
    532 };
    533 #undef DEFTREESTRUCT
    534 
    535 enum omp_clause_schedule_kind {
    536   OMP_CLAUSE_SCHEDULE_STATIC,
    537   OMP_CLAUSE_SCHEDULE_DYNAMIC,
    538   OMP_CLAUSE_SCHEDULE_GUIDED,
    539   OMP_CLAUSE_SCHEDULE_AUTO,
    540   OMP_CLAUSE_SCHEDULE_RUNTIME,
    541   OMP_CLAUSE_SCHEDULE_MASK = (1 << 3) - 1,
    542   OMP_CLAUSE_SCHEDULE_MONOTONIC = (1 << 3),
    543   OMP_CLAUSE_SCHEDULE_NONMONOTONIC = (1 << 4),
    544   OMP_CLAUSE_SCHEDULE_LAST = 2 * OMP_CLAUSE_SCHEDULE_NONMONOTONIC - 1
    545 };
    546 
    547 enum omp_clause_default_kind {
    548   OMP_CLAUSE_DEFAULT_UNSPECIFIED,
    549   OMP_CLAUSE_DEFAULT_SHARED,
    550   OMP_CLAUSE_DEFAULT_NONE,
    551   OMP_CLAUSE_DEFAULT_PRIVATE,
    552   OMP_CLAUSE_DEFAULT_FIRSTPRIVATE,
    553   OMP_CLAUSE_DEFAULT_PRESENT,
    554   OMP_CLAUSE_DEFAULT_LAST
    555 };
    556 
    557 enum omp_clause_defaultmap_kind {
    558   OMP_CLAUSE_DEFAULTMAP_CATEGORY_UNSPECIFIED,
    559   OMP_CLAUSE_DEFAULTMAP_CATEGORY_SCALAR,
    560   OMP_CLAUSE_DEFAULTMAP_CATEGORY_AGGREGATE,
    561   OMP_CLAUSE_DEFAULTMAP_CATEGORY_ALLOCATABLE,
    562   OMP_CLAUSE_DEFAULTMAP_CATEGORY_POINTER,
    563   OMP_CLAUSE_DEFAULTMAP_CATEGORY_MASK = 7,
    564   OMP_CLAUSE_DEFAULTMAP_ALLOC = 1 * (OMP_CLAUSE_DEFAULTMAP_CATEGORY_MASK + 1),
    565   OMP_CLAUSE_DEFAULTMAP_TO = 2 * (OMP_CLAUSE_DEFAULTMAP_CATEGORY_MASK + 1),
    566   OMP_CLAUSE_DEFAULTMAP_FROM = 3 * (OMP_CLAUSE_DEFAULTMAP_CATEGORY_MASK + 1),
    567   OMP_CLAUSE_DEFAULTMAP_TOFROM = 4 * (OMP_CLAUSE_DEFAULTMAP_CATEGORY_MASK + 1),
    568   OMP_CLAUSE_DEFAULTMAP_FIRSTPRIVATE
    569     = 5 * (OMP_CLAUSE_DEFAULTMAP_CATEGORY_MASK + 1),
    570   OMP_CLAUSE_DEFAULTMAP_NONE = 6 * (OMP_CLAUSE_DEFAULTMAP_CATEGORY_MASK + 1),
    571   OMP_CLAUSE_DEFAULTMAP_DEFAULT
    572     = 7 * (OMP_CLAUSE_DEFAULTMAP_CATEGORY_MASK + 1),
    573   OMP_CLAUSE_DEFAULTMAP_MASK = 7 * (OMP_CLAUSE_DEFAULTMAP_CATEGORY_MASK + 1)
    574 };
    575 
    576 enum omp_clause_bind_kind {
    577   OMP_CLAUSE_BIND_TEAMS,
    578   OMP_CLAUSE_BIND_PARALLEL,
    579   OMP_CLAUSE_BIND_THREAD
    580 };
    581 
    582 /* memory-order-clause on OpenMP atomic/flush constructs or
    583    argument of atomic_default_mem_order clause.  */
    584 enum omp_memory_order {
    585   OMP_MEMORY_ORDER_UNSPECIFIED,
    586   OMP_MEMORY_ORDER_RELAXED,
    587   OMP_MEMORY_ORDER_ACQUIRE,
    588   OMP_MEMORY_ORDER_RELEASE,
    589   OMP_MEMORY_ORDER_ACQ_REL,
    590   OMP_MEMORY_ORDER_SEQ_CST,
    591   OMP_MEMORY_ORDER_MASK = 7,
    592   OMP_FAIL_MEMORY_ORDER_UNSPECIFIED = OMP_MEMORY_ORDER_UNSPECIFIED * 8,
    593   OMP_FAIL_MEMORY_ORDER_RELAXED = OMP_MEMORY_ORDER_RELAXED * 8,
    594   OMP_FAIL_MEMORY_ORDER_ACQUIRE = OMP_MEMORY_ORDER_ACQUIRE * 8,
    595   OMP_FAIL_MEMORY_ORDER_RELEASE = OMP_MEMORY_ORDER_RELEASE * 8,
    596   OMP_FAIL_MEMORY_ORDER_ACQ_REL = OMP_MEMORY_ORDER_ACQ_REL * 8,
    597   OMP_FAIL_MEMORY_ORDER_SEQ_CST = OMP_MEMORY_ORDER_SEQ_CST * 8,
    598   OMP_FAIL_MEMORY_ORDER_MASK = OMP_MEMORY_ORDER_MASK * 8
    599 };
    600 #define OMP_FAIL_MEMORY_ORDER_SHIFT 3
    601 
    602 /* There is a TYPE_QUAL value for each type qualifier.  They can be
    603    combined by bitwise-or to form the complete set of qualifiers for a
    604    type.  */
    605 enum cv_qualifier {
    606   TYPE_UNQUALIFIED   = 0x0,
    607   TYPE_QUAL_CONST    = 0x1,
    608   TYPE_QUAL_VOLATILE = 0x2,
    609   TYPE_QUAL_RESTRICT = 0x4,
    610   TYPE_QUAL_ATOMIC   = 0x8
    611 };
    612 
    613 /* Standard named or nameless data types of the C compiler.  */
    614 enum tree_index {
    615   TI_ERROR_MARK,
    616   TI_INTQI_TYPE,
    617   TI_INTHI_TYPE,
    618   TI_INTSI_TYPE,
    619   TI_INTDI_TYPE,
    620   TI_INTTI_TYPE,
    621 
    622   TI_UINTQI_TYPE,
    623   TI_UINTHI_TYPE,
    624   TI_UINTSI_TYPE,
    625   TI_UINTDI_TYPE,
    626   TI_UINTTI_TYPE,
    627 
    628   TI_ATOMICQI_TYPE,
    629   TI_ATOMICHI_TYPE,
    630   TI_ATOMICSI_TYPE,
    631   TI_ATOMICDI_TYPE,
    632   TI_ATOMICTI_TYPE,
    633 
    634   TI_UINT16_TYPE,
    635   TI_UINT32_TYPE,
    636   TI_UINT64_TYPE,
    637   TI_UINT128_TYPE,
    638 
    639   TI_VOID,
    640 
    641   TI_INTEGER_ZERO,
    642   TI_INTEGER_ONE,
    643   TI_INTEGER_THREE,
    644   TI_INTEGER_MINUS_ONE,
    645   TI_NULL_POINTER,
    646 
    647   TI_SIZE_ZERO,
    648   TI_SIZE_ONE,
    649 
    650   TI_BITSIZE_ZERO,
    651   TI_BITSIZE_ONE,
    652   TI_BITSIZE_UNIT,
    653 
    654   TI_PUBLIC,
    655   TI_PROTECTED,
    656   TI_PRIVATE,
    657 
    658   TI_BOOLEAN_FALSE,
    659   TI_BOOLEAN_TRUE,
    660 
    661   TI_FLOAT_TYPE,
    662   TI_DOUBLE_TYPE,
    663   TI_LONG_DOUBLE_TYPE,
    664 
    665   /* The _FloatN and _FloatNx types must be consecutive, and in the
    666      same sequence as the corresponding complex types, which must also
    667      be consecutive; _FloatN must come before _FloatNx; the order must
    668      also be the same as in the floatn_nx_types array and the RID_*
    669      values in c-common.h.  This is so that iterations over these
    670      types work as intended.  */
    671   TI_FLOAT16_TYPE,
    672   TI_FLOATN_TYPE_FIRST = TI_FLOAT16_TYPE,
    673   TI_FLOATN_NX_TYPE_FIRST = TI_FLOAT16_TYPE,
    674   TI_FLOAT32_TYPE,
    675   TI_FLOAT64_TYPE,
    676   TI_FLOAT128_TYPE,
    677   TI_FLOATN_TYPE_LAST = TI_FLOAT128_TYPE,
    678 #define NUM_FLOATN_TYPES (TI_FLOATN_TYPE_LAST - TI_FLOATN_TYPE_FIRST + 1)
    679   TI_FLOAT32X_TYPE,
    680   TI_FLOATNX_TYPE_FIRST = TI_FLOAT32X_TYPE,
    681   TI_FLOAT64X_TYPE,
    682   TI_FLOAT128X_TYPE,
    683   TI_FLOATNX_TYPE_LAST = TI_FLOAT128X_TYPE,
    684   TI_FLOATN_NX_TYPE_LAST = TI_FLOAT128X_TYPE,
    685 #define NUM_FLOATNX_TYPES (TI_FLOATNX_TYPE_LAST - TI_FLOATNX_TYPE_FIRST + 1)
    686 #define NUM_FLOATN_NX_TYPES (TI_FLOATN_NX_TYPE_LAST		\
    687 			     - TI_FLOATN_NX_TYPE_FIRST		\
    688 			     + 1)
    689 
    690   /* Put the complex types after their component types, so that in (sequential)
    691      tree streaming we can assert that their component types have already been
    692      handled (see tree-streamer.cc:record_common_node).  */
    693   TI_COMPLEX_INTEGER_TYPE,
    694   TI_COMPLEX_FLOAT_TYPE,
    695   TI_COMPLEX_DOUBLE_TYPE,
    696   TI_COMPLEX_LONG_DOUBLE_TYPE,
    697 
    698   TI_COMPLEX_FLOAT16_TYPE,
    699   TI_COMPLEX_FLOATN_NX_TYPE_FIRST = TI_COMPLEX_FLOAT16_TYPE,
    700   TI_COMPLEX_FLOAT32_TYPE,
    701   TI_COMPLEX_FLOAT64_TYPE,
    702   TI_COMPLEX_FLOAT128_TYPE,
    703   TI_COMPLEX_FLOAT32X_TYPE,
    704   TI_COMPLEX_FLOAT64X_TYPE,
    705   TI_COMPLEX_FLOAT128X_TYPE,
    706 
    707   TI_FLOAT_PTR_TYPE,
    708   TI_DOUBLE_PTR_TYPE,
    709   TI_LONG_DOUBLE_PTR_TYPE,
    710   TI_INTEGER_PTR_TYPE,
    711 
    712   TI_VOID_TYPE,
    713   TI_PTR_TYPE,
    714   TI_CONST_PTR_TYPE,
    715   TI_SIZE_TYPE,
    716   TI_PID_TYPE,
    717   TI_PTRDIFF_TYPE,
    718   TI_VA_LIST_TYPE,
    719   TI_VA_LIST_GPR_COUNTER_FIELD,
    720   TI_VA_LIST_FPR_COUNTER_FIELD,
    721   TI_BOOLEAN_TYPE,
    722   TI_FILEPTR_TYPE,
    723   TI_CONST_TM_PTR_TYPE,
    724   TI_FENV_T_PTR_TYPE,
    725   TI_CONST_FENV_T_PTR_TYPE,
    726   TI_FEXCEPT_T_PTR_TYPE,
    727   TI_CONST_FEXCEPT_T_PTR_TYPE,
    728   TI_POINTER_SIZED_TYPE,
    729 
    730   TI_DFLOAT32_TYPE,
    731   TI_DFLOAT64_TYPE,
    732   TI_DFLOAT128_TYPE,
    733 
    734   TI_VOID_LIST_NODE,
    735 
    736   TI_MAIN_IDENTIFIER,
    737 
    738   TI_SAT_SFRACT_TYPE,
    739   TI_SAT_FRACT_TYPE,
    740   TI_SAT_LFRACT_TYPE,
    741   TI_SAT_LLFRACT_TYPE,
    742   TI_SAT_USFRACT_TYPE,
    743   TI_SAT_UFRACT_TYPE,
    744   TI_SAT_ULFRACT_TYPE,
    745   TI_SAT_ULLFRACT_TYPE,
    746   TI_SFRACT_TYPE,
    747   TI_FRACT_TYPE,
    748   TI_LFRACT_TYPE,
    749   TI_LLFRACT_TYPE,
    750   TI_USFRACT_TYPE,
    751   TI_UFRACT_TYPE,
    752   TI_ULFRACT_TYPE,
    753   TI_ULLFRACT_TYPE,
    754   TI_SAT_SACCUM_TYPE,
    755   TI_SAT_ACCUM_TYPE,
    756   TI_SAT_LACCUM_TYPE,
    757   TI_SAT_LLACCUM_TYPE,
    758   TI_SAT_USACCUM_TYPE,
    759   TI_SAT_UACCUM_TYPE,
    760   TI_SAT_ULACCUM_TYPE,
    761   TI_SAT_ULLACCUM_TYPE,
    762   TI_SACCUM_TYPE,
    763   TI_ACCUM_TYPE,
    764   TI_LACCUM_TYPE,
    765   TI_LLACCUM_TYPE,
    766   TI_USACCUM_TYPE,
    767   TI_UACCUM_TYPE,
    768   TI_ULACCUM_TYPE,
    769   TI_ULLACCUM_TYPE,
    770   TI_QQ_TYPE,
    771   TI_HQ_TYPE,
    772   TI_SQ_TYPE,
    773   TI_DQ_TYPE,
    774   TI_TQ_TYPE,
    775   TI_UQQ_TYPE,
    776   TI_UHQ_TYPE,
    777   TI_USQ_TYPE,
    778   TI_UDQ_TYPE,
    779   TI_UTQ_TYPE,
    780   TI_SAT_QQ_TYPE,
    781   TI_SAT_HQ_TYPE,
    782   TI_SAT_SQ_TYPE,
    783   TI_SAT_DQ_TYPE,
    784   TI_SAT_TQ_TYPE,
    785   TI_SAT_UQQ_TYPE,
    786   TI_SAT_UHQ_TYPE,
    787   TI_SAT_USQ_TYPE,
    788   TI_SAT_UDQ_TYPE,
    789   TI_SAT_UTQ_TYPE,
    790   TI_HA_TYPE,
    791   TI_SA_TYPE,
    792   TI_DA_TYPE,
    793   TI_TA_TYPE,
    794   TI_UHA_TYPE,
    795   TI_USA_TYPE,
    796   TI_UDA_TYPE,
    797   TI_UTA_TYPE,
    798   TI_SAT_HA_TYPE,
    799   TI_SAT_SA_TYPE,
    800   TI_SAT_DA_TYPE,
    801   TI_SAT_TA_TYPE,
    802   TI_SAT_UHA_TYPE,
    803   TI_SAT_USA_TYPE,
    804   TI_SAT_UDA_TYPE,
    805   TI_SAT_UTA_TYPE,
    806 
    807   TI_MODULE_HWM,
    808   /* Nodes below here change during compilation, and should therefore
    809      not be in the C++ module's global tree table.  */
    810 
    811   TI_OPTIMIZATION_DEFAULT,
    812   TI_OPTIMIZATION_CURRENT,
    813   TI_TARGET_OPTION_DEFAULT,
    814   TI_TARGET_OPTION_CURRENT,
    815   TI_CURRENT_TARGET_PRAGMA,
    816   TI_CURRENT_OPTIMIZE_PRAGMA,
    817 
    818   TI_CHREC_DONT_KNOW,
    819   TI_CHREC_KNOWN,
    820 
    821   TI_MAX
    822 };
    823 
    824 /* An enumeration of the standard C integer types.  These must be
    825    ordered so that shorter types appear before longer ones, and so
    826    that signed types appear before unsigned ones, for the correct
    827    functioning of interpret_integer() in c-lex.cc.  */
    828 enum integer_type_kind {
    829   itk_char,
    830   itk_signed_char,
    831   itk_unsigned_char,
    832   itk_short,
    833   itk_unsigned_short,
    834   itk_int,
    835   itk_unsigned_int,
    836   itk_long,
    837   itk_unsigned_long,
    838   itk_long_long,
    839   itk_unsigned_long_long,
    840 
    841   itk_intN_0,
    842   itk_unsigned_intN_0,
    843   itk_intN_1,
    844   itk_unsigned_intN_1,
    845   itk_intN_2,
    846   itk_unsigned_intN_2,
    847   itk_intN_3,
    848   itk_unsigned_intN_3,
    849 
    850   itk_none
    851 };
    852 
    853 /* A pointer-to-function member type looks like:
    854 
    855      struct {
    856        __P __pfn;
    857        ptrdiff_t __delta;
    858      };
    859 
    860    If __pfn is NULL, it is a NULL pointer-to-member-function.
    861 
    862    (Because the vtable is always the first thing in the object, we
    863    don't need its offset.)  If the function is virtual, then PFN is
    864    one plus twice the index into the vtable; otherwise, it is just a
    865    pointer to the function.
    866 
    867    Unfortunately, using the lowest bit of PFN doesn't work in
    868    architectures that don't impose alignment requirements on function
    869    addresses, or that use the lowest bit to tell one ISA from another,
    870    for example.  For such architectures, we use the lowest bit of
    871    DELTA instead of the lowest bit of the PFN, and DELTA will be
    872    multiplied by 2.  */
    873 enum ptrmemfunc_vbit_where_t {
    874   ptrmemfunc_vbit_in_pfn,
    875   ptrmemfunc_vbit_in_delta
    876 };
    877 
    878 /* Flags that may be passed in the third argument of decl_attributes, and
    879    to handler functions for attributes.  */
    880 enum attribute_flags {
    881   /* The type passed in is the type of a DECL, and any attributes that
    882      should be passed in again to be applied to the DECL rather than the
    883      type should be returned.  */
    884   ATTR_FLAG_DECL_NEXT = 1,
    885   /* The type passed in is a function return type, and any attributes that
    886      should be passed in again to be applied to the function type rather
    887      than the return type should be returned.  */
    888   ATTR_FLAG_FUNCTION_NEXT = 2,
    889   /* The type passed in is an array element type, and any attributes that
    890      should be passed in again to be applied to the array type rather
    891      than the element type should be returned.  */
    892   ATTR_FLAG_ARRAY_NEXT = 4,
    893   /* The type passed in is a structure, union or enumeration type being
    894      created, and should be modified in place.  */
    895   ATTR_FLAG_TYPE_IN_PLACE = 8,
    896   /* The attributes are being applied by default to a library function whose
    897      name indicates known behavior, and should be silently ignored if they
    898      are not in fact compatible with the function type.  */
    899   ATTR_FLAG_BUILT_IN = 16,
    900   /* A given attribute has been parsed as a C++-11 attribute.  */
    901   ATTR_FLAG_CXX11 = 32,
    902   /* The attribute handler is being invoked with an internal argument
    903      that may not otherwise be valid when specified in source code.  */
    904   ATTR_FLAG_INTERNAL = 64
    905 };
    906 
    907 /* Types used to represent sizes.  */
    908 enum size_type_kind {
    909   stk_sizetype,		/* Normal representation of sizes in bytes.  */
    910   stk_ssizetype,	/* Signed representation of sizes in bytes.  */
    911   stk_bitsizetype,	/* Normal representation of sizes in bits.  */
    912   stk_sbitsizetype,	/* Signed representation of sizes in bits.  */
    913   stk_type_kind_last
    914 };
    915 
    916 /* Flags controlling operand_equal_p() behavior.  */
    917 enum operand_equal_flag {
    918   OEP_ONLY_CONST = 1,
    919   OEP_PURE_SAME = 2,
    920   OEP_MATCH_SIDE_EFFECTS = 4,
    921   OEP_ADDRESS_OF = 8,
    922   /* Internal within operand_equal_p:  */
    923   OEP_NO_HASH_CHECK = 16,
    924   /* Internal within inchash::add_expr:  */
    925   OEP_HASH_CHECK = 32,
    926   /* Makes operand_equal_p handle more expressions:  */
    927   OEP_LEXICOGRAPHIC = 64,
    928   OEP_BITWISE = 128,
    929   /* For OEP_ADDRESS_OF of COMPONENT_REFs, only consider same fields as
    930      equivalent rather than also different fields with the same offset.  */
    931   OEP_ADDRESS_OF_SAME_FIELD = 256,
    932   /* In conjunction with OEP_LEXICOGRAPHIC considers names of declarations
    933      of the same kind.  Used to compare VLA bounds involving parameters
    934      across redeclarations of the same function.  */
    935   OEP_DECL_NAME = 512
    936 };
    937 
    938 /* Enum and arrays used for tree allocation stats.
    939    Keep in sync with tree.cc:tree_node_kind_names.  */
    940 enum tree_node_kind {
    941   d_kind,
    942   t_kind,
    943   b_kind,
    944   s_kind,
    945   r_kind,
    946   e_kind,
    947   c_kind,
    948   id_kind,
    949   vec_kind,
    950   binfo_kind,
    951   ssa_name_kind,
    952   constr_kind,
    953   x_kind,
    954   lang_decl,
    955   lang_type,
    956   omp_clause_kind,
    957   all_kinds
    958 };
    959 
    960 enum annot_expr_kind {
    961   annot_expr_ivdep_kind,
    962   annot_expr_unroll_kind,
    963   annot_expr_no_vector_kind,
    964   annot_expr_vector_kind,
    965   annot_expr_parallel_kind,
    966   annot_expr_kind_last
    967 };
    968 
    969 /* The kind of a TREE_CLOBBER_P CONSTRUCTOR node.  */
    970 enum clobber_kind {
    971   /* Unspecified, this clobber acts as a store of an undefined value.  */
    972   CLOBBER_UNDEF,
    973   /* This clobber ends the lifetime of the storage.  */
    974   CLOBBER_EOL,
    975   CLOBBER_LAST
    976 };
    977 
    978 /*---------------------------------------------------------------------------
    979                                 Type definitions
    980 ---------------------------------------------------------------------------*/
    981 /* When processing aliases at the symbol table level, we need the
    982    declaration of target. For this reason we need to queue aliases and
    983    process them after all declarations has been produced.  */
    984 struct GTY(()) alias_pair {
    985   tree decl;
    986   tree target;
    987 };
    988 
    989 /* An initialization priority.  */
    990 typedef unsigned short priority_type;
    991 
    992 /* The type of a callback function for walking over tree structure.  */
    993 typedef tree (*walk_tree_fn) (tree *, int *, void *);
    994 
    995 /* The type of a callback function that represents a custom walk_tree.  */
    996 typedef tree (*walk_tree_lh) (tree *, int *, tree (*) (tree *, int *, void *),
    997 			      void *, hash_set<tree> *);
    998 
    999 
   1000 /*---------------------------------------------------------------------------
   1001                               Main data structures
   1002 ---------------------------------------------------------------------------*/
   1003 /* A tree node can represent a data type, a variable, an expression
   1004    or a statement.  Each node has a TREE_CODE which says what kind of
   1005    thing it represents.  Some common codes are:
   1006    INTEGER_TYPE -- represents a type of integers.
   1007    ARRAY_TYPE -- represents a type of pointer.
   1008    VAR_DECL -- represents a declared variable.
   1009    INTEGER_CST -- represents a constant integer value.
   1010    PLUS_EXPR -- represents a sum (an expression).
   1011 
   1012    As for the contents of a tree node: there are some fields
   1013    that all nodes share.  Each TREE_CODE has various special-purpose
   1014    fields as well.  The fields of a node are never accessed directly,
   1015    always through accessor macros.  */
   1016 
   1017 /* Every kind of tree node starts with this structure,
   1018    so all nodes have these fields.
   1019 
   1020    See the accessor macros, defined below, for documentation of the
   1021    fields, and the table below which connects the fields and the
   1022    accessor macros.  */
   1023 
   1024 struct GTY(()) tree_base {
   1025   ENUM_BITFIELD(tree_code) code : 16;
   1026 
   1027   unsigned side_effects_flag : 1;
   1028   unsigned constant_flag : 1;
   1029   unsigned addressable_flag : 1;
   1030   unsigned volatile_flag : 1;
   1031   unsigned readonly_flag : 1;
   1032   unsigned asm_written_flag: 1;
   1033   unsigned nowarning_flag : 1;
   1034   unsigned visited : 1;
   1035 
   1036   unsigned used_flag : 1;
   1037   unsigned nothrow_flag : 1;
   1038   unsigned static_flag : 1;
   1039   unsigned public_flag : 1;
   1040   unsigned private_flag : 1;
   1041   unsigned protected_flag : 1;
   1042   unsigned deprecated_flag : 1;
   1043   unsigned default_def_flag : 1;
   1044 
   1045   union {
   1046     /* The bits in the following structure should only be used with
   1047        accessor macros that constrain inputs with tree checking.  */
   1048     struct {
   1049       unsigned lang_flag_0 : 1;
   1050       unsigned lang_flag_1 : 1;
   1051       unsigned lang_flag_2 : 1;
   1052       unsigned lang_flag_3 : 1;
   1053       unsigned lang_flag_4 : 1;
   1054       unsigned lang_flag_5 : 1;
   1055       unsigned lang_flag_6 : 1;
   1056       unsigned saturating_flag : 1;
   1057 
   1058       unsigned unsigned_flag : 1;
   1059       unsigned packed_flag : 1;
   1060       unsigned user_align : 1;
   1061       unsigned nameless_flag : 1;
   1062       unsigned atomic_flag : 1;
   1063       unsigned unavailable_flag : 1;
   1064       unsigned spare0 : 2;
   1065 
   1066       unsigned spare1 : 8;
   1067 
   1068       /* This field is only used with TREE_TYPE nodes; the only reason it is
   1069 	 present in tree_base instead of tree_type is to save space.  The size
   1070 	 of the field must be large enough to hold addr_space_t values.
   1071 	 For CONSTRUCTOR nodes this holds the clobber_kind enum.  */
   1072       unsigned address_space : 8;
   1073     } bits;
   1074 
   1075     /* The following fields are present in tree_base to save space.  The
   1076        nodes using them do not require any of the flags above and so can
   1077        make better use of the 4-byte sized word.  */
   1078 
   1079     /* The number of HOST_WIDE_INTs in an INTEGER_CST.  */
   1080     struct {
   1081       /* The number of HOST_WIDE_INTs if the INTEGER_CST is accessed in
   1082 	 its native precision.  */
   1083       unsigned char unextended;
   1084 
   1085       /* The number of HOST_WIDE_INTs if the INTEGER_CST is extended to
   1086 	 wider precisions based on its TYPE_SIGN.  */
   1087       unsigned char extended;
   1088 
   1089       /* The number of HOST_WIDE_INTs if the INTEGER_CST is accessed in
   1090 	 offset_int precision, with smaller integers being extended
   1091 	 according to their TYPE_SIGN.  This is equal to one of the two
   1092 	 fields above but is cached for speed.  */
   1093       unsigned char offset;
   1094     } int_length;
   1095 
   1096     /* VEC length.  This field is only used with TREE_VEC.  */
   1097     int length;
   1098 
   1099     /* This field is only used with VECTOR_CST.  */
   1100     struct {
   1101       /* The value of VECTOR_CST_LOG2_NPATTERNS.  */
   1102       unsigned int log2_npatterns : 8;
   1103 
   1104       /* The value of VECTOR_CST_NELTS_PER_PATTERN.  */
   1105       unsigned int nelts_per_pattern : 8;
   1106 
   1107       /* For future expansion.  */
   1108       unsigned int unused : 16;
   1109     } vector_cst;
   1110 
   1111     /* SSA version number.  This field is only used with SSA_NAME.  */
   1112     unsigned int version;
   1113 
   1114     /* CHREC_VARIABLE.  This field is only used with POLYNOMIAL_CHREC.  */
   1115     unsigned int chrec_var;
   1116 
   1117     /* Internal function code.  */
   1118     enum internal_fn ifn;
   1119 
   1120     /* OMP_ATOMIC* memory order.  */
   1121     enum omp_memory_order omp_atomic_memory_order;
   1122 
   1123     /* The following two fields are used for MEM_REF and TARGET_MEM_REF
   1124        expression trees and specify known data non-dependences.  For
   1125        two memory references in a function they are known to not
   1126        alias if dependence_info.clique are equal and dependence_info.base
   1127        are distinct.  Clique number zero means there is no information,
   1128        clique number one is populated from function global information
   1129        and thus needs no remapping on transforms like loop unrolling.  */
   1130     struct {
   1131       unsigned short clique;
   1132       unsigned short base;
   1133     } dependence_info;
   1134   } GTY((skip(""))) u;
   1135 };
   1136 
   1137 /* The following table lists the uses of each of the above flags and
   1138    for which types of nodes they are defined.
   1139 
   1140    addressable_flag:
   1141 
   1142        TREE_ADDRESSABLE in
   1143            VAR_DECL, PARM_DECL, RESULT_DECL, FUNCTION_DECL, LABEL_DECL
   1144            SSA_NAME
   1145            all types
   1146            CONSTRUCTOR, IDENTIFIER_NODE
   1147            STMT_EXPR
   1148 
   1149        CALL_EXPR_TAILCALL in
   1150            CALL_EXPR
   1151 
   1152        CASE_LOW_SEEN in
   1153            CASE_LABEL_EXPR
   1154 
   1155        PREDICT_EXPR_OUTCOME in
   1156 	   PREDICT_EXPR
   1157 
   1158        OMP_CLAUSE_MAP_DECL_MAKE_ADDRESSABLE in
   1159 	   OMP_CLAUSE
   1160 
   1161    static_flag:
   1162 
   1163        TREE_STATIC in
   1164            VAR_DECL, FUNCTION_DECL
   1165            CONSTRUCTOR
   1166 
   1167        TREE_NO_TRAMPOLINE in
   1168            ADDR_EXPR
   1169 
   1170        BINFO_VIRTUAL_P in
   1171            TREE_BINFO
   1172 
   1173        TREE_SYMBOL_REFERENCED in
   1174            IDENTIFIER_NODE
   1175 
   1176        CLEANUP_EH_ONLY in
   1177            TARGET_EXPR, WITH_CLEANUP_EXPR
   1178 
   1179        TRY_CATCH_IS_CLEANUP in
   1180            TRY_CATCH_EXPR
   1181 
   1182        ASM_INPUT_P in
   1183            ASM_EXPR
   1184 
   1185        TYPE_REF_CAN_ALIAS_ALL in
   1186            POINTER_TYPE, REFERENCE_TYPE
   1187 
   1188        CASE_HIGH_SEEN in
   1189            CASE_LABEL_EXPR
   1190 
   1191        ENUM_IS_SCOPED in
   1192 	   ENUMERAL_TYPE
   1193 
   1194        TRANSACTION_EXPR_OUTER in
   1195 	   TRANSACTION_EXPR
   1196 
   1197        SSA_NAME_ANTI_RANGE_P in
   1198 	   SSA_NAME
   1199 
   1200        MUST_TAIL_CALL in
   1201 	   CALL_EXPR
   1202 
   1203    public_flag:
   1204 
   1205        TREE_OVERFLOW in
   1206            INTEGER_CST, REAL_CST, COMPLEX_CST, VECTOR_CST
   1207 
   1208        TREE_PUBLIC in
   1209            VAR_DECL, FUNCTION_DECL
   1210            IDENTIFIER_NODE
   1211 
   1212        CONSTRUCTOR_NO_CLEARING in
   1213            CONSTRUCTOR
   1214 
   1215        ASM_VOLATILE_P in
   1216            ASM_EXPR
   1217 
   1218        CALL_EXPR_VA_ARG_PACK in
   1219            CALL_EXPR
   1220 
   1221        TYPE_CACHED_VALUES_P in
   1222            all types
   1223 
   1224        SAVE_EXPR_RESOLVED_P in
   1225            SAVE_EXPR
   1226 
   1227        OMP_CLAUSE_LASTPRIVATE_FIRSTPRIVATE in
   1228            OMP_CLAUSE_LASTPRIVATE
   1229 
   1230        OMP_CLAUSE_PRIVATE_DEBUG in
   1231            OMP_CLAUSE_PRIVATE
   1232 
   1233        OMP_CLAUSE_LINEAR_NO_COPYIN in
   1234 	   OMP_CLAUSE_LINEAR
   1235 
   1236        OMP_CLAUSE_MAP_ZERO_BIAS_ARRAY_SECTION in
   1237 	   OMP_CLAUSE_MAP
   1238 
   1239        OMP_CLAUSE_REDUCTION_OMP_ORIG_REF in
   1240 	   OMP_CLAUSE_{,TASK_,IN_}REDUCTION
   1241 
   1242        OMP_CLAUSE_USE_DEVICE_PTR_IF_PRESENT in
   1243 	   OMP_CLAUSE_USE_DEVICE_PTR
   1244 
   1245        TRANSACTION_EXPR_RELAXED in
   1246 	   TRANSACTION_EXPR
   1247 
   1248        FALLTHROUGH_LABEL_P in
   1249 	   LABEL_DECL
   1250 
   1251        SSA_NAME_IS_VIRTUAL_OPERAND in
   1252 	   SSA_NAME
   1253 
   1254        EXPR_LOCATION_WRAPPER_P in
   1255 	   NON_LVALUE_EXPR, VIEW_CONVERT_EXPR
   1256 
   1257    private_flag:
   1258 
   1259        TREE_PRIVATE in
   1260            all decls
   1261 
   1262        CALL_EXPR_RETURN_SLOT_OPT in
   1263            CALL_EXPR
   1264 
   1265        OMP_SECTION_LAST in
   1266            OMP_SECTION
   1267 
   1268        OMP_PARALLEL_COMBINED in
   1269            OMP_PARALLEL
   1270 
   1271        OMP_CLAUSE_PRIVATE_OUTER_REF in
   1272 	   OMP_CLAUSE_PRIVATE
   1273 
   1274        OMP_CLAUSE_LINEAR_NO_COPYOUT in
   1275 	   OMP_CLAUSE_LINEAR
   1276 
   1277        TYPE_REF_IS_RVALUE in
   1278 	   REFERENCE_TYPE
   1279 
   1280        ENUM_IS_OPAQUE in
   1281 	   ENUMERAL_TYPE
   1282 
   1283    protected_flag:
   1284 
   1285        TREE_PROTECTED in
   1286            BLOCK
   1287            all decls
   1288 
   1289        CALL_FROM_THUNK_P and
   1290        CALL_ALLOCA_FOR_VAR_P and
   1291        CALL_FROM_NEW_OR_DELETE_P in
   1292            CALL_EXPR
   1293 
   1294        OMP_CLAUSE_LINEAR_VARIABLE_STRIDE in
   1295 	   OMP_CLAUSE_LINEAR
   1296 
   1297        ASM_INLINE_P in
   1298 	   ASM_EXPR
   1299 
   1300    side_effects_flag:
   1301 
   1302        TREE_SIDE_EFFECTS in
   1303            all expressions
   1304            all decls
   1305            all constants
   1306 
   1307        FORCED_LABEL in
   1308            LABEL_DECL
   1309 
   1310    volatile_flag:
   1311 
   1312        TREE_THIS_VOLATILE in
   1313            all expressions
   1314            all decls
   1315 
   1316        TYPE_VOLATILE in
   1317            all types
   1318 
   1319    readonly_flag:
   1320 
   1321        TREE_READONLY in
   1322            all expressions
   1323            all decls
   1324 
   1325        TYPE_READONLY in
   1326            all types
   1327 
   1328    constant_flag:
   1329 
   1330        TREE_CONSTANT in
   1331            all expressions
   1332            all decls
   1333            all constants
   1334 
   1335        TYPE_SIZES_GIMPLIFIED in
   1336            all types
   1337 
   1338    unsigned_flag:
   1339 
   1340        TYPE_UNSIGNED in
   1341            all types
   1342 
   1343        DECL_UNSIGNED in
   1344            all decls
   1345 
   1346    asm_written_flag:
   1347 
   1348        TREE_ASM_WRITTEN in
   1349            VAR_DECL, FUNCTION_DECL, TYPE_DECL
   1350            RECORD_TYPE, UNION_TYPE, QUAL_UNION_TYPE
   1351            BLOCK, STRING_CST
   1352 
   1353        SSA_NAME_OCCURS_IN_ABNORMAL_PHI in
   1354            SSA_NAME
   1355 
   1356    used_flag:
   1357 
   1358        TREE_USED in
   1359            all expressions
   1360            all decls
   1361            IDENTIFIER_NODE
   1362 
   1363    nothrow_flag:
   1364 
   1365        TREE_NOTHROW in
   1366            CALL_EXPR
   1367            FUNCTION_DECL
   1368 
   1369        TREE_THIS_NOTRAP in
   1370           INDIRECT_REF, MEM_REF, TARGET_MEM_REF, ARRAY_REF, ARRAY_RANGE_REF
   1371 
   1372        SSA_NAME_IN_FREE_LIST in
   1373           SSA_NAME
   1374 
   1375        DECL_NONALIASED in
   1376 	  VAR_DECL
   1377 
   1378    deprecated_flag:
   1379 
   1380        TREE_DEPRECATED in
   1381            all decls
   1382 	   all types
   1383 
   1384        IDENTIFIER_TRANSPARENT_ALIAS in
   1385            IDENTIFIER_NODE
   1386 
   1387        SSA_NAME_POINTS_TO_READONLY_MEMORY in
   1388 	   SSA_NAME
   1389 
   1390    unavailable_flag:
   1391 
   1392        TREE_UNAVAILABLE in
   1393 	   all decls
   1394 	   all types
   1395 
   1396    visited:
   1397 
   1398        TREE_VISITED in
   1399            all trees (used liberally by many passes)
   1400 
   1401    saturating_flag:
   1402 
   1403        TYPE_REVERSE_STORAGE_ORDER in
   1404            RECORD_TYPE, UNION_TYPE, QUAL_UNION_TYPE, ARRAY_TYPE
   1405 
   1406        TYPE_SATURATING in
   1407            other types
   1408 
   1409        VAR_DECL_IS_VIRTUAL_OPERAND in
   1410 	   VAR_DECL
   1411 
   1412    nowarning_flag:
   1413 
   1414        TREE_NO_WARNING in
   1415            all expressions
   1416            all decls
   1417 
   1418        TYPE_ARTIFICIAL in
   1419            all types
   1420 
   1421    default_def_flag:
   1422 
   1423        TYPE_FINAL_P in
   1424 	   RECORD_TYPE, UNION_TYPE and QUAL_UNION_TYPE
   1425 
   1426        TYPE_VECTOR_OPAQUE in
   1427 	   VECTOR_TYPE
   1428 
   1429        SSA_NAME_IS_DEFAULT_DEF in
   1430            SSA_NAME
   1431 
   1432        DECL_NONLOCAL_FRAME in
   1433 	   VAR_DECL
   1434 
   1435        REF_REVERSE_STORAGE_ORDER in
   1436            BIT_FIELD_REF, MEM_REF
   1437 
   1438        FUNC_ADDR_BY_DESCRIPTOR in
   1439            ADDR_EXPR
   1440 
   1441        CALL_EXPR_BY_DESCRIPTOR in
   1442            CALL_EXPR
   1443 
   1444 */
   1445 
   1446 struct GTY(()) tree_typed {
   1447   struct tree_base base;
   1448   tree type;
   1449 };
   1450 
   1451 struct GTY(()) tree_common {
   1452   struct tree_typed typed;
   1453   tree chain;
   1454 };
   1455 
   1456 struct GTY(()) tree_int_cst {
   1457   struct tree_typed typed;
   1458   HOST_WIDE_INT val[1];
   1459 };
   1460 
   1461 
   1462 struct GTY(()) tree_real_cst {
   1463   struct tree_typed typed;
   1464   struct real_value * real_cst_ptr;
   1465 };
   1466 
   1467 struct GTY(()) tree_fixed_cst {
   1468   struct tree_typed typed;
   1469   struct fixed_value * fixed_cst_ptr;
   1470 };
   1471 
   1472 struct GTY(()) tree_string {
   1473   struct tree_typed typed;
   1474   int length;
   1475   char str[1];
   1476 };
   1477 
   1478 struct GTY(()) tree_complex {
   1479   struct tree_typed typed;
   1480   tree real;
   1481   tree imag;
   1482 };
   1483 
   1484 struct GTY(()) tree_vector {
   1485   struct tree_typed typed;
   1486   tree GTY ((length ("vector_cst_encoded_nelts ((tree) &%h)"))) elts[1];
   1487 };
   1488 
   1489 struct GTY(()) tree_poly_int_cst {
   1490   struct tree_typed typed;
   1491   tree coeffs[NUM_POLY_INT_COEFFS];
   1492 };
   1493 
   1494 struct GTY(()) tree_identifier {
   1495   struct tree_common common;
   1496   struct ht_identifier id;
   1497 };
   1498 
   1499 struct GTY(()) tree_list {
   1500   struct tree_common common;
   1501   tree purpose;
   1502   tree value;
   1503 };
   1504 
   1505 struct GTY(()) tree_vec {
   1506   struct tree_common common;
   1507   tree GTY ((length ("TREE_VEC_LENGTH ((tree)&%h)"))) a[1];
   1508 };
   1509 
   1510 /* A single element of a CONSTRUCTOR. VALUE holds the actual value of the
   1511    element. INDEX can optionally design the position of VALUE: in arrays,
   1512    it is the index where VALUE has to be placed; in structures, it is the
   1513    FIELD_DECL of the member.  */
   1514 struct GTY(()) constructor_elt {
   1515   tree index;
   1516   tree value;
   1517 };
   1518 
   1519 struct GTY(()) tree_constructor {
   1520   struct tree_typed typed;
   1521   vec<constructor_elt, va_gc> *elts;
   1522 };
   1523 
   1524 enum omp_clause_depend_kind
   1525 {
   1526   OMP_CLAUSE_DEPEND_IN,
   1527   OMP_CLAUSE_DEPEND_OUT,
   1528   OMP_CLAUSE_DEPEND_INOUT,
   1529   OMP_CLAUSE_DEPEND_MUTEXINOUTSET,
   1530   OMP_CLAUSE_DEPEND_SOURCE,
   1531   OMP_CLAUSE_DEPEND_SINK,
   1532   OMP_CLAUSE_DEPEND_DEPOBJ,
   1533   OMP_CLAUSE_DEPEND_LAST
   1534 };
   1535 
   1536 enum omp_clause_proc_bind_kind
   1537 {
   1538   /* Numbers should match omp_proc_bind_t enum in omp.h.  */
   1539   OMP_CLAUSE_PROC_BIND_FALSE = 0,
   1540   OMP_CLAUSE_PROC_BIND_TRUE = 1,
   1541   OMP_CLAUSE_PROC_BIND_PRIMARY = 2,
   1542   OMP_CLAUSE_PROC_BIND_MASTER = 2,
   1543   OMP_CLAUSE_PROC_BIND_CLOSE = 3,
   1544   OMP_CLAUSE_PROC_BIND_SPREAD = 4,
   1545   OMP_CLAUSE_PROC_BIND_LAST
   1546 };
   1547 
   1548 enum omp_clause_device_type_kind
   1549 {
   1550   OMP_CLAUSE_DEVICE_TYPE_HOST = 1,
   1551   OMP_CLAUSE_DEVICE_TYPE_NOHOST = 2,
   1552   OMP_CLAUSE_DEVICE_TYPE_ANY = 3
   1553 };
   1554 
   1555 enum omp_clause_linear_kind
   1556 {
   1557   OMP_CLAUSE_LINEAR_DEFAULT,
   1558   OMP_CLAUSE_LINEAR_REF,
   1559   OMP_CLAUSE_LINEAR_VAL,
   1560   OMP_CLAUSE_LINEAR_UVAL
   1561 };
   1562 
   1563 struct GTY(()) tree_exp {
   1564   struct tree_typed typed;
   1565   location_t locus;
   1566   tree GTY ((special ("tree_exp"),
   1567 	     desc ("TREE_CODE ((tree) &%0)")))
   1568     operands[1];
   1569 };
   1570 
   1571 /* Immediate use linking structure.  This structure is used for maintaining
   1572    a doubly linked list of uses of an SSA_NAME.  */
   1573 struct GTY(()) ssa_use_operand_t {
   1574   struct ssa_use_operand_t* GTY((skip(""))) prev;
   1575   struct ssa_use_operand_t* GTY((skip(""))) next;
   1576   /* Immediate uses for a given SSA name are maintained as a cyclic
   1577      list.  To recognize the root of this list, the location field
   1578      needs to point to the original SSA name.  Since statements and
   1579      SSA names are of different data types, we need this union.  See
   1580      the explanation in struct imm_use_iterator.  */
   1581   union { gimple *stmt; tree ssa_name; } GTY((skip(""))) loc;
   1582   tree *GTY((skip(""))) use;
   1583 };
   1584 
   1585 struct GTY(()) tree_ssa_name {
   1586   struct tree_typed typed;
   1587 
   1588   /* _DECL wrapped by this SSA name.  */
   1589   tree var;
   1590 
   1591   /* Statement that defines this SSA name.  */
   1592   gimple *def_stmt;
   1593 
   1594   /* Value range information.  */
   1595   union ssa_name_info_type {
   1596     /* Pointer attributes used for alias analysis.  */
   1597     struct GTY ((tag ("0"))) ptr_info_def *ptr_info;
   1598     /* Value range attributes used for zero/sign extension elimination.  */
   1599     struct GTY ((tag ("1"))) range_info_def *range_info;
   1600   } GTY ((desc ("%1.typed.type ?" \
   1601 		"!POINTER_TYPE_P (TREE_TYPE ((tree)&%1)) : 2"))) info;
   1602 
   1603   /* Immediate uses list for this SSA_NAME.  */
   1604   struct ssa_use_operand_t imm_uses;
   1605 };
   1606 
   1607 struct GTY(()) phi_arg_d {
   1608   /* imm_use MUST be the first element in struct because we do some
   1609      pointer arithmetic with it.  See phi_arg_index_from_use.  */
   1610   struct ssa_use_operand_t imm_use;
   1611   tree def;
   1612   location_t locus;
   1613 };
   1614 
   1615 struct GTY(()) tree_omp_clause {
   1616   struct tree_common common;
   1617   location_t locus;
   1618   enum omp_clause_code code;
   1619   union omp_clause_subcode {
   1620     enum omp_clause_default_kind   default_kind;
   1621     enum omp_clause_schedule_kind  schedule_kind;
   1622     enum omp_clause_depend_kind    depend_kind;
   1623     /* See include/gomp-constants.h for enum gomp_map_kind's values.  */
   1624     unsigned int		   map_kind;
   1625     enum omp_clause_proc_bind_kind proc_bind_kind;
   1626     enum tree_code                 reduction_code;
   1627     enum omp_clause_linear_kind    linear_kind;
   1628     enum tree_code                 if_modifier;
   1629     enum omp_clause_defaultmap_kind defaultmap_kind;
   1630     enum omp_clause_bind_kind      bind_kind;
   1631     enum omp_clause_device_type_kind device_type_kind;
   1632   } GTY ((skip)) subcode;
   1633 
   1634   /* The gimplification of OMP_CLAUSE_REDUCTION_{INIT,MERGE} for omp-low's
   1635      usage.  */
   1636   gimple_seq gimple_reduction_init;
   1637   gimple_seq gimple_reduction_merge;
   1638 
   1639   tree GTY ((length ("omp_clause_num_ops[OMP_CLAUSE_CODE ((tree)&%h)]")))
   1640     ops[1];
   1641 };
   1642 
   1643 struct GTY(()) tree_block {
   1644   struct tree_base base;
   1645   tree chain;
   1646 
   1647   unsigned block_num;
   1648 
   1649   location_t locus;
   1650   location_t end_locus;
   1651 
   1652   tree vars;
   1653   vec<tree, va_gc> *nonlocalized_vars;
   1654 
   1655   tree subblocks;
   1656   tree supercontext;
   1657   tree abstract_origin;
   1658   tree fragment_origin;
   1659   tree fragment_chain;
   1660 
   1661   /* Pointer to the DWARF lexical block.  */
   1662   struct die_struct *die;
   1663 };
   1664 
   1665 struct GTY(()) tree_type_common {
   1666   struct tree_common common;
   1667   tree size;
   1668   tree size_unit;
   1669   tree attributes;
   1670   unsigned int uid;
   1671 
   1672   unsigned int precision : 10;
   1673   unsigned no_force_blk_flag : 1;
   1674   unsigned needs_constructing_flag : 1;
   1675   unsigned transparent_aggr_flag : 1;
   1676   unsigned restrict_flag : 1;
   1677   unsigned contains_placeholder_bits : 2;
   1678 
   1679   ENUM_BITFIELD(machine_mode) mode : 8;
   1680 
   1681   /* TYPE_STRING_FLAG for INTEGER_TYPE and ARRAY_TYPE.
   1682      TYPE_CXX_ODR_P for RECORD_TYPE and UNION_TYPE.  */
   1683   unsigned string_flag : 1;
   1684   unsigned lang_flag_0 : 1;
   1685   unsigned lang_flag_1 : 1;
   1686   unsigned lang_flag_2 : 1;
   1687   unsigned lang_flag_3 : 1;
   1688   unsigned lang_flag_4 : 1;
   1689   unsigned lang_flag_5 : 1;
   1690   unsigned lang_flag_6 : 1;
   1691   unsigned lang_flag_7 : 1;
   1692 
   1693   /* TYPE_ALIGN in log2; this has to be large enough to hold values
   1694      of the maximum of BIGGEST_ALIGNMENT and MAX_OFILE_ALIGNMENT,
   1695      the latter being usually the larger.  For ELF it is 8<<28,
   1696      so we need to store the value 32 (not 31, as we need the zero
   1697      as well), hence six bits.  */
   1698   unsigned align : 6;
   1699   unsigned warn_if_not_align : 6;
   1700   unsigned typeless_storage : 1;
   1701   unsigned empty_flag : 1;
   1702   unsigned indivisible_p : 1;
   1703   unsigned spare : 16;
   1704 
   1705   alias_set_type alias_set;
   1706   tree pointer_to;
   1707   tree reference_to;
   1708   union tree_type_symtab {
   1709     int GTY ((tag ("TYPE_SYMTAB_IS_ADDRESS"))) address;
   1710     struct die_struct * GTY ((tag ("TYPE_SYMTAB_IS_DIE"))) die;
   1711   } GTY ((desc ("debug_hooks->tree_type_symtab_field"))) symtab;
   1712   tree canonical;
   1713   tree next_variant;
   1714   tree main_variant;
   1715   tree context;
   1716   tree name;
   1717 };
   1718 
   1719 struct GTY(()) tree_type_with_lang_specific {
   1720   struct tree_type_common common;
   1721   /* Points to a structure whose details depend on the language in use.  */
   1722   struct lang_type *lang_specific;
   1723 };
   1724 
   1725 struct GTY(()) tree_type_non_common {
   1726   struct tree_type_with_lang_specific with_lang_specific;
   1727   tree values;
   1728   tree minval;
   1729   tree maxval;
   1730   tree lang_1;
   1731 };
   1732 
   1733 struct GTY (()) tree_binfo {
   1734   struct tree_common common;
   1735 
   1736   tree offset;
   1737   tree vtable;
   1738   tree virtuals;
   1739   tree vptr_field;
   1740   vec<tree, va_gc> *base_accesses;
   1741   tree inheritance;
   1742 
   1743   tree vtt_subvtt;
   1744   tree vtt_vptr;
   1745 
   1746   vec<tree, va_gc> base_binfos;
   1747 };
   1748 
   1749 struct GTY(()) tree_decl_minimal {
   1750   struct tree_common common;
   1751   location_t locus;
   1752   unsigned int uid;
   1753   tree name;
   1754   tree context;
   1755 };
   1756 
   1757 struct GTY(()) tree_decl_common {
   1758   struct tree_decl_minimal common;
   1759   tree size;
   1760 
   1761   ENUM_BITFIELD(machine_mode) mode : 8;
   1762 
   1763   unsigned nonlocal_flag : 1;
   1764   unsigned virtual_flag : 1;
   1765   unsigned ignored_flag : 1;
   1766   unsigned abstract_flag : 1;
   1767   unsigned artificial_flag : 1;
   1768   unsigned preserve_flag: 1;
   1769   unsigned debug_expr_is_from : 1;
   1770 
   1771   unsigned lang_flag_0 : 1;
   1772   unsigned lang_flag_1 : 1;
   1773   unsigned lang_flag_2 : 1;
   1774   unsigned lang_flag_3 : 1;
   1775   unsigned lang_flag_4 : 1;
   1776   unsigned lang_flag_5 : 1;
   1777   unsigned lang_flag_6 : 1;
   1778   unsigned lang_flag_7 : 1;
   1779   unsigned lang_flag_8 : 1;
   1780 
   1781   /* In VAR_DECL and PARM_DECL, this is DECL_REGISTER
   1782      In TRANSLATION_UNIT_DECL, this is TRANSLATION_UNIT_WARN_EMPTY_P.
   1783      In FIELD_DECL, this is DECL_FIELD_ABI_IGNORED.  */
   1784   unsigned decl_flag_0 : 1;
   1785   /* In FIELD_DECL, this is DECL_BIT_FIELD
   1786      In VAR_DECL and FUNCTION_DECL, this is DECL_EXTERNAL.
   1787      In TYPE_DECL, this is TYPE_DECL_SUPPRESS_DEBUG.  */
   1788   unsigned decl_flag_1 : 1;
   1789   /* In FIELD_DECL, this is DECL_NONADDRESSABLE_P
   1790      In VAR_DECL, PARM_DECL and RESULT_DECL, this is
   1791      DECL_HAS_VALUE_EXPR_P.  */
   1792   unsigned decl_flag_2 : 1;
   1793   /* In FIELD_DECL, this is DECL_PADDING_P.  */
   1794   unsigned decl_flag_3 : 1;
   1795   /* Logically, these two would go in a theoretical base shared by var and
   1796      parm decl. */
   1797   unsigned not_gimple_reg_flag : 1;
   1798   /* In VAR_DECL, PARM_DECL and RESULT_DECL, this is DECL_BY_REFERENCE.  */
   1799   unsigned decl_by_reference_flag : 1;
   1800   /* In a VAR_DECL and PARM_DECL, this is DECL_READ_P.  */
   1801   unsigned decl_read_flag : 1;
   1802   /* In a VAR_DECL or RESULT_DECL, this is DECL_NONSHAREABLE.  */
   1803   /* In a PARM_DECL, this is DECL_HIDDEN_STRING_LENGTH.  */
   1804   unsigned decl_nonshareable_flag : 1;
   1805 
   1806   /* DECL_OFFSET_ALIGN, used only for FIELD_DECLs.  */
   1807   unsigned int off_align : 6;
   1808 
   1809   /* DECL_ALIGN.  It should have the same size as TYPE_ALIGN.  */
   1810   unsigned int align : 6;
   1811 
   1812   /* DECL_WARN_IF_NOT_ALIGN.  It should have the same size as
   1813      TYPE_WARN_IF_NOT_ALIGN.  */
   1814   unsigned int warn_if_not_align : 6;
   1815 
   1816   /* 14 bits unused.  */
   1817 
   1818   /* UID for points-to sets, stable over copying from inlining.  */
   1819   unsigned int pt_uid;
   1820 
   1821   tree size_unit;
   1822   tree initial;
   1823   tree attributes;
   1824   tree abstract_origin;
   1825 
   1826   /* Points to a structure whose details depend on the language in use.  */
   1827   struct lang_decl *lang_specific;
   1828 };
   1829 
   1830 struct GTY(()) tree_decl_with_rtl {
   1831   struct tree_decl_common common;
   1832   rtx rtl;
   1833 };
   1834 
   1835 struct GTY(()) tree_field_decl {
   1836   struct tree_decl_common common;
   1837 
   1838   tree offset;
   1839   tree bit_field_type;
   1840   tree qualifier;
   1841   tree bit_offset;
   1842   tree fcontext;
   1843 };
   1844 
   1845 struct GTY(()) tree_label_decl {
   1846   struct tree_decl_with_rtl common;
   1847   int label_decl_uid;
   1848   int eh_landing_pad_nr;
   1849 };
   1850 
   1851 struct GTY(()) tree_result_decl {
   1852   struct tree_decl_with_rtl common;
   1853 };
   1854 
   1855 struct GTY(()) tree_const_decl {
   1856   struct tree_decl_common common;
   1857 };
   1858 
   1859 struct GTY(()) tree_parm_decl {
   1860   struct tree_decl_with_rtl common;
   1861   rtx incoming_rtl;
   1862 };
   1863 
   1864 struct GTY(()) tree_decl_with_vis {
   1865  struct tree_decl_with_rtl common;
   1866  tree assembler_name;
   1867  struct symtab_node *symtab_node;
   1868 
   1869  /* Belong to VAR_DECL exclusively.  */
   1870  unsigned defer_output : 1;
   1871  unsigned hard_register : 1;
   1872  unsigned common_flag : 1;
   1873  unsigned in_text_section : 1;
   1874  unsigned in_constant_pool : 1;
   1875  unsigned dllimport_flag : 1;
   1876  /* Don't belong to VAR_DECL exclusively.  */
   1877  unsigned weak_flag : 1;
   1878 
   1879  unsigned seen_in_bind_expr : 1;
   1880  unsigned comdat_flag : 1;
   1881  /* Used for FUNCTION_DECL, VAR_DECL and in C++ for TYPE_DECL.  */
   1882  ENUM_BITFIELD(symbol_visibility) visibility : 2;
   1883  unsigned visibility_specified : 1;
   1884 
   1885  /* Belong to FUNCTION_DECL exclusively.  */
   1886  unsigned init_priority_p : 1;
   1887  /* Used by C++ only.  Might become a generic decl flag.  */
   1888  unsigned shadowed_for_var_p : 1;
   1889  /* Belong to FUNCTION_DECL exclusively.  */
   1890  unsigned cxx_constructor : 1;
   1891  /* Belong to FUNCTION_DECL exclusively.  */
   1892  unsigned cxx_destructor : 1;
   1893  /* Belong to FUNCTION_DECL exclusively.  */
   1894  unsigned final : 1;
   1895  /* Belong to FUNCTION_DECL exclusively.  */
   1896  unsigned regdecl_flag : 1;
   1897  /* 14 unused bits. */
   1898  /* 32 more unused on 64 bit HW. */
   1899 };
   1900 
   1901 struct GTY(()) tree_var_decl {
   1902   struct tree_decl_with_vis common;
   1903 };
   1904 
   1905 struct GTY(()) tree_decl_non_common {
   1906   struct tree_decl_with_vis common;
   1907   /* Almost all FE's use this.  */
   1908   tree result;
   1909 };
   1910 
   1911 /* Classify a special function declaration type.  */
   1912 
   1913 enum function_decl_type
   1914 {
   1915   NONE,
   1916   OPERATOR_NEW,
   1917   OPERATOR_DELETE,
   1918   LAMBDA_FUNCTION
   1919 
   1920   /* 0 values left */
   1921 };
   1922 
   1923 /* FUNCTION_DECL inherits from DECL_NON_COMMON because of the use of the
   1924    arguments/result/saved_tree fields by front ends.   It was either inherit
   1925    FUNCTION_DECL from non_common, or inherit non_common from FUNCTION_DECL,
   1926    which seemed a bit strange.  */
   1927 
   1928 struct GTY(()) tree_function_decl {
   1929   struct tree_decl_non_common common;
   1930 
   1931   struct function *f;
   1932 
   1933   /* Arguments of the function.  */
   1934   tree arguments;
   1935   /* The personality function. Used for stack unwinding. */
   1936   tree personality;
   1937 
   1938   /* Function specific options that are used by this function.  */
   1939   tree function_specific_target;	/* target options */
   1940   tree function_specific_optimization;	/* optimization options */
   1941 
   1942   /* Generic function body.  */
   1943   tree saved_tree;
   1944   /* Index within a virtual table.  */
   1945   tree vindex;
   1946 
   1947   /* In a FUNCTION_DECL this is DECL_UNCHECKED_FUNCTION_CODE.  */
   1948   unsigned int function_code;
   1949 
   1950   ENUM_BITFIELD(built_in_class) built_in_class : 2;
   1951   unsigned static_ctor_flag : 1;
   1952   unsigned static_dtor_flag : 1;
   1953   unsigned uninlinable : 1;
   1954   unsigned possibly_inlined : 1;
   1955   unsigned novops_flag : 1;
   1956   unsigned returns_twice_flag : 1;
   1957 
   1958   unsigned malloc_flag : 1;
   1959   unsigned declared_inline_flag : 1;
   1960   unsigned no_inline_warning_flag : 1;
   1961   unsigned no_instrument_function_entry_exit : 1;
   1962   unsigned no_limit_stack : 1;
   1963   unsigned disregard_inline_limits : 1;
   1964   unsigned pure_flag : 1;
   1965   unsigned looping_const_or_pure_flag : 1;
   1966 
   1967   /* Align the bitfield to boundary of a byte.  */
   1968   ENUM_BITFIELD(function_decl_type) decl_type: 2;
   1969   unsigned has_debug_args_flag : 1;
   1970   unsigned versioned_function : 1;
   1971   unsigned replaceable_operator : 1;
   1972 
   1973   /* 11 bits left for future expansion.  */
   1974   /* 32 bits on 64-bit HW.  */
   1975 };
   1976 
   1977 struct GTY(()) tree_translation_unit_decl {
   1978   struct tree_decl_common common;
   1979   /* Source language of this translation unit.  Used for DWARF output.  */
   1980   const char *language;
   1981   /* TODO: Non-optimization used to build this translation unit.  */
   1982   /* TODO: Root of a partial DWARF tree for global types and decls.  */
   1983 };
   1984 
   1985 struct GTY(()) tree_type_decl {
   1986   struct tree_decl_non_common common;
   1987 
   1988 };
   1989 
   1990 struct GTY ((chain_next ("%h.next"), chain_prev ("%h.prev"))) tree_statement_list_node
   1991  {
   1992   struct tree_statement_list_node *prev;
   1993   struct tree_statement_list_node *next;
   1994   tree stmt;
   1995 };
   1996 
   1997 struct GTY(()) tree_statement_list
   1998  {
   1999   struct tree_typed typed;
   2000   struct tree_statement_list_node *head;
   2001   struct tree_statement_list_node *tail;
   2002 };
   2003 
   2004 
   2005 /* Optimization options used by a function.  */
   2006 
   2007 struct GTY(()) tree_optimization_option {
   2008   struct tree_base base;
   2009 
   2010   /* The optimization options used by the user.  */
   2011   struct cl_optimization *opts;
   2012 
   2013   /* Target optabs for this set of optimization options.  This is of
   2014      type `struct target_optabs *'.  */
   2015   void *GTY ((atomic)) optabs;
   2016 
   2017   /* The value of this_target_optabs against which the optabs above were
   2018      generated.  */
   2019   struct target_optabs *GTY ((skip)) base_optabs;
   2020 };
   2021 
   2022 /* Forward declaration, defined in target-globals.h.  */
   2023 
   2024 class GTY(()) target_globals;
   2025 
   2026 /* Target options used by a function.  */
   2027 
   2028 struct GTY(()) tree_target_option {
   2029   struct tree_base base;
   2030 
   2031   /* Target globals for the corresponding target option.  */
   2032   class target_globals *globals;
   2033 
   2034   /* The optimization options used by the user.  */
   2035   struct cl_target_option *opts;
   2036 };
   2037 
   2038 /* Define the overall contents of a tree node.
   2039    It may be any of the structures declared above
   2040    for various types of node.  */
   2041 union GTY ((ptr_alias (union lang_tree_node),
   2042 	    desc ("tree_node_structure (&%h)"), variable_size)) tree_node {
   2043   struct tree_base GTY ((tag ("TS_BASE"))) base;
   2044   struct tree_typed GTY ((tag ("TS_TYPED"))) typed;
   2045   struct tree_common GTY ((tag ("TS_COMMON"))) common;
   2046   struct tree_int_cst GTY ((tag ("TS_INT_CST"))) int_cst;
   2047   struct tree_poly_int_cst GTY ((tag ("TS_POLY_INT_CST"))) poly_int_cst;
   2048   struct tree_real_cst GTY ((tag ("TS_REAL_CST"))) real_cst;
   2049   struct tree_fixed_cst GTY ((tag ("TS_FIXED_CST"))) fixed_cst;
   2050   struct tree_vector GTY ((tag ("TS_VECTOR"))) vector;
   2051   struct tree_string GTY ((tag ("TS_STRING"))) string;
   2052   struct tree_complex GTY ((tag ("TS_COMPLEX"))) complex;
   2053   struct tree_identifier GTY ((tag ("TS_IDENTIFIER"))) identifier;
   2054   struct tree_decl_minimal GTY((tag ("TS_DECL_MINIMAL"))) decl_minimal;
   2055   struct tree_decl_common GTY ((tag ("TS_DECL_COMMON"))) decl_common;
   2056   struct tree_decl_with_rtl GTY ((tag ("TS_DECL_WRTL"))) decl_with_rtl;
   2057   struct tree_decl_non_common  GTY ((tag ("TS_DECL_NON_COMMON")))
   2058     decl_non_common;
   2059   struct tree_parm_decl  GTY  ((tag ("TS_PARM_DECL"))) parm_decl;
   2060   struct tree_decl_with_vis GTY ((tag ("TS_DECL_WITH_VIS"))) decl_with_vis;
   2061   struct tree_var_decl GTY ((tag ("TS_VAR_DECL"))) var_decl;
   2062   struct tree_field_decl GTY ((tag ("TS_FIELD_DECL"))) field_decl;
   2063   struct tree_label_decl GTY ((tag ("TS_LABEL_DECL"))) label_decl;
   2064   struct tree_result_decl GTY ((tag ("TS_RESULT_DECL"))) result_decl;
   2065   struct tree_const_decl GTY ((tag ("TS_CONST_DECL"))) const_decl;
   2066   struct tree_type_decl GTY ((tag ("TS_TYPE_DECL"))) type_decl;
   2067   struct tree_function_decl GTY ((tag ("TS_FUNCTION_DECL"))) function_decl;
   2068   struct tree_translation_unit_decl GTY ((tag ("TS_TRANSLATION_UNIT_DECL")))
   2069     translation_unit_decl;
   2070   struct tree_type_common GTY ((tag ("TS_TYPE_COMMON"))) type_common;
   2071   struct tree_type_with_lang_specific GTY ((tag ("TS_TYPE_WITH_LANG_SPECIFIC")))
   2072     type_with_lang_specific;
   2073   struct tree_type_non_common GTY ((tag ("TS_TYPE_NON_COMMON")))
   2074     type_non_common;
   2075   struct tree_list GTY ((tag ("TS_LIST"))) list;
   2076   struct tree_vec GTY ((tag ("TS_VEC"))) vec;
   2077   struct tree_exp GTY ((tag ("TS_EXP"))) exp;
   2078   struct tree_ssa_name GTY ((tag ("TS_SSA_NAME"))) ssa_name;
   2079   struct tree_block GTY ((tag ("TS_BLOCK"))) block;
   2080   struct tree_binfo GTY ((tag ("TS_BINFO"))) binfo;
   2081   struct tree_statement_list GTY ((tag ("TS_STATEMENT_LIST"))) stmt_list;
   2082   struct tree_constructor GTY ((tag ("TS_CONSTRUCTOR"))) constructor;
   2083   struct tree_omp_clause GTY ((tag ("TS_OMP_CLAUSE"))) omp_clause;
   2084   struct tree_optimization_option GTY ((tag ("TS_OPTIMIZATION"))) optimization;
   2085   struct tree_target_option GTY ((tag ("TS_TARGET_OPTION"))) target_option;
   2086 };
   2087 
   2088 /* Structure describing an attribute and a function to handle it.  */
   2089 struct attribute_spec {
   2090   /* The name of the attribute (without any leading or trailing __),
   2091      or NULL to mark the end of a table of attributes.  */
   2092   const char *name;
   2093   /* The minimum length of the list of arguments of the attribute.  */
   2094   int min_length;
   2095   /* The maximum length of the list of arguments of the attribute
   2096      (-1 for no maximum).  It can also be -2 for fake attributes
   2097      created for the sake of -Wno-attributes; in that case, we
   2098      should skip the balanced token sequence when parsing the attribute.  */
   2099   int max_length;
   2100   /* Whether this attribute requires a DECL.  If it does, it will be passed
   2101      from types of DECLs, function return types and array element types to
   2102      the DECLs, function types and array types respectively; but when
   2103      applied to a type in any other circumstances, it will be ignored with
   2104      a warning.  (If greater control is desired for a given attribute,
   2105      this should be false, and the flags argument to the handler may be
   2106      used to gain greater control in that case.)  */
   2107   bool decl_required;
   2108   /* Whether this attribute requires a type.  If it does, it will be passed
   2109      from a DECL to the type of that DECL.  */
   2110   bool type_required;
   2111   /* Whether this attribute requires a function (or method) type.  If it does,
   2112      it will be passed from a function pointer type to the target type,
   2113      and from a function return type (which is not itself a function
   2114      pointer type) to the function type.  */
   2115   bool function_type_required;
   2116   /* Specifies if attribute affects type's identity.  */
   2117   bool affects_type_identity;
   2118   /* Function to handle this attribute.  NODE points to the node to which
   2119      the attribute is to be applied.  If a DECL, it should be modified in
   2120      place; if a TYPE, a copy should be created.  NAME is the canonicalized
   2121      name of the attribute i.e. without any leading or trailing underscores.
   2122      ARGS is the TREE_LIST of the arguments (which may be NULL).  FLAGS gives
   2123      further information about the context of the attribute.  Afterwards, the
   2124      attributes will be added to the DECL_ATTRIBUTES or TYPE_ATTRIBUTES, as
   2125      appropriate, unless *NO_ADD_ATTRS is set to true (which should be done on
   2126      error, as well as in any other cases when the attributes should not be
   2127      added to the DECL or TYPE).  Depending on FLAGS, any attributes to be
   2128      applied to another type or DECL later may be returned;
   2129      otherwise the return value should be NULL_TREE.  This pointer may be
   2130      NULL if no special handling is required beyond the checks implied
   2131      by the rest of this structure.  */
   2132   tree (*handler) (tree *node, tree name, tree args,
   2133 		   int flags, bool *no_add_attrs);
   2134 
   2135   /* Specifies the name of an attribute that's mutually exclusive with
   2136      this one, and whether the relationship applies to the function,
   2137      variable, or type form of the attribute.  */
   2138   struct exclusions {
   2139     const char *name;
   2140     bool function;
   2141     bool variable;
   2142     bool type;
   2143   };
   2144 
   2145   /* An array of attribute exclusions describing names of other attributes
   2146      that this attribute is mutually exclusive with.  */
   2147   const exclusions *exclude;
   2148 };
   2149 
   2150 /* These functions allow a front-end to perform a manual layout of a
   2151    RECORD_TYPE.  (For instance, if the placement of subsequent fields
   2152    depends on the placement of fields so far.)  Begin by calling
   2153    start_record_layout.  Then, call place_field for each of the
   2154    fields.  Then, call finish_record_layout.  See layout_type for the
   2155    default way in which these functions are used.  */
   2156 typedef struct record_layout_info_s {
   2157   /* The RECORD_TYPE that we are laying out.  */
   2158   tree t;
   2159   /* The offset into the record so far, in bytes, not including bits in
   2160      BITPOS.  */
   2161   tree offset;
   2162   /* The last known alignment of SIZE.  */
   2163   unsigned int offset_align;
   2164   /* The bit position within the last OFFSET_ALIGN bits, in bits.  */
   2165   tree bitpos;
   2166   /* The alignment of the record so far, in bits.  */
   2167   unsigned int record_align;
   2168   /* The alignment of the record so far, ignoring #pragma pack and
   2169      __attribute__ ((packed)), in bits.  */
   2170   unsigned int unpacked_align;
   2171   /* The previous field laid out.  */
   2172   tree prev_field;
   2173   /* The static variables (i.e., class variables, as opposed to
   2174      instance variables) encountered in T.  */
   2175   vec<tree, va_gc> *pending_statics;
   2176   /* Bits remaining in the current alignment group */
   2177   int remaining_in_alignment;
   2178   /* True if we've seen a packed field that didn't have normal
   2179      alignment anyway.  */
   2180   int packed_maybe_necessary;
   2181 } *record_layout_info;
   2182 
   2183 /* Iterator for going through the function arguments.  */
   2184 struct function_args_iterator {
   2185   tree next;			/* TREE_LIST pointing to the next argument */
   2186 };
   2187 
   2188 /* Structures to map from a tree to another tree.  */
   2189 struct GTY(()) tree_map_base {
   2190   tree from;
   2191 };
   2192 
   2193 /* Map from a tree to another tree.  */
   2194 
   2195 struct GTY((for_user)) tree_map {
   2196   struct tree_map_base base;
   2197   unsigned int hash;
   2198   tree to;
   2199 };
   2200 
   2201 /* Map from a decl tree to another tree.  */
   2202 struct GTY((for_user)) tree_decl_map {
   2203   struct tree_map_base base;
   2204   tree to;
   2205 };
   2206 
   2207 /* Map from a tree to an int.  */
   2208 struct GTY((for_user)) tree_int_map {
   2209   struct tree_map_base base;
   2210   unsigned int to;
   2211 };
   2212 
   2213 /* Map from a decl tree to a tree vector.  */
   2214 struct GTY((for_user)) tree_vec_map {
   2215   struct tree_map_base base;
   2216   vec<tree, va_gc> *to;
   2217 };
   2218 
   2219 /* Abstract iterators for CALL_EXPRs.  These static inline definitions
   2220    have to go towards the end of tree.h so that union tree_node is fully
   2221    defined by this point.  */
   2222 
   2223 /* Structure containing iterator state.  */
   2224 struct call_expr_arg_iterator {
   2225   tree t;	/* the call_expr */
   2226   int n;	/* argument count */
   2227   int i;	/* next argument index */
   2228 };
   2229 
   2230 struct const_call_expr_arg_iterator {
   2231   const_tree t;	/* the call_expr */
   2232   int n;	/* argument count */
   2233   int i;	/* next argument index */
   2234 };
   2235 
   2236 /* The builtin_info structure holds the FUNCTION_DECL of the standard builtin
   2237    function, and flags.  */
   2238 struct GTY(()) builtin_info_type {
   2239   tree decl;
   2240   /* Whether the user can use <xxx> instead of explicitly using calls
   2241      to __builtin_<xxx>.  */
   2242   unsigned implicit_p : 1;
   2243   /* Whether the user has provided a declaration of <xxx>.  */
   2244   unsigned declared_p : 1;
   2245 };
   2246 
   2247 /* Information about a _FloatN or _FloatNx type that may be
   2248    supported.  */
   2249 struct floatn_type_info {
   2250   /* The number N in the type name.  */
   2251   int n;
   2252   /* Whether it is an extended type _FloatNx (true) or an interchange
   2253      type (false).  */
   2254   bool extended;
   2255 };
   2256 
   2257 
   2258 /*---------------------------------------------------------------------------
   2259                                 Global variables
   2260 ---------------------------------------------------------------------------*/
   2261 /* Matrix describing the structures contained in a given tree code.  */
   2262 extern bool tree_contains_struct[MAX_TREE_CODES][64];
   2263 
   2264 /* Class of tree given its code.  */
   2265 extern const enum tree_code_class tree_code_type[];
   2266 
   2267 /* Each tree code class has an associated string representation.
   2268    These must correspond to the tree_code_class entries.  */
   2269 extern const char *const tree_code_class_strings[];
   2270 
   2271 /* Number of argument-words in each kind of tree-node.  */
   2272 extern const unsigned char tree_code_length[];
   2273 
   2274 /* Vector of all alias pairs for global symbols.  */
   2275 extern GTY(()) vec<alias_pair, va_gc> *alias_pairs;
   2276 
   2277 /* Names of all the built_in classes.  */
   2278 extern const char *const built_in_class_names[BUILT_IN_LAST];
   2279 
   2280 /* Names of all the built_in functions.  */
   2281 extern const char * built_in_names[(int) END_BUILTINS];
   2282 
   2283 /* Number of operands and names for each OMP_CLAUSE node.  */
   2284 extern unsigned const char omp_clause_num_ops[];
   2285 extern const char * const omp_clause_code_name[];
   2286 extern const char *user_omp_clause_code_name (tree, bool);
   2287 
   2288 /* A vector of all translation-units.  */
   2289 extern GTY (()) vec<tree, va_gc> *all_translation_units;
   2290 
   2291 /* Vector of standard trees used by the C compiler.  */
   2292 extern GTY(()) tree global_trees[TI_MAX];
   2293 
   2294 /* The standard C integer types.  Use integer_type_kind to index into
   2295    this array.  */
   2296 extern GTY(()) tree integer_types[itk_none];
   2297 
   2298 /* Types used to represent sizes.  */
   2299 extern GTY(()) tree sizetype_tab[(int) stk_type_kind_last];
   2300 
   2301 /* Arrays for keeping track of tree node statistics.  */
   2302 extern uint64_t tree_node_counts[];
   2303 extern uint64_t tree_node_sizes[];
   2304 
   2305 /* True if we are in gimple form and the actions of the folders need to
   2306    be restricted.  False if we are not in gimple form and folding is not
   2307    restricted to creating gimple expressions.  */
   2308 extern bool in_gimple_form;
   2309 
   2310 /* Functional interface to the builtin functions.  */
   2311 extern GTY(()) builtin_info_type builtin_info[(int)END_BUILTINS];
   2312 
   2313 /* If nonzero, an upper limit on alignment of structure fields, in bits,  */
   2314 extern unsigned int maximum_field_alignment;
   2315 
   2316 /* Points to the FUNCTION_DECL of the function whose body we are reading.  */
   2317 extern GTY(()) tree current_function_decl;
   2318 
   2319 /* Nonzero means a FUNC_BEGIN label was emitted.  */
   2320 extern GTY(()) const char * current_function_func_begin_label;
   2321 
   2322 /* Information about the _FloatN and _FloatNx types.  */
   2323 extern const floatn_type_info floatn_nx_types[NUM_FLOATN_NX_TYPES];
   2324 
   2325 #endif  // GCC_TREE_CORE_H
   2326