xref: /dflybsd-src/contrib/gcc-8.0/gcc/tree-core.h (revision 95059079af47f9a66a175f374f2da1a5020e3255)
138fd1498Szrj /* Core data structures for the 'tree' type.
238fd1498Szrj    Copyright (C) 1989-2018 Free Software Foundation, Inc.
338fd1498Szrj 
438fd1498Szrj This file is part of GCC.
538fd1498Szrj 
638fd1498Szrj GCC is free software; you can redistribute it and/or modify it under
738fd1498Szrj the terms of the GNU General Public License as published by the Free
838fd1498Szrj Software Foundation; either version 3, or (at your option) any later
938fd1498Szrj version.
1038fd1498Szrj 
1138fd1498Szrj GCC is distributed in the hope that it will be useful, but WITHOUT ANY
1238fd1498Szrj WARRANTY; without even the implied warranty of MERCHANTABILITY or
1338fd1498Szrj FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
1438fd1498Szrj for more details.
1538fd1498Szrj 
1638fd1498Szrj You should have received a copy of the GNU General Public License
1738fd1498Szrj along with GCC; see the file COPYING3.  If not see
1838fd1498Szrj <http://www.gnu.org/licenses/>.  */
1938fd1498Szrj 
2038fd1498Szrj #ifndef GCC_TREE_CORE_H
2138fd1498Szrj #define GCC_TREE_CORE_H
2238fd1498Szrj 
2338fd1498Szrj #include "symtab.h"
2438fd1498Szrj 
2538fd1498Szrj /* This file contains all the data structures that define the 'tree' type.
2638fd1498Szrj    There are no accessor macros nor functions in this file. Only the
2738fd1498Szrj    basic data structures, extern declarations and type definitions.  */
2838fd1498Szrj 
2938fd1498Szrj /*---------------------------------------------------------------------------
3038fd1498Szrj    Forward type declarations.  Mostly to avoid including unnecessary headers
3138fd1498Szrj ---------------------------------------------------------------------------*/
3238fd1498Szrj struct function;
3338fd1498Szrj struct real_value;
3438fd1498Szrj struct fixed_value;
3538fd1498Szrj struct ptr_info_def;
3638fd1498Szrj struct range_info_def;
3738fd1498Szrj struct die_struct;
3838fd1498Szrj 
3938fd1498Szrj 
4038fd1498Szrj /*---------------------------------------------------------------------------
4138fd1498Szrj                               #defined constants
4238fd1498Szrj ---------------------------------------------------------------------------*/
4338fd1498Szrj /* Nonzero if this is a call to a function whose return value depends
4438fd1498Szrj    solely on its arguments, has no side effects, and does not read
4538fd1498Szrj    global memory.  This corresponds to TREE_READONLY for function
4638fd1498Szrj    decls.  */
4738fd1498Szrj #define ECF_CONST		  (1 << 0)
4838fd1498Szrj 
4938fd1498Szrj /* Nonzero if this is a call to "pure" function (like const function,
5038fd1498Szrj    but may read memory.  This corresponds to DECL_PURE_P for function
5138fd1498Szrj    decls.  */
5238fd1498Szrj #define ECF_PURE		  (1 << 1)
5338fd1498Szrj 
5438fd1498Szrj /* Nonzero if this is ECF_CONST or ECF_PURE but cannot be proven to no
5538fd1498Szrj    infinite loop.  This corresponds to DECL_LOOPING_CONST_OR_PURE_P
5638fd1498Szrj    for function decls.*/
5738fd1498Szrj #define ECF_LOOPING_CONST_OR_PURE (1 << 2)
5838fd1498Szrj 
5938fd1498Szrj /* Nonzero if this call will never return.  */
6038fd1498Szrj #define ECF_NORETURN		  (1 << 3)
6138fd1498Szrj 
6238fd1498Szrj /* Nonzero if this is a call to malloc or a related function.  */
6338fd1498Szrj #define ECF_MALLOC		  (1 << 4)
6438fd1498Szrj 
6538fd1498Szrj /* Nonzero if it is plausible that this is a call to alloca.  */
6638fd1498Szrj #define ECF_MAY_BE_ALLOCA	  (1 << 5)
6738fd1498Szrj 
6838fd1498Szrj /* Nonzero if this is a call to a function that won't throw an exception.  */
6938fd1498Szrj #define ECF_NOTHROW		  (1 << 6)
7038fd1498Szrj 
7138fd1498Szrj /* Nonzero if this is a call to setjmp or a related function.  */
7238fd1498Szrj #define ECF_RETURNS_TWICE	  (1 << 7)
7338fd1498Szrj 
7438fd1498Szrj /* Nonzero if this call replaces the current stack frame.  */
7538fd1498Szrj #define ECF_SIBCALL		  (1 << 8)
7638fd1498Szrj 
7738fd1498Szrj /* Function does not read or write memory (but may have side effects, so
7838fd1498Szrj    it does not necessarily fit ECF_CONST).  */
7938fd1498Szrj #define ECF_NOVOPS		  (1 << 9)
8038fd1498Szrj 
8138fd1498Szrj /* The function does not lead to calls within current function unit.  */
8238fd1498Szrj #define ECF_LEAF		  (1 << 10)
8338fd1498Szrj 
8438fd1498Szrj /* Nonzero if this call returns its first argument.  */
8538fd1498Szrj #define ECF_RET1		  (1 << 11)
8638fd1498Szrj 
8738fd1498Szrj /* Nonzero if this call does not affect transactions.  */
8838fd1498Szrj #define ECF_TM_PURE		  (1 << 12)
8938fd1498Szrj 
9038fd1498Szrj /* Nonzero if this call is into the transaction runtime library.  */
9138fd1498Szrj #define ECF_TM_BUILTIN		  (1 << 13)
9238fd1498Szrj 
9338fd1498Szrj /* Nonzero if this is an indirect call by descriptor.  */
9438fd1498Szrj #define ECF_BY_DESCRIPTOR	  (1 << 14)
9538fd1498Szrj 
9638fd1498Szrj /* Nonzero if this is a cold function.  */
9738fd1498Szrj #define ECF_COLD		  (1 << 15)
9838fd1498Szrj 
9938fd1498Szrj /* Call argument flags.  */
10038fd1498Szrj /* Nonzero if the argument is not dereferenced recursively, thus only
10138fd1498Szrj    directly reachable memory is read or written.  */
10238fd1498Szrj #define EAF_DIRECT		(1 << 0)
10338fd1498Szrj 
10438fd1498Szrj /* Nonzero if memory reached by the argument is not clobbered.  */
10538fd1498Szrj #define EAF_NOCLOBBER		(1 << 1)
10638fd1498Szrj 
10738fd1498Szrj /* Nonzero if the argument does not escape.  */
10838fd1498Szrj #define EAF_NOESCAPE		(1 << 2)
10938fd1498Szrj 
11038fd1498Szrj /* Nonzero if the argument is not used by the function.  */
11138fd1498Szrj #define EAF_UNUSED		(1 << 3)
11238fd1498Szrj 
11338fd1498Szrj /* Call return flags.  */
11438fd1498Szrj /* Mask for the argument number that is returned.  Lower two bits of
11538fd1498Szrj    the return flags, encodes argument slots zero to three.  */
11638fd1498Szrj #define ERF_RETURN_ARG_MASK	(3)
11738fd1498Szrj 
11838fd1498Szrj /* Nonzero if the return value is equal to the argument number
11938fd1498Szrj    flags & ERF_RETURN_ARG_MASK.  */
12038fd1498Szrj #define ERF_RETURNS_ARG		(1 << 2)
12138fd1498Szrj 
12238fd1498Szrj /* Nonzero if the return value does not alias with anything.  Functions
12338fd1498Szrj    with the malloc attribute have this set on their return value.  */
12438fd1498Szrj #define ERF_NOALIAS		(1 << 3)
12538fd1498Szrj 
12638fd1498Szrj 
12738fd1498Szrj /*---------------------------------------------------------------------------
12838fd1498Szrj                                   Enumerations
12938fd1498Szrj ---------------------------------------------------------------------------*/
13038fd1498Szrj /* Codes of tree nodes.  */
13138fd1498Szrj #define DEFTREECODE(SYM, STRING, TYPE, NARGS)   SYM,
13238fd1498Szrj #define END_OF_BASE_TREE_CODES LAST_AND_UNUSED_TREE_CODE,
13338fd1498Szrj 
13438fd1498Szrj enum tree_code {
13538fd1498Szrj #include "all-tree.def"
13638fd1498Szrj MAX_TREE_CODES
13738fd1498Szrj };
13838fd1498Szrj 
13938fd1498Szrj #undef DEFTREECODE
14038fd1498Szrj #undef END_OF_BASE_TREE_CODES
14138fd1498Szrj 
14238fd1498Szrj /* Number of language-independent tree codes.  */
14338fd1498Szrj #define NUM_TREE_CODES \
14438fd1498Szrj   ((int) LAST_AND_UNUSED_TREE_CODE)
14538fd1498Szrj 
14638fd1498Szrj #define CODE_CONTAINS_STRUCT(CODE, STRUCT) \
14738fd1498Szrj   (tree_contains_struct[(CODE)][(STRUCT)])
14838fd1498Szrj 
14938fd1498Szrj 
15038fd1498Szrj /* Classify which part of the compiler has defined a given builtin function.
15138fd1498Szrj    Note that we assume below that this is no more than two bits.  */
15238fd1498Szrj enum built_in_class {
15338fd1498Szrj   NOT_BUILT_IN = 0,
15438fd1498Szrj   BUILT_IN_FRONTEND,
15538fd1498Szrj   BUILT_IN_MD,
15638fd1498Szrj   BUILT_IN_NORMAL
15738fd1498Szrj };
15838fd1498Szrj 
15938fd1498Szrj /* Last marker used for LTO stremaing of built_in_class.  We can not add it
16038fd1498Szrj    to the enum since we need the enumb to fit in 2 bits.  */
16138fd1498Szrj #define BUILT_IN_LAST (BUILT_IN_NORMAL + 1)
16238fd1498Szrj 
16338fd1498Szrj /* Codes that identify the various built in functions
16438fd1498Szrj    so that expand_call can identify them quickly.  */
16538fd1498Szrj #define DEF_BUILTIN(ENUM, N, C, T, LT, B, F, NA, AT, IM, COND) ENUM,
16638fd1498Szrj enum built_in_function {
16738fd1498Szrj #include "builtins.def"
16838fd1498Szrj 
16938fd1498Szrj   BEGIN_CHKP_BUILTINS,
17038fd1498Szrj 
17138fd1498Szrj #define DEF_BUILTIN(ENUM, N, C, T, LT, B, F, NA, AT, IM, COND)
17238fd1498Szrj #define DEF_BUILTIN_CHKP(ENUM, N, C, T, LT, B, F, NA, AT, IM, COND) \
17338fd1498Szrj   ENUM##_CHKP = ENUM + BEGIN_CHKP_BUILTINS + 1,
17438fd1498Szrj #include "builtins.def"
17538fd1498Szrj 
17638fd1498Szrj   END_CHKP_BUILTINS = BEGIN_CHKP_BUILTINS * 2 + 1,
17738fd1498Szrj 
17838fd1498Szrj   /* Complex division routines in libgcc.  These are done via builtins
17938fd1498Szrj      because emit_library_call_value can't handle complex values.  */
18038fd1498Szrj   BUILT_IN_COMPLEX_MUL_MIN,
18138fd1498Szrj   BUILT_IN_COMPLEX_MUL_MAX
18238fd1498Szrj     = BUILT_IN_COMPLEX_MUL_MIN
18338fd1498Szrj       + MAX_MODE_COMPLEX_FLOAT
18438fd1498Szrj       - MIN_MODE_COMPLEX_FLOAT,
18538fd1498Szrj 
18638fd1498Szrj   BUILT_IN_COMPLEX_DIV_MIN,
18738fd1498Szrj   BUILT_IN_COMPLEX_DIV_MAX
18838fd1498Szrj     = BUILT_IN_COMPLEX_DIV_MIN
18938fd1498Szrj       + MAX_MODE_COMPLEX_FLOAT
19038fd1498Szrj       - MIN_MODE_COMPLEX_FLOAT,
19138fd1498Szrj 
19238fd1498Szrj   /* Upper bound on non-language-specific builtins.  */
19338fd1498Szrj   END_BUILTINS
19438fd1498Szrj };
19538fd1498Szrj 
19638fd1498Szrj /* Internal functions.  */
19738fd1498Szrj enum internal_fn {
19838fd1498Szrj #define DEF_INTERNAL_FN(CODE, FLAGS, FNSPEC) IFN_##CODE,
19938fd1498Szrj #include "internal-fn.def"
20038fd1498Szrj   IFN_LAST
20138fd1498Szrj };
20238fd1498Szrj 
20338fd1498Szrj /* An enum that combines target-independent built-in functions with
20438fd1498Szrj    internal functions, so that they can be treated in a similar way.
20538fd1498Szrj    The numbers for built-in functions are the same as for the
20638fd1498Szrj    built_in_function enum.  The numbers for internal functions
20738fd1498Szrj    start at END_BUITLINS.  */
20838fd1498Szrj enum combined_fn {
20938fd1498Szrj #define DEF_BUILTIN(ENUM, N, C, T, LT, B, F, NA, AT, IM, COND) \
21038fd1498Szrj   CFN_##ENUM = int (ENUM),
21138fd1498Szrj #include "builtins.def"
21238fd1498Szrj 
21338fd1498Szrj #define DEF_BUILTIN(ENUM, N, C, T, LT, B, F, NA, AT, IM, COND)
21438fd1498Szrj #define DEF_BUILTIN_CHKP(ENUM, N, C, T, LT, B, F, NA, AT, IM, COND) \
21538fd1498Szrj   CFN_##ENUM##_CHKP = int (ENUM##_CHKP),
21638fd1498Szrj #include "builtins.def"
21738fd1498Szrj 
21838fd1498Szrj #define DEF_INTERNAL_FN(CODE, FLAGS, FNSPEC) \
21938fd1498Szrj   CFN_##CODE = int (END_BUILTINS) + int (IFN_##CODE),
22038fd1498Szrj #include "internal-fn.def"
22138fd1498Szrj 
22238fd1498Szrj   CFN_LAST
22338fd1498Szrj };
22438fd1498Szrj 
22538fd1498Szrj /* Tree code classes.  Each tree_code has an associated code class
22638fd1498Szrj    represented by a TREE_CODE_CLASS.  */
22738fd1498Szrj enum tree_code_class {
22838fd1498Szrj   tcc_exceptional, /* An exceptional code (fits no category).  */
22938fd1498Szrj   tcc_constant,    /* A constant.  */
23038fd1498Szrj   /* Order of tcc_type and tcc_declaration is important.  */
23138fd1498Szrj   tcc_type,        /* A type object code.  */
23238fd1498Szrj   tcc_declaration, /* A declaration (also serving as variable refs).  */
23338fd1498Szrj   tcc_reference,   /* A reference to storage.  */
23438fd1498Szrj   tcc_comparison,  /* A comparison expression.  */
23538fd1498Szrj   tcc_unary,       /* A unary arithmetic expression.  */
23638fd1498Szrj   tcc_binary,      /* A binary arithmetic expression.  */
23738fd1498Szrj   tcc_statement,   /* A statement expression, which have side effects
23838fd1498Szrj 		      but usually no interesting value.  */
23938fd1498Szrj   tcc_vl_exp,      /* A function call or other expression with a
24038fd1498Szrj 		      variable-length operand vector.  */
24138fd1498Szrj   tcc_expression   /* Any other expression.  */
24238fd1498Szrj };
24338fd1498Szrj 
24438fd1498Szrj /* OMP_CLAUSE codes.  Do not reorder, as this is used to index into
24538fd1498Szrj    the tables omp_clause_num_ops and omp_clause_code_name.  */
24638fd1498Szrj enum omp_clause_code {
24738fd1498Szrj   /* Clause zero is special-cased inside the parser
24838fd1498Szrj      (c_parser_omp_variable_list).  */
24938fd1498Szrj   OMP_CLAUSE_ERROR = 0,
25038fd1498Szrj 
25138fd1498Szrj   /* OpenACC/OpenMP clause: private (variable_list).  */
25238fd1498Szrj   OMP_CLAUSE_PRIVATE,
25338fd1498Szrj 
25438fd1498Szrj   /* OpenMP clause: shared (variable_list).  */
25538fd1498Szrj   OMP_CLAUSE_SHARED,
25638fd1498Szrj 
25738fd1498Szrj   /* OpenACC/OpenMP clause: firstprivate (variable_list).  */
25838fd1498Szrj   OMP_CLAUSE_FIRSTPRIVATE,
25938fd1498Szrj 
26038fd1498Szrj   /* OpenMP clause: lastprivate (variable_list).  */
26138fd1498Szrj   OMP_CLAUSE_LASTPRIVATE,
26238fd1498Szrj 
26338fd1498Szrj   /* OpenACC/OpenMP clause: reduction (operator:variable_list).
26438fd1498Szrj      OMP_CLAUSE_REDUCTION_CODE: The tree_code of the operator.
26538fd1498Szrj      Operand 1: OMP_CLAUSE_REDUCTION_INIT: Stmt-list to initialize the var.
26638fd1498Szrj      Operand 2: OMP_CLAUSE_REDUCTION_MERGE: Stmt-list to merge private var
26738fd1498Szrj                 into the shared one.
26838fd1498Szrj      Operand 3: OMP_CLAUSE_REDUCTION_PLACEHOLDER: A dummy VAR_DECL
26938fd1498Szrj                 placeholder used in OMP_CLAUSE_REDUCTION_{INIT,MERGE}.
27038fd1498Szrj      Operand 4: OMP_CLAUSE_REDUCTION_DECL_PLACEHOLDER: Another dummy
27138fd1498Szrj 		VAR_DECL placeholder, used like the above for C/C++ array
27238fd1498Szrj 		reductions.  */
27338fd1498Szrj   OMP_CLAUSE_REDUCTION,
27438fd1498Szrj 
27538fd1498Szrj   /* OpenMP clause: copyin (variable_list).  */
27638fd1498Szrj   OMP_CLAUSE_COPYIN,
27738fd1498Szrj 
27838fd1498Szrj   /* OpenMP clause: copyprivate (variable_list).  */
27938fd1498Szrj   OMP_CLAUSE_COPYPRIVATE,
28038fd1498Szrj 
28138fd1498Szrj   /* OpenMP clause: linear (variable-list[:linear-step]).  */
28238fd1498Szrj   OMP_CLAUSE_LINEAR,
28338fd1498Szrj 
28438fd1498Szrj   /* OpenMP clause: aligned (variable-list[:alignment]).  */
28538fd1498Szrj   OMP_CLAUSE_ALIGNED,
28638fd1498Szrj 
28738fd1498Szrj   /* OpenMP clause: depend ({in,out,inout}:variable-list).  */
28838fd1498Szrj   OMP_CLAUSE_DEPEND,
28938fd1498Szrj 
29038fd1498Szrj   /* OpenMP clause: uniform (argument-list).  */
29138fd1498Szrj   OMP_CLAUSE_UNIFORM,
29238fd1498Szrj 
29338fd1498Szrj   /* OpenMP clause: to (extended-list).
29438fd1498Szrj      Only when it appears in declare target.  */
29538fd1498Szrj   OMP_CLAUSE_TO_DECLARE,
29638fd1498Szrj 
29738fd1498Szrj   /* OpenMP clause: link (variable-list).  */
29838fd1498Szrj   OMP_CLAUSE_LINK,
29938fd1498Szrj 
30038fd1498Szrj   /* OpenMP clause: from (variable-list).  */
30138fd1498Szrj   OMP_CLAUSE_FROM,
30238fd1498Szrj 
30338fd1498Szrj   /* OpenMP clause: to (variable-list).  */
30438fd1498Szrj   OMP_CLAUSE_TO,
30538fd1498Szrj 
30638fd1498Szrj   /* OpenACC clauses: {copy, copyin, copyout, create, delete, deviceptr,
30738fd1498Szrj      device, host (self), present, present_or_copy (pcopy), present_or_copyin
30838fd1498Szrj      (pcopyin), present_or_copyout (pcopyout), present_or_create (pcreate)}
30938fd1498Szrj      (variable-list).
31038fd1498Szrj 
31138fd1498Szrj      OpenMP clause: map ({alloc:,to:,from:,tofrom:,}variable-list).  */
31238fd1498Szrj   OMP_CLAUSE_MAP,
31338fd1498Szrj 
31438fd1498Szrj   /* OpenACC clause: use_device (variable_list).
31538fd1498Szrj      OpenMP clause: use_device_ptr (variable-list).  */
31638fd1498Szrj   OMP_CLAUSE_USE_DEVICE_PTR,
31738fd1498Szrj 
31838fd1498Szrj   /* OpenMP clause: is_device_ptr (variable-list).  */
31938fd1498Szrj   OMP_CLAUSE_IS_DEVICE_PTR,
32038fd1498Szrj 
32138fd1498Szrj   /* Internal structure to hold OpenACC cache directive's variable-list.
32238fd1498Szrj      #pragma acc cache (variable-list).  */
32338fd1498Szrj   OMP_CLAUSE__CACHE_,
32438fd1498Szrj 
32538fd1498Szrj   /* OpenACC clause: gang [(gang-argument-list)].
32638fd1498Szrj      Where
32738fd1498Szrj       gang-argument-list: [gang-argument-list, ] gang-argument
32838fd1498Szrj       gang-argument: [num:] integer-expression
32938fd1498Szrj                    | static: size-expression
33038fd1498Szrj       size-expression: * | integer-expression.  */
33138fd1498Szrj   OMP_CLAUSE_GANG,
33238fd1498Szrj 
33338fd1498Szrj   /* OpenACC clause: async [(integer-expression)].  */
33438fd1498Szrj   OMP_CLAUSE_ASYNC,
33538fd1498Szrj 
33638fd1498Szrj   /* OpenACC clause: wait [(integer-expression-list)].  */
33738fd1498Szrj   OMP_CLAUSE_WAIT,
33838fd1498Szrj 
33938fd1498Szrj   /* OpenACC clause: auto.  */
34038fd1498Szrj   OMP_CLAUSE_AUTO,
34138fd1498Szrj 
34238fd1498Szrj   /* OpenACC clause: seq.  */
34338fd1498Szrj   OMP_CLAUSE_SEQ,
34438fd1498Szrj 
34538fd1498Szrj   /* Internal clause: temporary for combined loops expansion.  */
34638fd1498Szrj   OMP_CLAUSE__LOOPTEMP_,
34738fd1498Szrj 
34838fd1498Szrj   /* OpenACC/OpenMP clause: if (scalar-expression).  */
34938fd1498Szrj   OMP_CLAUSE_IF,
35038fd1498Szrj 
35138fd1498Szrj   /* OpenMP clause: num_threads (integer-expression).  */
35238fd1498Szrj   OMP_CLAUSE_NUM_THREADS,
35338fd1498Szrj 
35438fd1498Szrj   /* OpenMP clause: schedule.  */
35538fd1498Szrj   OMP_CLAUSE_SCHEDULE,
35638fd1498Szrj 
35738fd1498Szrj   /* OpenMP clause: nowait.  */
35838fd1498Szrj   OMP_CLAUSE_NOWAIT,
35938fd1498Szrj 
36038fd1498Szrj   /* OpenMP clause: ordered [(constant-integer-expression)].  */
36138fd1498Szrj   OMP_CLAUSE_ORDERED,
36238fd1498Szrj 
36338fd1498Szrj   /* OpenACC/OpenMP clause: default.  */
36438fd1498Szrj   OMP_CLAUSE_DEFAULT,
36538fd1498Szrj 
36638fd1498Szrj   /* OpenACC/OpenMP clause: collapse (constant-integer-expression).  */
36738fd1498Szrj   OMP_CLAUSE_COLLAPSE,
36838fd1498Szrj 
36938fd1498Szrj   /* OpenMP clause: untied.  */
37038fd1498Szrj   OMP_CLAUSE_UNTIED,
37138fd1498Szrj 
37238fd1498Szrj   /* OpenMP clause: final (scalar-expression).  */
37338fd1498Szrj   OMP_CLAUSE_FINAL,
37438fd1498Szrj 
37538fd1498Szrj   /* OpenMP clause: mergeable.  */
37638fd1498Szrj   OMP_CLAUSE_MERGEABLE,
37738fd1498Szrj 
37838fd1498Szrj   /* OpenMP clause: device (integer-expression).  */
37938fd1498Szrj   OMP_CLAUSE_DEVICE,
38038fd1498Szrj 
38138fd1498Szrj   /* OpenMP clause: dist_schedule (static[:chunk-size]).  */
38238fd1498Szrj   OMP_CLAUSE_DIST_SCHEDULE,
38338fd1498Szrj 
38438fd1498Szrj   /* OpenMP clause: inbranch.  */
38538fd1498Szrj   OMP_CLAUSE_INBRANCH,
38638fd1498Szrj 
38738fd1498Szrj   /* OpenMP clause: notinbranch.  */
38838fd1498Szrj   OMP_CLAUSE_NOTINBRANCH,
38938fd1498Szrj 
39038fd1498Szrj   /* OpenMP clause: num_teams(integer-expression).  */
39138fd1498Szrj   OMP_CLAUSE_NUM_TEAMS,
39238fd1498Szrj 
39338fd1498Szrj   /* OpenMP clause: thread_limit(integer-expression).  */
39438fd1498Szrj   OMP_CLAUSE_THREAD_LIMIT,
39538fd1498Szrj 
39638fd1498Szrj   /* OpenMP clause: proc_bind ({master,close,spread}).  */
39738fd1498Szrj   OMP_CLAUSE_PROC_BIND,
39838fd1498Szrj 
39938fd1498Szrj   /* OpenMP clause: safelen (constant-integer-expression).  */
40038fd1498Szrj   OMP_CLAUSE_SAFELEN,
40138fd1498Szrj 
40238fd1498Szrj   /* OpenMP clause: simdlen (constant-integer-expression).  */
40338fd1498Szrj   OMP_CLAUSE_SIMDLEN,
40438fd1498Szrj 
40538fd1498Szrj   /* OpenMP clause: for.  */
40638fd1498Szrj   OMP_CLAUSE_FOR,
40738fd1498Szrj 
40838fd1498Szrj   /* OpenMP clause: parallel.  */
40938fd1498Szrj   OMP_CLAUSE_PARALLEL,
41038fd1498Szrj 
41138fd1498Szrj   /* OpenMP clause: sections.  */
41238fd1498Szrj   OMP_CLAUSE_SECTIONS,
41338fd1498Szrj 
41438fd1498Szrj   /* OpenMP clause: taskgroup.  */
41538fd1498Szrj   OMP_CLAUSE_TASKGROUP,
41638fd1498Szrj 
41738fd1498Szrj   /* OpenMP clause: priority (integer-expression).  */
41838fd1498Szrj   OMP_CLAUSE_PRIORITY,
41938fd1498Szrj 
42038fd1498Szrj   /* OpenMP clause: grainsize (integer-expression).  */
42138fd1498Szrj   OMP_CLAUSE_GRAINSIZE,
42238fd1498Szrj 
42338fd1498Szrj   /* OpenMP clause: num_tasks (integer-expression).  */
42438fd1498Szrj   OMP_CLAUSE_NUM_TASKS,
42538fd1498Szrj 
42638fd1498Szrj   /* OpenMP clause: nogroup.  */
42738fd1498Szrj   OMP_CLAUSE_NOGROUP,
42838fd1498Szrj 
42938fd1498Szrj   /* OpenMP clause: threads.  */
43038fd1498Szrj   OMP_CLAUSE_THREADS,
43138fd1498Szrj 
43238fd1498Szrj   /* OpenMP clause: simd.  */
43338fd1498Szrj   OMP_CLAUSE_SIMD,
43438fd1498Szrj 
43538fd1498Szrj   /* OpenMP clause: hint (integer-expression).  */
43638fd1498Szrj   OMP_CLAUSE_HINT,
43738fd1498Szrj 
43838fd1498Szrj   /* OpenMP clause: defaultmap (tofrom: scalar).  */
43938fd1498Szrj   OMP_CLAUSE_DEFAULTMAP,
44038fd1498Szrj 
44138fd1498Szrj   /* Internally used only clause, holding SIMD uid.  */
44238fd1498Szrj   OMP_CLAUSE__SIMDUID_,
44338fd1498Szrj 
44438fd1498Szrj   /* Internally used only clause, flag whether this is SIMT simd
44538fd1498Szrj      loop or not.  */
44638fd1498Szrj   OMP_CLAUSE__SIMT_,
44738fd1498Szrj 
44838fd1498Szrj   /* OpenACC clause: independent.  */
44938fd1498Szrj   OMP_CLAUSE_INDEPENDENT,
45038fd1498Szrj 
45138fd1498Szrj   /* OpenACC clause: worker [( [num:] integer-expression)].  */
45238fd1498Szrj   OMP_CLAUSE_WORKER,
45338fd1498Szrj 
45438fd1498Szrj   /* OpenACC clause: vector [( [length:] integer-expression)].  */
45538fd1498Szrj   OMP_CLAUSE_VECTOR,
45638fd1498Szrj 
45738fd1498Szrj   /* OpenACC clause: num_gangs (integer-expression).  */
45838fd1498Szrj   OMP_CLAUSE_NUM_GANGS,
45938fd1498Szrj 
46038fd1498Szrj   /* OpenACC clause: num_workers (integer-expression).  */
46138fd1498Szrj   OMP_CLAUSE_NUM_WORKERS,
46238fd1498Szrj 
46338fd1498Szrj   /* OpenACC clause: vector_length (integer-expression).  */
46438fd1498Szrj   OMP_CLAUSE_VECTOR_LENGTH,
46538fd1498Szrj 
46638fd1498Szrj   /* OpenACC clause: tile ( size-expr-list ).  */
46738fd1498Szrj   OMP_CLAUSE_TILE,
46838fd1498Szrj 
46938fd1498Szrj   /* OpenMP internal-only clause to specify grid dimensions of a gridified
47038fd1498Szrj      kernel.  */
47138fd1498Szrj   OMP_CLAUSE__GRIDDIM_
47238fd1498Szrj };
47338fd1498Szrj 
47438fd1498Szrj #undef DEFTREESTRUCT
47538fd1498Szrj #define DEFTREESTRUCT(ENUM, NAME) ENUM,
47638fd1498Szrj enum tree_node_structure_enum {
47738fd1498Szrj #include "treestruct.def"
47838fd1498Szrj   LAST_TS_ENUM
47938fd1498Szrj };
48038fd1498Szrj #undef DEFTREESTRUCT
48138fd1498Szrj 
48238fd1498Szrj enum omp_clause_schedule_kind {
48338fd1498Szrj   OMP_CLAUSE_SCHEDULE_STATIC,
48438fd1498Szrj   OMP_CLAUSE_SCHEDULE_DYNAMIC,
48538fd1498Szrj   OMP_CLAUSE_SCHEDULE_GUIDED,
48638fd1498Szrj   OMP_CLAUSE_SCHEDULE_AUTO,
48738fd1498Szrj   OMP_CLAUSE_SCHEDULE_RUNTIME,
48838fd1498Szrj   OMP_CLAUSE_SCHEDULE_MASK = (1 << 3) - 1,
48938fd1498Szrj   OMP_CLAUSE_SCHEDULE_MONOTONIC = (1 << 3),
49038fd1498Szrj   OMP_CLAUSE_SCHEDULE_NONMONOTONIC = (1 << 4),
49138fd1498Szrj   OMP_CLAUSE_SCHEDULE_LAST = 2 * OMP_CLAUSE_SCHEDULE_NONMONOTONIC - 1
49238fd1498Szrj };
49338fd1498Szrj 
49438fd1498Szrj enum omp_clause_default_kind {
49538fd1498Szrj   OMP_CLAUSE_DEFAULT_UNSPECIFIED,
49638fd1498Szrj   OMP_CLAUSE_DEFAULT_SHARED,
49738fd1498Szrj   OMP_CLAUSE_DEFAULT_NONE,
49838fd1498Szrj   OMP_CLAUSE_DEFAULT_PRIVATE,
49938fd1498Szrj   OMP_CLAUSE_DEFAULT_FIRSTPRIVATE,
50038fd1498Szrj   OMP_CLAUSE_DEFAULT_PRESENT,
50138fd1498Szrj   OMP_CLAUSE_DEFAULT_LAST
50238fd1498Szrj };
50338fd1498Szrj 
50438fd1498Szrj /* There is a TYPE_QUAL value for each type qualifier.  They can be
50538fd1498Szrj    combined by bitwise-or to form the complete set of qualifiers for a
50638fd1498Szrj    type.  */
50738fd1498Szrj enum cv_qualifier {
50838fd1498Szrj   TYPE_UNQUALIFIED   = 0x0,
50938fd1498Szrj   TYPE_QUAL_CONST    = 0x1,
51038fd1498Szrj   TYPE_QUAL_VOLATILE = 0x2,
51138fd1498Szrj   TYPE_QUAL_RESTRICT = 0x4,
51238fd1498Szrj   TYPE_QUAL_ATOMIC   = 0x8
51338fd1498Szrj };
51438fd1498Szrj 
51538fd1498Szrj /* Standard named or nameless data types of the C compiler.  */
51638fd1498Szrj enum tree_index {
51738fd1498Szrj   TI_ERROR_MARK,
51838fd1498Szrj   TI_INTQI_TYPE,
51938fd1498Szrj   TI_INTHI_TYPE,
52038fd1498Szrj   TI_INTSI_TYPE,
52138fd1498Szrj   TI_INTDI_TYPE,
52238fd1498Szrj   TI_INTTI_TYPE,
52338fd1498Szrj 
52438fd1498Szrj   TI_UINTQI_TYPE,
52538fd1498Szrj   TI_UINTHI_TYPE,
52638fd1498Szrj   TI_UINTSI_TYPE,
52738fd1498Szrj   TI_UINTDI_TYPE,
52838fd1498Szrj   TI_UINTTI_TYPE,
52938fd1498Szrj 
53038fd1498Szrj   TI_ATOMICQI_TYPE,
53138fd1498Szrj   TI_ATOMICHI_TYPE,
53238fd1498Szrj   TI_ATOMICSI_TYPE,
53338fd1498Szrj   TI_ATOMICDI_TYPE,
53438fd1498Szrj   TI_ATOMICTI_TYPE,
53538fd1498Szrj 
53638fd1498Szrj   TI_UINT16_TYPE,
53738fd1498Szrj   TI_UINT32_TYPE,
53838fd1498Szrj   TI_UINT64_TYPE,
53938fd1498Szrj 
54038fd1498Szrj   TI_VOID,
54138fd1498Szrj 
54238fd1498Szrj   TI_INTEGER_ZERO,
54338fd1498Szrj   TI_INTEGER_ONE,
54438fd1498Szrj   TI_INTEGER_THREE,
54538fd1498Szrj   TI_INTEGER_MINUS_ONE,
54638fd1498Szrj   TI_NULL_POINTER,
54738fd1498Szrj 
54838fd1498Szrj   TI_SIZE_ZERO,
54938fd1498Szrj   TI_SIZE_ONE,
55038fd1498Szrj 
55138fd1498Szrj   TI_BITSIZE_ZERO,
55238fd1498Szrj   TI_BITSIZE_ONE,
55338fd1498Szrj   TI_BITSIZE_UNIT,
55438fd1498Szrj 
55538fd1498Szrj   TI_PUBLIC,
55638fd1498Szrj   TI_PROTECTED,
55738fd1498Szrj   TI_PRIVATE,
55838fd1498Szrj 
55938fd1498Szrj   TI_BOOLEAN_FALSE,
56038fd1498Szrj   TI_BOOLEAN_TRUE,
56138fd1498Szrj 
56238fd1498Szrj   TI_FLOAT_TYPE,
56338fd1498Szrj   TI_DOUBLE_TYPE,
56438fd1498Szrj   TI_LONG_DOUBLE_TYPE,
56538fd1498Szrj 
56638fd1498Szrj   /* The _FloatN and _FloatNx types must be consecutive, and in the
56738fd1498Szrj      same sequence as the corresponding complex types, which must also
56838fd1498Szrj      be consecutive; _FloatN must come before _FloatNx; the order must
56938fd1498Szrj      also be the same as in the floatn_nx_types array and the RID_*
57038fd1498Szrj      values in c-common.h.  This is so that iterations over these
57138fd1498Szrj      types work as intended.  */
57238fd1498Szrj   TI_FLOAT16_TYPE,
57338fd1498Szrj   TI_FLOATN_TYPE_FIRST = TI_FLOAT16_TYPE,
57438fd1498Szrj   TI_FLOATN_NX_TYPE_FIRST = TI_FLOAT16_TYPE,
57538fd1498Szrj   TI_FLOAT32_TYPE,
57638fd1498Szrj   TI_FLOAT64_TYPE,
57738fd1498Szrj   TI_FLOAT128_TYPE,
57838fd1498Szrj   TI_FLOATN_TYPE_LAST = TI_FLOAT128_TYPE,
57938fd1498Szrj #define NUM_FLOATN_TYPES (TI_FLOATN_TYPE_LAST - TI_FLOATN_TYPE_FIRST + 1)
58038fd1498Szrj   TI_FLOAT32X_TYPE,
58138fd1498Szrj   TI_FLOATNX_TYPE_FIRST = TI_FLOAT32X_TYPE,
58238fd1498Szrj   TI_FLOAT64X_TYPE,
58338fd1498Szrj   TI_FLOAT128X_TYPE,
58438fd1498Szrj   TI_FLOATNX_TYPE_LAST = TI_FLOAT128X_TYPE,
58538fd1498Szrj   TI_FLOATN_NX_TYPE_LAST = TI_FLOAT128X_TYPE,
58638fd1498Szrj #define NUM_FLOATNX_TYPES (TI_FLOATNX_TYPE_LAST - TI_FLOATNX_TYPE_FIRST + 1)
58738fd1498Szrj #define NUM_FLOATN_NX_TYPES (TI_FLOATN_NX_TYPE_LAST		\
58838fd1498Szrj 			     - TI_FLOATN_NX_TYPE_FIRST		\
58938fd1498Szrj 			     + 1)
59038fd1498Szrj 
59138fd1498Szrj   /* Put the complex types after their component types, so that in (sequential)
59238fd1498Szrj      tree streaming we can assert that their component types have already been
59338fd1498Szrj      handled (see tree-streamer.c:record_common_node).  */
59438fd1498Szrj   TI_COMPLEX_INTEGER_TYPE,
59538fd1498Szrj   TI_COMPLEX_FLOAT_TYPE,
59638fd1498Szrj   TI_COMPLEX_DOUBLE_TYPE,
59738fd1498Szrj   TI_COMPLEX_LONG_DOUBLE_TYPE,
59838fd1498Szrj 
59938fd1498Szrj   TI_COMPLEX_FLOAT16_TYPE,
60038fd1498Szrj   TI_COMPLEX_FLOATN_NX_TYPE_FIRST = TI_COMPLEX_FLOAT16_TYPE,
60138fd1498Szrj   TI_COMPLEX_FLOAT32_TYPE,
60238fd1498Szrj   TI_COMPLEX_FLOAT64_TYPE,
60338fd1498Szrj   TI_COMPLEX_FLOAT128_TYPE,
60438fd1498Szrj   TI_COMPLEX_FLOAT32X_TYPE,
60538fd1498Szrj   TI_COMPLEX_FLOAT64X_TYPE,
60638fd1498Szrj   TI_COMPLEX_FLOAT128X_TYPE,
60738fd1498Szrj 
60838fd1498Szrj   TI_FLOAT_PTR_TYPE,
60938fd1498Szrj   TI_DOUBLE_PTR_TYPE,
61038fd1498Szrj   TI_LONG_DOUBLE_PTR_TYPE,
61138fd1498Szrj   TI_INTEGER_PTR_TYPE,
61238fd1498Szrj 
61338fd1498Szrj   TI_VOID_TYPE,
61438fd1498Szrj   TI_PTR_TYPE,
61538fd1498Szrj   TI_CONST_PTR_TYPE,
61638fd1498Szrj   TI_SIZE_TYPE,
61738fd1498Szrj   TI_PID_TYPE,
61838fd1498Szrj   TI_PTRDIFF_TYPE,
61938fd1498Szrj   TI_VA_LIST_TYPE,
62038fd1498Szrj   TI_VA_LIST_GPR_COUNTER_FIELD,
62138fd1498Szrj   TI_VA_LIST_FPR_COUNTER_FIELD,
62238fd1498Szrj   TI_BOOLEAN_TYPE,
62338fd1498Szrj   TI_FILEPTR_TYPE,
62438fd1498Szrj   TI_CONST_TM_PTR_TYPE,
62538fd1498Szrj   TI_FENV_T_PTR_TYPE,
62638fd1498Szrj   TI_CONST_FENV_T_PTR_TYPE,
62738fd1498Szrj   TI_FEXCEPT_T_PTR_TYPE,
62838fd1498Szrj   TI_CONST_FEXCEPT_T_PTR_TYPE,
62938fd1498Szrj   TI_POINTER_SIZED_TYPE,
63038fd1498Szrj 
63138fd1498Szrj   TI_POINTER_BOUNDS_TYPE,
63238fd1498Szrj 
63338fd1498Szrj   TI_DFLOAT32_TYPE,
63438fd1498Szrj   TI_DFLOAT64_TYPE,
63538fd1498Szrj   TI_DFLOAT128_TYPE,
63638fd1498Szrj   TI_DFLOAT32_PTR_TYPE,
63738fd1498Szrj   TI_DFLOAT64_PTR_TYPE,
63838fd1498Szrj   TI_DFLOAT128_PTR_TYPE,
63938fd1498Szrj 
64038fd1498Szrj   TI_VOID_LIST_NODE,
64138fd1498Szrj 
64238fd1498Szrj   TI_MAIN_IDENTIFIER,
64338fd1498Szrj 
64438fd1498Szrj   TI_SAT_SFRACT_TYPE,
64538fd1498Szrj   TI_SAT_FRACT_TYPE,
64638fd1498Szrj   TI_SAT_LFRACT_TYPE,
64738fd1498Szrj   TI_SAT_LLFRACT_TYPE,
64838fd1498Szrj   TI_SAT_USFRACT_TYPE,
64938fd1498Szrj   TI_SAT_UFRACT_TYPE,
65038fd1498Szrj   TI_SAT_ULFRACT_TYPE,
65138fd1498Szrj   TI_SAT_ULLFRACT_TYPE,
65238fd1498Szrj   TI_SFRACT_TYPE,
65338fd1498Szrj   TI_FRACT_TYPE,
65438fd1498Szrj   TI_LFRACT_TYPE,
65538fd1498Szrj   TI_LLFRACT_TYPE,
65638fd1498Szrj   TI_USFRACT_TYPE,
65738fd1498Szrj   TI_UFRACT_TYPE,
65838fd1498Szrj   TI_ULFRACT_TYPE,
65938fd1498Szrj   TI_ULLFRACT_TYPE,
66038fd1498Szrj   TI_SAT_SACCUM_TYPE,
66138fd1498Szrj   TI_SAT_ACCUM_TYPE,
66238fd1498Szrj   TI_SAT_LACCUM_TYPE,
66338fd1498Szrj   TI_SAT_LLACCUM_TYPE,
66438fd1498Szrj   TI_SAT_USACCUM_TYPE,
66538fd1498Szrj   TI_SAT_UACCUM_TYPE,
66638fd1498Szrj   TI_SAT_ULACCUM_TYPE,
66738fd1498Szrj   TI_SAT_ULLACCUM_TYPE,
66838fd1498Szrj   TI_SACCUM_TYPE,
66938fd1498Szrj   TI_ACCUM_TYPE,
67038fd1498Szrj   TI_LACCUM_TYPE,
67138fd1498Szrj   TI_LLACCUM_TYPE,
67238fd1498Szrj   TI_USACCUM_TYPE,
67338fd1498Szrj   TI_UACCUM_TYPE,
67438fd1498Szrj   TI_ULACCUM_TYPE,
67538fd1498Szrj   TI_ULLACCUM_TYPE,
67638fd1498Szrj   TI_QQ_TYPE,
67738fd1498Szrj   TI_HQ_TYPE,
67838fd1498Szrj   TI_SQ_TYPE,
67938fd1498Szrj   TI_DQ_TYPE,
68038fd1498Szrj   TI_TQ_TYPE,
68138fd1498Szrj   TI_UQQ_TYPE,
68238fd1498Szrj   TI_UHQ_TYPE,
68338fd1498Szrj   TI_USQ_TYPE,
68438fd1498Szrj   TI_UDQ_TYPE,
68538fd1498Szrj   TI_UTQ_TYPE,
68638fd1498Szrj   TI_SAT_QQ_TYPE,
68738fd1498Szrj   TI_SAT_HQ_TYPE,
68838fd1498Szrj   TI_SAT_SQ_TYPE,
68938fd1498Szrj   TI_SAT_DQ_TYPE,
69038fd1498Szrj   TI_SAT_TQ_TYPE,
69138fd1498Szrj   TI_SAT_UQQ_TYPE,
69238fd1498Szrj   TI_SAT_UHQ_TYPE,
69338fd1498Szrj   TI_SAT_USQ_TYPE,
69438fd1498Szrj   TI_SAT_UDQ_TYPE,
69538fd1498Szrj   TI_SAT_UTQ_TYPE,
69638fd1498Szrj   TI_HA_TYPE,
69738fd1498Szrj   TI_SA_TYPE,
69838fd1498Szrj   TI_DA_TYPE,
69938fd1498Szrj   TI_TA_TYPE,
70038fd1498Szrj   TI_UHA_TYPE,
70138fd1498Szrj   TI_USA_TYPE,
70238fd1498Szrj   TI_UDA_TYPE,
70338fd1498Szrj   TI_UTA_TYPE,
70438fd1498Szrj   TI_SAT_HA_TYPE,
70538fd1498Szrj   TI_SAT_SA_TYPE,
70638fd1498Szrj   TI_SAT_DA_TYPE,
70738fd1498Szrj   TI_SAT_TA_TYPE,
70838fd1498Szrj   TI_SAT_UHA_TYPE,
70938fd1498Szrj   TI_SAT_USA_TYPE,
71038fd1498Szrj   TI_SAT_UDA_TYPE,
71138fd1498Szrj   TI_SAT_UTA_TYPE,
71238fd1498Szrj 
71338fd1498Szrj   TI_OPTIMIZATION_DEFAULT,
71438fd1498Szrj   TI_OPTIMIZATION_CURRENT,
71538fd1498Szrj   TI_TARGET_OPTION_DEFAULT,
71638fd1498Szrj   TI_TARGET_OPTION_CURRENT,
71738fd1498Szrj   TI_CURRENT_TARGET_PRAGMA,
71838fd1498Szrj   TI_CURRENT_OPTIMIZE_PRAGMA,
71938fd1498Szrj 
72038fd1498Szrj   TI_MAX
72138fd1498Szrj };
72238fd1498Szrj 
72338fd1498Szrj /* An enumeration of the standard C integer types.  These must be
72438fd1498Szrj    ordered so that shorter types appear before longer ones, and so
72538fd1498Szrj    that signed types appear before unsigned ones, for the correct
72638fd1498Szrj    functioning of interpret_integer() in c-lex.c.  */
72738fd1498Szrj enum integer_type_kind {
72838fd1498Szrj   itk_char,
72938fd1498Szrj   itk_signed_char,
73038fd1498Szrj   itk_unsigned_char,
73138fd1498Szrj   itk_short,
73238fd1498Szrj   itk_unsigned_short,
73338fd1498Szrj   itk_int,
73438fd1498Szrj   itk_unsigned_int,
73538fd1498Szrj   itk_long,
73638fd1498Szrj   itk_unsigned_long,
73738fd1498Szrj   itk_long_long,
73838fd1498Szrj   itk_unsigned_long_long,
73938fd1498Szrj 
74038fd1498Szrj   itk_intN_0,
74138fd1498Szrj   itk_unsigned_intN_0,
74238fd1498Szrj   itk_intN_1,
74338fd1498Szrj   itk_unsigned_intN_1,
74438fd1498Szrj   itk_intN_2,
74538fd1498Szrj   itk_unsigned_intN_2,
74638fd1498Szrj   itk_intN_3,
74738fd1498Szrj   itk_unsigned_intN_3,
74838fd1498Szrj 
74938fd1498Szrj   itk_none
75038fd1498Szrj };
75138fd1498Szrj 
75238fd1498Szrj /* A pointer-to-function member type looks like:
75338fd1498Szrj 
75438fd1498Szrj      struct {
75538fd1498Szrj        __P __pfn;
75638fd1498Szrj        ptrdiff_t __delta;
75738fd1498Szrj      };
75838fd1498Szrj 
75938fd1498Szrj    If __pfn is NULL, it is a NULL pointer-to-member-function.
76038fd1498Szrj 
76138fd1498Szrj    (Because the vtable is always the first thing in the object, we
76238fd1498Szrj    don't need its offset.)  If the function is virtual, then PFN is
76338fd1498Szrj    one plus twice the index into the vtable; otherwise, it is just a
76438fd1498Szrj    pointer to the function.
76538fd1498Szrj 
76638fd1498Szrj    Unfortunately, using the lowest bit of PFN doesn't work in
76738fd1498Szrj    architectures that don't impose alignment requirements on function
76838fd1498Szrj    addresses, or that use the lowest bit to tell one ISA from another,
76938fd1498Szrj    for example.  For such architectures, we use the lowest bit of
77038fd1498Szrj    DELTA instead of the lowest bit of the PFN, and DELTA will be
77138fd1498Szrj    multiplied by 2.  */
77238fd1498Szrj enum ptrmemfunc_vbit_where_t {
77338fd1498Szrj   ptrmemfunc_vbit_in_pfn,
77438fd1498Szrj   ptrmemfunc_vbit_in_delta
77538fd1498Szrj };
77638fd1498Szrj 
77738fd1498Szrj /* Flags that may be passed in the third argument of decl_attributes, and
77838fd1498Szrj    to handler functions for attributes.  */
77938fd1498Szrj enum attribute_flags {
78038fd1498Szrj   /* The type passed in is the type of a DECL, and any attributes that
78138fd1498Szrj      should be passed in again to be applied to the DECL rather than the
78238fd1498Szrj      type should be returned.  */
78338fd1498Szrj   ATTR_FLAG_DECL_NEXT = 1,
78438fd1498Szrj   /* The type passed in is a function return type, and any attributes that
78538fd1498Szrj      should be passed in again to be applied to the function type rather
78638fd1498Szrj      than the return type should be returned.  */
78738fd1498Szrj   ATTR_FLAG_FUNCTION_NEXT = 2,
78838fd1498Szrj   /* The type passed in is an array element type, and any attributes that
78938fd1498Szrj      should be passed in again to be applied to the array type rather
79038fd1498Szrj      than the element type should be returned.  */
79138fd1498Szrj   ATTR_FLAG_ARRAY_NEXT = 4,
79238fd1498Szrj   /* The type passed in is a structure, union or enumeration type being
79338fd1498Szrj      created, and should be modified in place.  */
79438fd1498Szrj   ATTR_FLAG_TYPE_IN_PLACE = 8,
79538fd1498Szrj   /* The attributes are being applied by default to a library function whose
79638fd1498Szrj      name indicates known behavior, and should be silently ignored if they
79738fd1498Szrj      are not in fact compatible with the function type.  */
79838fd1498Szrj   ATTR_FLAG_BUILT_IN = 16,
79938fd1498Szrj   /* A given attribute has been parsed as a C++-11 attribute.  */
80038fd1498Szrj   ATTR_FLAG_CXX11 = 32
80138fd1498Szrj };
80238fd1498Szrj 
80338fd1498Szrj /* Types used to represent sizes.  */
80438fd1498Szrj enum size_type_kind {
80538fd1498Szrj   stk_sizetype,		/* Normal representation of sizes in bytes.  */
80638fd1498Szrj   stk_ssizetype,	/* Signed representation of sizes in bytes.  */
80738fd1498Szrj   stk_bitsizetype,	/* Normal representation of sizes in bits.  */
80838fd1498Szrj   stk_sbitsizetype,	/* Signed representation of sizes in bits.  */
80938fd1498Szrj   stk_type_kind_last
81038fd1498Szrj };
81138fd1498Szrj 
81238fd1498Szrj enum operand_equal_flag {
81338fd1498Szrj   OEP_ONLY_CONST = 1,
81438fd1498Szrj   OEP_PURE_SAME = 2,
81538fd1498Szrj   OEP_MATCH_SIDE_EFFECTS = 4,
81638fd1498Szrj   OEP_ADDRESS_OF = 8,
81738fd1498Szrj   /* Internal within operand_equal_p:  */
81838fd1498Szrj   OEP_NO_HASH_CHECK = 16,
81938fd1498Szrj   /* Internal within inchash::add_expr:  */
82038fd1498Szrj   OEP_HASH_CHECK = 32,
82138fd1498Szrj   /* Makes operand_equal_p handle more expressions:  */
82238fd1498Szrj   OEP_LEXICOGRAPHIC = 64
82338fd1498Szrj };
82438fd1498Szrj 
82538fd1498Szrj /* Enum and arrays used for tree allocation stats.
82638fd1498Szrj    Keep in sync with tree.c:tree_node_kind_names.  */
82738fd1498Szrj enum tree_node_kind {
82838fd1498Szrj   d_kind,
82938fd1498Szrj   t_kind,
83038fd1498Szrj   b_kind,
83138fd1498Szrj   s_kind,
83238fd1498Szrj   r_kind,
83338fd1498Szrj   e_kind,
83438fd1498Szrj   c_kind,
83538fd1498Szrj   id_kind,
83638fd1498Szrj   vec_kind,
83738fd1498Szrj   binfo_kind,
83838fd1498Szrj   ssa_name_kind,
83938fd1498Szrj   constr_kind,
84038fd1498Szrj   x_kind,
84138fd1498Szrj   lang_decl,
84238fd1498Szrj   lang_type,
84338fd1498Szrj   omp_clause_kind,
84438fd1498Szrj   all_kinds
84538fd1498Szrj };
84638fd1498Szrj 
84738fd1498Szrj enum annot_expr_kind {
84838fd1498Szrj   annot_expr_ivdep_kind,
84938fd1498Szrj   annot_expr_unroll_kind,
85038fd1498Szrj   annot_expr_no_vector_kind,
85138fd1498Szrj   annot_expr_vector_kind,
85238fd1498Szrj   annot_expr_parallel_kind,
85338fd1498Szrj   annot_expr_kind_last
85438fd1498Szrj };
85538fd1498Szrj 
85638fd1498Szrj /*---------------------------------------------------------------------------
85738fd1498Szrj                                 Type definitions
85838fd1498Szrj ---------------------------------------------------------------------------*/
85938fd1498Szrj /* When processing aliases at the symbol table level, we need the
86038fd1498Szrj    declaration of target. For this reason we need to queue aliases and
86138fd1498Szrj    process them after all declarations has been produced.  */
86238fd1498Szrj struct GTY(()) alias_pair {
86338fd1498Szrj   tree decl;
86438fd1498Szrj   tree target;
86538fd1498Szrj };
86638fd1498Szrj 
86738fd1498Szrj /* An initialization priority.  */
86838fd1498Szrj typedef unsigned short priority_type;
86938fd1498Szrj 
87038fd1498Szrj /* The type of a callback function for walking over tree structure.  */
87138fd1498Szrj typedef tree (*walk_tree_fn) (tree *, int *, void *);
87238fd1498Szrj 
87338fd1498Szrj /* The type of a callback function that represents a custom walk_tree.  */
87438fd1498Szrj typedef tree (*walk_tree_lh) (tree *, int *, tree (*) (tree *, int *, void *),
87538fd1498Szrj 			      void *, hash_set<tree> *);
87638fd1498Szrj 
87738fd1498Szrj 
87838fd1498Szrj /*---------------------------------------------------------------------------
87938fd1498Szrj                               Main data structures
88038fd1498Szrj ---------------------------------------------------------------------------*/
88138fd1498Szrj /* A tree node can represent a data type, a variable, an expression
88238fd1498Szrj    or a statement.  Each node has a TREE_CODE which says what kind of
88338fd1498Szrj    thing it represents.  Some common codes are:
88438fd1498Szrj    INTEGER_TYPE -- represents a type of integers.
88538fd1498Szrj    ARRAY_TYPE -- represents a type of pointer.
88638fd1498Szrj    VAR_DECL -- represents a declared variable.
88738fd1498Szrj    INTEGER_CST -- represents a constant integer value.
88838fd1498Szrj    PLUS_EXPR -- represents a sum (an expression).
88938fd1498Szrj 
89038fd1498Szrj    As for the contents of a tree node: there are some fields
89138fd1498Szrj    that all nodes share.  Each TREE_CODE has various special-purpose
89238fd1498Szrj    fields as well.  The fields of a node are never accessed directly,
89338fd1498Szrj    always through accessor macros.  */
89438fd1498Szrj 
89538fd1498Szrj /* Every kind of tree node starts with this structure,
89638fd1498Szrj    so all nodes have these fields.
89738fd1498Szrj 
89838fd1498Szrj    See the accessor macros, defined below, for documentation of the
89938fd1498Szrj    fields, and the table below which connects the fields and the
90038fd1498Szrj    accessor macros.  */
90138fd1498Szrj 
90238fd1498Szrj struct GTY(()) tree_base {
90338fd1498Szrj   ENUM_BITFIELD(tree_code) code : 16;
90438fd1498Szrj 
90538fd1498Szrj   unsigned side_effects_flag : 1;
90638fd1498Szrj   unsigned constant_flag : 1;
90738fd1498Szrj   unsigned addressable_flag : 1;
90838fd1498Szrj   unsigned volatile_flag : 1;
90938fd1498Szrj   unsigned readonly_flag : 1;
91038fd1498Szrj   unsigned asm_written_flag: 1;
91138fd1498Szrj   unsigned nowarning_flag : 1;
91238fd1498Szrj   unsigned visited : 1;
91338fd1498Szrj 
91438fd1498Szrj   unsigned used_flag : 1;
91538fd1498Szrj   unsigned nothrow_flag : 1;
91638fd1498Szrj   unsigned static_flag : 1;
91738fd1498Szrj   unsigned public_flag : 1;
91838fd1498Szrj   unsigned private_flag : 1;
91938fd1498Szrj   unsigned protected_flag : 1;
92038fd1498Szrj   unsigned deprecated_flag : 1;
92138fd1498Szrj   unsigned default_def_flag : 1;
92238fd1498Szrj 
92338fd1498Szrj   union {
92438fd1498Szrj     /* The bits in the following structure should only be used with
92538fd1498Szrj        accessor macros that constrain inputs with tree checking.  */
92638fd1498Szrj     struct {
92738fd1498Szrj       unsigned lang_flag_0 : 1;
92838fd1498Szrj       unsigned lang_flag_1 : 1;
92938fd1498Szrj       unsigned lang_flag_2 : 1;
93038fd1498Szrj       unsigned lang_flag_3 : 1;
93138fd1498Szrj       unsigned lang_flag_4 : 1;
93238fd1498Szrj       unsigned lang_flag_5 : 1;
93338fd1498Szrj       unsigned lang_flag_6 : 1;
93438fd1498Szrj       unsigned saturating_flag : 1;
93538fd1498Szrj 
93638fd1498Szrj       unsigned unsigned_flag : 1;
93738fd1498Szrj       unsigned packed_flag : 1;
93838fd1498Szrj       unsigned user_align : 1;
93938fd1498Szrj       unsigned nameless_flag : 1;
94038fd1498Szrj       unsigned atomic_flag : 1;
94138fd1498Szrj       unsigned spare0 : 3;
94238fd1498Szrj 
94338fd1498Szrj       unsigned spare1 : 8;
94438fd1498Szrj 
94538fd1498Szrj       /* This field is only used with TREE_TYPE nodes; the only reason it is
94638fd1498Szrj 	 present in tree_base instead of tree_type is to save space.  The size
94738fd1498Szrj 	 of the field must be large enough to hold addr_space_t values.  */
94838fd1498Szrj       unsigned address_space : 8;
94938fd1498Szrj     } bits;
95038fd1498Szrj 
95138fd1498Szrj     /* The following fields are present in tree_base to save space.  The
95238fd1498Szrj        nodes using them do not require any of the flags above and so can
95338fd1498Szrj        make better use of the 4-byte sized word.  */
95438fd1498Szrj 
95538fd1498Szrj     /* The number of HOST_WIDE_INTs in an INTEGER_CST.  */
95638fd1498Szrj     struct {
95738fd1498Szrj       /* The number of HOST_WIDE_INTs if the INTEGER_CST is accessed in
95838fd1498Szrj 	 its native precision.  */
95938fd1498Szrj       unsigned char unextended;
96038fd1498Szrj 
96138fd1498Szrj       /* The number of HOST_WIDE_INTs if the INTEGER_CST is extended to
96238fd1498Szrj 	 wider precisions based on its TYPE_SIGN.  */
96338fd1498Szrj       unsigned char extended;
96438fd1498Szrj 
96538fd1498Szrj       /* The number of HOST_WIDE_INTs if the INTEGER_CST is accessed in
96638fd1498Szrj 	 offset_int precision, with smaller integers being extended
96738fd1498Szrj 	 according to their TYPE_SIGN.  This is equal to one of the two
96838fd1498Szrj 	 fields above but is cached for speed.  */
96938fd1498Szrj       unsigned char offset;
97038fd1498Szrj     } int_length;
97138fd1498Szrj 
97238fd1498Szrj     /* VEC length.  This field is only used with TREE_VEC.  */
97338fd1498Szrj     int length;
97438fd1498Szrj 
97538fd1498Szrj     /* This field is only used with VECTOR_CST.  */
97638fd1498Szrj     struct {
97738fd1498Szrj       /* The value of VECTOR_CST_LOG2_NPATTERNS.  */
97838fd1498Szrj       unsigned int log2_npatterns : 8;
97938fd1498Szrj 
98038fd1498Szrj       /* The value of VECTOR_CST_NELTS_PER_PATTERN.  */
98138fd1498Szrj       unsigned int nelts_per_pattern : 8;
98238fd1498Szrj 
98338fd1498Szrj       /* For future expansion.  */
98438fd1498Szrj       unsigned int unused : 16;
98538fd1498Szrj     } vector_cst;
98638fd1498Szrj 
98738fd1498Szrj     /* SSA version number.  This field is only used with SSA_NAME.  */
98838fd1498Szrj     unsigned int version;
98938fd1498Szrj 
99038fd1498Szrj     /* CHREC_VARIABLE.  This field is only used with POLYNOMIAL_CHREC.  */
99138fd1498Szrj     unsigned int chrec_var;
99238fd1498Szrj 
99338fd1498Szrj     /* Internal function code.  */
99438fd1498Szrj     enum internal_fn ifn;
99538fd1498Szrj 
99638fd1498Szrj     /* The following two fields are used for MEM_REF and TARGET_MEM_REF
99738fd1498Szrj        expression trees and specify known data non-dependences.  For
99838fd1498Szrj        two memory references in a function they are known to not
99938fd1498Szrj        alias if dependence_info.clique are equal and dependence_info.base
100038fd1498Szrj        are distinct.  */
100138fd1498Szrj     struct {
100238fd1498Szrj       unsigned short clique;
100338fd1498Szrj       unsigned short base;
100438fd1498Szrj     } dependence_info;
100538fd1498Szrj   } GTY((skip(""))) u;
100638fd1498Szrj };
100738fd1498Szrj 
100838fd1498Szrj /* The following table lists the uses of each of the above flags and
100938fd1498Szrj    for which types of nodes they are defined.
101038fd1498Szrj 
101138fd1498Szrj    addressable_flag:
101238fd1498Szrj 
101338fd1498Szrj        TREE_ADDRESSABLE in
101438fd1498Szrj            VAR_DECL, PARM_DECL, RESULT_DECL, FUNCTION_DECL, LABEL_DECL
101538fd1498Szrj            SSA_NAME
101638fd1498Szrj            all types
101738fd1498Szrj            CONSTRUCTOR, IDENTIFIER_NODE
101838fd1498Szrj            STMT_EXPR
101938fd1498Szrj 
102038fd1498Szrj        CALL_EXPR_TAILCALL in
102138fd1498Szrj            CALL_EXPR
102238fd1498Szrj 
102338fd1498Szrj        CASE_LOW_SEEN in
102438fd1498Szrj            CASE_LABEL_EXPR
102538fd1498Szrj 
102638fd1498Szrj        PREDICT_EXPR_OUTCOME in
102738fd1498Szrj 	   PREDICT_EXPR
102838fd1498Szrj 
102938fd1498Szrj    static_flag:
103038fd1498Szrj 
103138fd1498Szrj        TREE_STATIC in
103238fd1498Szrj            VAR_DECL, FUNCTION_DECL
103338fd1498Szrj            CONSTRUCTOR
103438fd1498Szrj 
103538fd1498Szrj        TREE_NO_TRAMPOLINE in
103638fd1498Szrj            ADDR_EXPR
103738fd1498Szrj 
103838fd1498Szrj        BINFO_VIRTUAL_P in
103938fd1498Szrj            TREE_BINFO
104038fd1498Szrj 
104138fd1498Szrj        TREE_SYMBOL_REFERENCED in
104238fd1498Szrj            IDENTIFIER_NODE
104338fd1498Szrj 
104438fd1498Szrj        CLEANUP_EH_ONLY in
104538fd1498Szrj            TARGET_EXPR, WITH_CLEANUP_EXPR
104638fd1498Szrj 
104738fd1498Szrj        TRY_CATCH_IS_CLEANUP in
104838fd1498Szrj            TRY_CATCH_EXPR
104938fd1498Szrj 
105038fd1498Szrj        ASM_INPUT_P in
105138fd1498Szrj            ASM_EXPR
105238fd1498Szrj 
105338fd1498Szrj        TYPE_REF_CAN_ALIAS_ALL in
105438fd1498Szrj            POINTER_TYPE, REFERENCE_TYPE
105538fd1498Szrj 
105638fd1498Szrj        CASE_HIGH_SEEN in
105738fd1498Szrj            CASE_LABEL_EXPR
105838fd1498Szrj 
105938fd1498Szrj        ENUM_IS_SCOPED in
106038fd1498Szrj 	   ENUMERAL_TYPE
106138fd1498Szrj 
106238fd1498Szrj        TRANSACTION_EXPR_OUTER in
106338fd1498Szrj 	   TRANSACTION_EXPR
106438fd1498Szrj 
106538fd1498Szrj        SSA_NAME_ANTI_RANGE_P in
106638fd1498Szrj 	   SSA_NAME
106738fd1498Szrj 
106838fd1498Szrj        MUST_TAIL_CALL in
106938fd1498Szrj 	   CALL_EXPR
107038fd1498Szrj 
107138fd1498Szrj    public_flag:
107238fd1498Szrj 
107338fd1498Szrj        TREE_OVERFLOW in
107438fd1498Szrj            INTEGER_CST, REAL_CST, COMPLEX_CST, VECTOR_CST
107538fd1498Szrj 
107638fd1498Szrj        TREE_PUBLIC in
107738fd1498Szrj            VAR_DECL, FUNCTION_DECL
107838fd1498Szrj            IDENTIFIER_NODE
107938fd1498Szrj 
108038fd1498Szrj        CONSTRUCTOR_NO_CLEARING in
108138fd1498Szrj            CONSTRUCTOR
108238fd1498Szrj 
108338fd1498Szrj        ASM_VOLATILE_P in
108438fd1498Szrj            ASM_EXPR
108538fd1498Szrj 
108638fd1498Szrj        CALL_EXPR_VA_ARG_PACK in
108738fd1498Szrj            CALL_EXPR
108838fd1498Szrj 
108938fd1498Szrj        TYPE_CACHED_VALUES_P in
109038fd1498Szrj            all types
109138fd1498Szrj 
109238fd1498Szrj        SAVE_EXPR_RESOLVED_P in
109338fd1498Szrj            SAVE_EXPR
109438fd1498Szrj 
109538fd1498Szrj        OMP_CLAUSE_LASTPRIVATE_FIRSTPRIVATE in
109638fd1498Szrj            OMP_CLAUSE_LASTPRIVATE
109738fd1498Szrj 
109838fd1498Szrj        OMP_CLAUSE_PRIVATE_DEBUG in
109938fd1498Szrj            OMP_CLAUSE_PRIVATE
110038fd1498Szrj 
110138fd1498Szrj        OMP_CLAUSE_LINEAR_NO_COPYIN in
110238fd1498Szrj 	   OMP_CLAUSE_LINEAR
110338fd1498Szrj 
110438fd1498Szrj        OMP_CLAUSE_MAP_ZERO_BIAS_ARRAY_SECTION in
110538fd1498Szrj 	   OMP_CLAUSE_MAP
110638fd1498Szrj 
110738fd1498Szrj        OMP_CLAUSE_REDUCTION_OMP_ORIG_REF in
110838fd1498Szrj 	   OMP_CLAUSE_REDUCTION
110938fd1498Szrj 
111038fd1498Szrj        TRANSACTION_EXPR_RELAXED in
111138fd1498Szrj 	   TRANSACTION_EXPR
111238fd1498Szrj 
111338fd1498Szrj        FALLTHROUGH_LABEL_P in
111438fd1498Szrj 	   LABEL_DECL
111538fd1498Szrj 
111638fd1498Szrj        SSA_NAME_IS_VIRTUAL_OPERAND in
111738fd1498Szrj 	   SSA_NAME
111838fd1498Szrj 
111938fd1498Szrj        EXPR_LOCATION_WRAPPER_P in
112038fd1498Szrj 	   NON_LVALUE_EXPR, VIEW_CONVERT_EXPR
112138fd1498Szrj 
112238fd1498Szrj    private_flag:
112338fd1498Szrj 
112438fd1498Szrj        TREE_PRIVATE in
112538fd1498Szrj            all decls
112638fd1498Szrj 
112738fd1498Szrj        CALL_EXPR_RETURN_SLOT_OPT in
112838fd1498Szrj            CALL_EXPR
112938fd1498Szrj 
113038fd1498Szrj        OMP_SECTION_LAST in
113138fd1498Szrj            OMP_SECTION
113238fd1498Szrj 
113338fd1498Szrj        OMP_PARALLEL_COMBINED in
113438fd1498Szrj            OMP_PARALLEL
113538fd1498Szrj 
113638fd1498Szrj        OMP_ATOMIC_SEQ_CST in
113738fd1498Szrj 	   OMP_ATOMIC*
113838fd1498Szrj 
113938fd1498Szrj        OMP_CLAUSE_PRIVATE_OUTER_REF in
114038fd1498Szrj 	   OMP_CLAUSE_PRIVATE
114138fd1498Szrj 
114238fd1498Szrj        OMP_CLAUSE_LINEAR_NO_COPYOUT in
114338fd1498Szrj 	   OMP_CLAUSE_LINEAR
114438fd1498Szrj 
114538fd1498Szrj        TYPE_REF_IS_RVALUE in
114638fd1498Szrj 	   REFERENCE_TYPE
114738fd1498Szrj 
114838fd1498Szrj        ENUM_IS_OPAQUE in
114938fd1498Szrj 	   ENUMERAL_TYPE
115038fd1498Szrj 
115138fd1498Szrj    protected_flag:
115238fd1498Szrj 
115338fd1498Szrj        TREE_PROTECTED in
115438fd1498Szrj            BLOCK
115538fd1498Szrj            all decls
115638fd1498Szrj 
115738fd1498Szrj        CALL_FROM_THUNK_P and
115838fd1498Szrj        CALL_ALLOCA_FOR_VAR_P in
115938fd1498Szrj            CALL_EXPR
116038fd1498Szrj 
116138fd1498Szrj        OMP_CLAUSE_LINEAR_VARIABLE_STRIDE in
116238fd1498Szrj 	   OMP_CLAUSE_LINEAR
116338fd1498Szrj 
1164*58e805e6Szrj        ASM_INLINE_P in
1165*58e805e6Szrj 	   ASM_EXPR
1166*58e805e6Szrj 
116738fd1498Szrj    side_effects_flag:
116838fd1498Szrj 
116938fd1498Szrj        TREE_SIDE_EFFECTS in
117038fd1498Szrj            all expressions
117138fd1498Szrj            all decls
117238fd1498Szrj            all constants
117338fd1498Szrj 
117438fd1498Szrj        FORCED_LABEL in
117538fd1498Szrj            LABEL_DECL
117638fd1498Szrj 
117738fd1498Szrj    volatile_flag:
117838fd1498Szrj 
117938fd1498Szrj        TREE_THIS_VOLATILE in
118038fd1498Szrj            all expressions
118138fd1498Szrj            all decls
118238fd1498Szrj 
118338fd1498Szrj        TYPE_VOLATILE in
118438fd1498Szrj            all types
118538fd1498Szrj 
118638fd1498Szrj    readonly_flag:
118738fd1498Szrj 
118838fd1498Szrj        TREE_READONLY in
118938fd1498Szrj            all expressions
119038fd1498Szrj            all decls
119138fd1498Szrj 
119238fd1498Szrj        TYPE_READONLY in
119338fd1498Szrj            all types
119438fd1498Szrj 
119538fd1498Szrj    constant_flag:
119638fd1498Szrj 
119738fd1498Szrj        TREE_CONSTANT in
119838fd1498Szrj            all expressions
119938fd1498Szrj            all decls
120038fd1498Szrj            all constants
120138fd1498Szrj 
120238fd1498Szrj        TYPE_SIZES_GIMPLIFIED in
120338fd1498Szrj            all types
120438fd1498Szrj 
120538fd1498Szrj    unsigned_flag:
120638fd1498Szrj 
120738fd1498Szrj        TYPE_UNSIGNED in
120838fd1498Szrj            all types
120938fd1498Szrj 
121038fd1498Szrj        DECL_UNSIGNED in
121138fd1498Szrj            all decls
121238fd1498Szrj 
121338fd1498Szrj    asm_written_flag:
121438fd1498Szrj 
121538fd1498Szrj        TREE_ASM_WRITTEN in
121638fd1498Szrj            VAR_DECL, FUNCTION_DECL, TYPE_DECL
121738fd1498Szrj            RECORD_TYPE, UNION_TYPE, QUAL_UNION_TYPE
121838fd1498Szrj            BLOCK, STRING_CST
121938fd1498Szrj 
122038fd1498Szrj        SSA_NAME_OCCURS_IN_ABNORMAL_PHI in
122138fd1498Szrj            SSA_NAME
122238fd1498Szrj 
122338fd1498Szrj    used_flag:
122438fd1498Szrj 
122538fd1498Szrj        TREE_USED in
122638fd1498Szrj            all expressions
122738fd1498Szrj            all decls
122838fd1498Szrj            IDENTIFIER_NODE
122938fd1498Szrj 
123038fd1498Szrj    nothrow_flag:
123138fd1498Szrj 
123238fd1498Szrj        TREE_NOTHROW in
123338fd1498Szrj            CALL_EXPR
123438fd1498Szrj            FUNCTION_DECL
123538fd1498Szrj 
123638fd1498Szrj        TREE_THIS_NOTRAP in
123738fd1498Szrj           INDIRECT_REF, MEM_REF, TARGET_MEM_REF, ARRAY_REF, ARRAY_RANGE_REF
123838fd1498Szrj 
123938fd1498Szrj        SSA_NAME_IN_FREE_LIST in
124038fd1498Szrj           SSA_NAME
124138fd1498Szrj 
124238fd1498Szrj        DECL_NONALIASED in
124338fd1498Szrj 	  VAR_DECL
124438fd1498Szrj 
124538fd1498Szrj    deprecated_flag:
124638fd1498Szrj 
124738fd1498Szrj        TREE_DEPRECATED in
124838fd1498Szrj            all decls
124938fd1498Szrj 	   all types
125038fd1498Szrj 
125138fd1498Szrj        IDENTIFIER_TRANSPARENT_ALIAS in
125238fd1498Szrj            IDENTIFIER_NODE
125338fd1498Szrj 
125438fd1498Szrj    visited:
125538fd1498Szrj 
125638fd1498Szrj        TREE_VISITED in
125738fd1498Szrj            all trees (used liberally by many passes)
125838fd1498Szrj 
125938fd1498Szrj    saturating_flag:
126038fd1498Szrj 
126138fd1498Szrj        TYPE_REVERSE_STORAGE_ORDER in
126238fd1498Szrj            RECORD_TYPE, UNION_TYPE, QUAL_UNION_TYPE, ARRAY_TYPE
126338fd1498Szrj 
126438fd1498Szrj        TYPE_SATURATING in
126538fd1498Szrj            other types
126638fd1498Szrj 
126738fd1498Szrj        VAR_DECL_IS_VIRTUAL_OPERAND in
126838fd1498Szrj 	   VAR_DECL
126938fd1498Szrj 
127038fd1498Szrj    nowarning_flag:
127138fd1498Szrj 
127238fd1498Szrj        TREE_NO_WARNING in
127338fd1498Szrj            all expressions
127438fd1498Szrj            all decls
127538fd1498Szrj 
127638fd1498Szrj        TYPE_ARTIFICIAL in
127738fd1498Szrj            all types
127838fd1498Szrj 
127938fd1498Szrj    default_def_flag:
128038fd1498Szrj 
128138fd1498Szrj        TYPE_FINAL_P in
128238fd1498Szrj 	   RECORD_TYPE, UNION_TYPE and QUAL_UNION_TYPE
128338fd1498Szrj 
128438fd1498Szrj        TYPE_VECTOR_OPAQUE in
128538fd1498Szrj 	   VECTOR_TYPE
128638fd1498Szrj 
128738fd1498Szrj        SSA_NAME_IS_DEFAULT_DEF in
128838fd1498Szrj            SSA_NAME
128938fd1498Szrj 
129038fd1498Szrj        DECL_NONLOCAL_FRAME in
129138fd1498Szrj 	   VAR_DECL
129238fd1498Szrj 
129338fd1498Szrj        REF_REVERSE_STORAGE_ORDER in
129438fd1498Szrj            BIT_FIELD_REF, MEM_REF
129538fd1498Szrj 
129638fd1498Szrj        FUNC_ADDR_BY_DESCRIPTOR in
129738fd1498Szrj            ADDR_EXPR
129838fd1498Szrj 
129938fd1498Szrj        CALL_EXPR_BY_DESCRIPTOR in
130038fd1498Szrj            CALL_EXPR
130138fd1498Szrj */
130238fd1498Szrj 
130338fd1498Szrj struct GTY(()) tree_typed {
130438fd1498Szrj   struct tree_base base;
130538fd1498Szrj   tree type;
130638fd1498Szrj };
130738fd1498Szrj 
130838fd1498Szrj struct GTY(()) tree_common {
130938fd1498Szrj   struct tree_typed typed;
131038fd1498Szrj   tree chain;
131138fd1498Szrj };
131238fd1498Szrj 
131338fd1498Szrj struct GTY(()) tree_int_cst {
131438fd1498Szrj   struct tree_typed typed;
131538fd1498Szrj   HOST_WIDE_INT val[1];
131638fd1498Szrj };
131738fd1498Szrj 
131838fd1498Szrj 
131938fd1498Szrj struct GTY(()) tree_real_cst {
132038fd1498Szrj   struct tree_typed typed;
132138fd1498Szrj   struct real_value * real_cst_ptr;
132238fd1498Szrj };
132338fd1498Szrj 
132438fd1498Szrj struct GTY(()) tree_fixed_cst {
132538fd1498Szrj   struct tree_typed typed;
132638fd1498Szrj   struct fixed_value * fixed_cst_ptr;
132738fd1498Szrj };
132838fd1498Szrj 
132938fd1498Szrj struct GTY(()) tree_string {
133038fd1498Szrj   struct tree_typed typed;
133138fd1498Szrj   int length;
133238fd1498Szrj   char str[1];
133338fd1498Szrj };
133438fd1498Szrj 
133538fd1498Szrj struct GTY(()) tree_complex {
133638fd1498Szrj   struct tree_typed typed;
133738fd1498Szrj   tree real;
133838fd1498Szrj   tree imag;
133938fd1498Szrj };
134038fd1498Szrj 
134138fd1498Szrj struct GTY(()) tree_vector {
134238fd1498Szrj   struct tree_typed typed;
134338fd1498Szrj   tree GTY ((length ("vector_cst_encoded_nelts ((tree) &%h)"))) elts[1];
134438fd1498Szrj };
134538fd1498Szrj 
134638fd1498Szrj struct GTY(()) tree_poly_int_cst {
134738fd1498Szrj   struct tree_typed typed;
134838fd1498Szrj   tree coeffs[NUM_POLY_INT_COEFFS];
134938fd1498Szrj };
135038fd1498Szrj 
135138fd1498Szrj struct GTY(()) tree_identifier {
135238fd1498Szrj   struct tree_common common;
135338fd1498Szrj   struct ht_identifier id;
135438fd1498Szrj };
135538fd1498Szrj 
135638fd1498Szrj struct GTY(()) tree_list {
135738fd1498Szrj   struct tree_common common;
135838fd1498Szrj   tree purpose;
135938fd1498Szrj   tree value;
136038fd1498Szrj };
136138fd1498Szrj 
136238fd1498Szrj struct GTY(()) tree_vec {
136338fd1498Szrj   struct tree_common common;
136438fd1498Szrj   tree GTY ((length ("TREE_VEC_LENGTH ((tree)&%h)"))) a[1];
136538fd1498Szrj };
136638fd1498Szrj 
136738fd1498Szrj /* A single element of a CONSTRUCTOR. VALUE holds the actual value of the
136838fd1498Szrj    element. INDEX can optionally design the position of VALUE: in arrays,
136938fd1498Szrj    it is the index where VALUE has to be placed; in structures, it is the
137038fd1498Szrj    FIELD_DECL of the member.  */
137138fd1498Szrj struct GTY(()) constructor_elt {
137238fd1498Szrj   tree index;
137338fd1498Szrj   tree value;
137438fd1498Szrj };
137538fd1498Szrj 
137638fd1498Szrj struct GTY(()) tree_constructor {
137738fd1498Szrj   struct tree_typed typed;
137838fd1498Szrj   vec<constructor_elt, va_gc> *elts;
137938fd1498Szrj };
138038fd1498Szrj 
138138fd1498Szrj enum omp_clause_depend_kind
138238fd1498Szrj {
138338fd1498Szrj   OMP_CLAUSE_DEPEND_IN,
138438fd1498Szrj   OMP_CLAUSE_DEPEND_OUT,
138538fd1498Szrj   OMP_CLAUSE_DEPEND_INOUT,
138638fd1498Szrj   OMP_CLAUSE_DEPEND_SOURCE,
138738fd1498Szrj   OMP_CLAUSE_DEPEND_SINK,
138838fd1498Szrj   OMP_CLAUSE_DEPEND_LAST
138938fd1498Szrj };
139038fd1498Szrj 
139138fd1498Szrj enum omp_clause_proc_bind_kind
139238fd1498Szrj {
139338fd1498Szrj   /* Numbers should match omp_proc_bind_t enum in omp.h.  */
139438fd1498Szrj   OMP_CLAUSE_PROC_BIND_FALSE = 0,
139538fd1498Szrj   OMP_CLAUSE_PROC_BIND_TRUE = 1,
139638fd1498Szrj   OMP_CLAUSE_PROC_BIND_MASTER = 2,
139738fd1498Szrj   OMP_CLAUSE_PROC_BIND_CLOSE = 3,
139838fd1498Szrj   OMP_CLAUSE_PROC_BIND_SPREAD = 4,
139938fd1498Szrj   OMP_CLAUSE_PROC_BIND_LAST
140038fd1498Szrj };
140138fd1498Szrj 
140238fd1498Szrj enum omp_clause_linear_kind
140338fd1498Szrj {
140438fd1498Szrj   OMP_CLAUSE_LINEAR_DEFAULT,
140538fd1498Szrj   OMP_CLAUSE_LINEAR_REF,
140638fd1498Szrj   OMP_CLAUSE_LINEAR_VAL,
140738fd1498Szrj   OMP_CLAUSE_LINEAR_UVAL
140838fd1498Szrj };
140938fd1498Szrj 
141038fd1498Szrj struct GTY(()) tree_exp {
141138fd1498Szrj   struct tree_typed typed;
141238fd1498Szrj   location_t locus;
141338fd1498Szrj   tree GTY ((special ("tree_exp"),
141438fd1498Szrj 	     desc ("TREE_CODE ((tree) &%0)")))
141538fd1498Szrj     operands[1];
141638fd1498Szrj };
141738fd1498Szrj 
141838fd1498Szrj /* Immediate use linking structure.  This structure is used for maintaining
141938fd1498Szrj    a doubly linked list of uses of an SSA_NAME.  */
142038fd1498Szrj struct GTY(()) ssa_use_operand_t {
142138fd1498Szrj   struct ssa_use_operand_t* GTY((skip(""))) prev;
142238fd1498Szrj   struct ssa_use_operand_t* GTY((skip(""))) next;
142338fd1498Szrj   /* Immediate uses for a given SSA name are maintained as a cyclic
142438fd1498Szrj      list.  To recognize the root of this list, the location field
142538fd1498Szrj      needs to point to the original SSA name.  Since statements and
142638fd1498Szrj      SSA names are of different data types, we need this union.  See
142738fd1498Szrj      the explanation in struct imm_use_iterator.  */
142838fd1498Szrj   union { gimple *stmt; tree ssa_name; } GTY((skip(""))) loc;
142938fd1498Szrj   tree *GTY((skip(""))) use;
143038fd1498Szrj };
143138fd1498Szrj 
143238fd1498Szrj struct GTY(()) tree_ssa_name {
143338fd1498Szrj   struct tree_typed typed;
143438fd1498Szrj 
143538fd1498Szrj   /* _DECL wrapped by this SSA name.  */
143638fd1498Szrj   tree var;
143738fd1498Szrj 
143838fd1498Szrj   /* Statement that defines this SSA name.  */
143938fd1498Szrj   gimple *def_stmt;
144038fd1498Szrj 
144138fd1498Szrj   /* Value range information.  */
144238fd1498Szrj   union ssa_name_info_type {
144338fd1498Szrj     /* Pointer attributes used for alias analysis.  */
144438fd1498Szrj     struct GTY ((tag ("0"))) ptr_info_def *ptr_info;
144538fd1498Szrj     /* Value range attributes used for zero/sign extension elimination.  */
144638fd1498Szrj     struct GTY ((tag ("1"))) range_info_def *range_info;
144738fd1498Szrj   } GTY ((desc ("%1.typed.type ?" \
144838fd1498Szrj 		"!POINTER_TYPE_P (TREE_TYPE ((tree)&%1)) : 2"))) info;
144938fd1498Szrj 
145038fd1498Szrj   /* Immediate uses list for this SSA_NAME.  */
145138fd1498Szrj   struct ssa_use_operand_t imm_uses;
145238fd1498Szrj };
145338fd1498Szrj 
145438fd1498Szrj struct GTY(()) phi_arg_d {
145538fd1498Szrj   /* imm_use MUST be the first element in struct because we do some
145638fd1498Szrj      pointer arithmetic with it.  See phi_arg_index_from_use.  */
145738fd1498Szrj   struct ssa_use_operand_t imm_use;
145838fd1498Szrj   tree def;
145938fd1498Szrj   location_t locus;
146038fd1498Szrj };
146138fd1498Szrj 
146238fd1498Szrj struct GTY(()) tree_omp_clause {
146338fd1498Szrj   struct tree_common common;
146438fd1498Szrj   location_t locus;
146538fd1498Szrj   enum omp_clause_code code;
146638fd1498Szrj   union omp_clause_subcode {
146738fd1498Szrj     enum omp_clause_default_kind   default_kind;
146838fd1498Szrj     enum omp_clause_schedule_kind  schedule_kind;
146938fd1498Szrj     enum omp_clause_depend_kind    depend_kind;
147038fd1498Szrj     /* See include/gomp-constants.h for enum gomp_map_kind's values.  */
147138fd1498Szrj     unsigned int		   map_kind;
147238fd1498Szrj     enum omp_clause_proc_bind_kind proc_bind_kind;
147338fd1498Szrj     enum tree_code                 reduction_code;
147438fd1498Szrj     enum omp_clause_linear_kind    linear_kind;
147538fd1498Szrj     enum tree_code                 if_modifier;
147638fd1498Szrj     /* The dimension a OMP_CLAUSE__GRIDDIM_ clause of a gridified target
147738fd1498Szrj        construct describes.  */
147838fd1498Szrj     unsigned int		   dimension;
147938fd1498Szrj   } GTY ((skip)) subcode;
148038fd1498Szrj 
148138fd1498Szrj   /* The gimplification of OMP_CLAUSE_REDUCTION_{INIT,MERGE} for omp-low's
148238fd1498Szrj      usage.  */
148338fd1498Szrj   gimple_seq gimple_reduction_init;
148438fd1498Szrj   gimple_seq gimple_reduction_merge;
148538fd1498Szrj 
148638fd1498Szrj   tree GTY ((length ("omp_clause_num_ops[OMP_CLAUSE_CODE ((tree)&%h)]")))
148738fd1498Szrj     ops[1];
148838fd1498Szrj };
148938fd1498Szrj 
149038fd1498Szrj struct GTY(()) tree_block {
149138fd1498Szrj   struct tree_base base;
149238fd1498Szrj   tree chain;
149338fd1498Szrj 
149438fd1498Szrj   unsigned abstract_flag : 1;
149538fd1498Szrj   unsigned block_num : 31;
149638fd1498Szrj 
149738fd1498Szrj   location_t locus;
149838fd1498Szrj   location_t end_locus;
149938fd1498Szrj 
150038fd1498Szrj   tree vars;
150138fd1498Szrj   vec<tree, va_gc> *nonlocalized_vars;
150238fd1498Szrj 
150338fd1498Szrj   tree subblocks;
150438fd1498Szrj   tree supercontext;
150538fd1498Szrj   tree abstract_origin;
150638fd1498Szrj   tree fragment_origin;
150738fd1498Szrj   tree fragment_chain;
150838fd1498Szrj 
150938fd1498Szrj   /* Pointer to the DWARF lexical block.  */
151038fd1498Szrj   struct die_struct *die;
151138fd1498Szrj };
151238fd1498Szrj 
151338fd1498Szrj struct GTY(()) tree_type_common {
151438fd1498Szrj   struct tree_common common;
151538fd1498Szrj   tree size;
151638fd1498Szrj   tree size_unit;
151738fd1498Szrj   tree attributes;
151838fd1498Szrj   unsigned int uid;
151938fd1498Szrj 
152038fd1498Szrj   unsigned int precision : 10;
152138fd1498Szrj   unsigned no_force_blk_flag : 1;
152238fd1498Szrj   unsigned needs_constructing_flag : 1;
152338fd1498Szrj   unsigned transparent_aggr_flag : 1;
152438fd1498Szrj   unsigned restrict_flag : 1;
152538fd1498Szrj   unsigned contains_placeholder_bits : 2;
152638fd1498Szrj 
152738fd1498Szrj   ENUM_BITFIELD(machine_mode) mode : 8;
152838fd1498Szrj 
152938fd1498Szrj   unsigned string_flag : 1;
153038fd1498Szrj   unsigned lang_flag_0 : 1;
153138fd1498Szrj   unsigned lang_flag_1 : 1;
153238fd1498Szrj   unsigned lang_flag_2 : 1;
153338fd1498Szrj   unsigned lang_flag_3 : 1;
153438fd1498Szrj   unsigned lang_flag_4 : 1;
153538fd1498Szrj   unsigned lang_flag_5 : 1;
153638fd1498Szrj   unsigned lang_flag_6 : 1;
153738fd1498Szrj   unsigned lang_flag_7 : 1;
153838fd1498Szrj 
153938fd1498Szrj   /* TYPE_ALIGN in log2; this has to be large enough to hold values
154038fd1498Szrj      of the maximum of BIGGEST_ALIGNMENT and MAX_OFILE_ALIGNMENT,
154138fd1498Szrj      the latter being usually the larger.  For ELF it is 8<<28,
154238fd1498Szrj      so we need to store the value 32 (not 31, as we need the zero
154338fd1498Szrj      as well), hence six bits.  */
154438fd1498Szrj   unsigned align : 6;
154538fd1498Szrj   unsigned warn_if_not_align : 6;
154638fd1498Szrj   unsigned typeless_storage : 1;
154738fd1498Szrj   unsigned empty_flag : 1;
154838fd1498Szrj   unsigned spare : 17;
154938fd1498Szrj 
155038fd1498Szrj   alias_set_type alias_set;
155138fd1498Szrj   tree pointer_to;
155238fd1498Szrj   tree reference_to;
155338fd1498Szrj   union tree_type_symtab {
155438fd1498Szrj     int GTY ((tag ("TYPE_SYMTAB_IS_ADDRESS"))) address;
155538fd1498Szrj     struct die_struct * GTY ((tag ("TYPE_SYMTAB_IS_DIE"))) die;
155638fd1498Szrj   } GTY ((desc ("debug_hooks->tree_type_symtab_field"))) symtab;
155738fd1498Szrj   tree canonical;
155838fd1498Szrj   tree next_variant;
155938fd1498Szrj   tree main_variant;
156038fd1498Szrj   tree context;
156138fd1498Szrj   tree name;
156238fd1498Szrj };
156338fd1498Szrj 
156438fd1498Szrj struct GTY(()) tree_type_with_lang_specific {
156538fd1498Szrj   struct tree_type_common common;
156638fd1498Szrj   /* Points to a structure whose details depend on the language in use.  */
156738fd1498Szrj   struct lang_type *lang_specific;
156838fd1498Szrj };
156938fd1498Szrj 
157038fd1498Szrj struct GTY(()) tree_type_non_common {
157138fd1498Szrj   struct tree_type_with_lang_specific with_lang_specific;
157238fd1498Szrj   tree values;
157338fd1498Szrj   tree minval;
157438fd1498Szrj   tree maxval;
157538fd1498Szrj   tree lang_1;
157638fd1498Szrj };
157738fd1498Szrj 
157838fd1498Szrj struct GTY (()) tree_binfo {
157938fd1498Szrj   struct tree_common common;
158038fd1498Szrj 
158138fd1498Szrj   tree offset;
158238fd1498Szrj   tree vtable;
158338fd1498Szrj   tree virtuals;
158438fd1498Szrj   tree vptr_field;
158538fd1498Szrj   vec<tree, va_gc> *base_accesses;
158638fd1498Szrj   tree inheritance;
158738fd1498Szrj 
158838fd1498Szrj   tree vtt_subvtt;
158938fd1498Szrj   tree vtt_vptr;
159038fd1498Szrj 
159138fd1498Szrj   vec<tree, va_gc> base_binfos;
159238fd1498Szrj };
159338fd1498Szrj 
159438fd1498Szrj struct GTY(()) tree_decl_minimal {
159538fd1498Szrj   struct tree_common common;
159638fd1498Szrj   location_t locus;
159738fd1498Szrj   unsigned int uid;
159838fd1498Szrj   tree name;
159938fd1498Szrj   tree context;
160038fd1498Szrj };
160138fd1498Szrj 
160238fd1498Szrj struct GTY(()) tree_decl_common {
160338fd1498Szrj   struct tree_decl_minimal common;
160438fd1498Szrj   tree size;
160538fd1498Szrj 
160638fd1498Szrj   ENUM_BITFIELD(machine_mode) mode : 8;
160738fd1498Szrj 
160838fd1498Szrj   unsigned nonlocal_flag : 1;
160938fd1498Szrj   unsigned virtual_flag : 1;
161038fd1498Szrj   unsigned ignored_flag : 1;
161138fd1498Szrj   unsigned abstract_flag : 1;
161238fd1498Szrj   unsigned artificial_flag : 1;
161338fd1498Szrj   unsigned preserve_flag: 1;
161438fd1498Szrj   unsigned debug_expr_is_from : 1;
161538fd1498Szrj 
161638fd1498Szrj   unsigned lang_flag_0 : 1;
161738fd1498Szrj   unsigned lang_flag_1 : 1;
161838fd1498Szrj   unsigned lang_flag_2 : 1;
161938fd1498Szrj   unsigned lang_flag_3 : 1;
162038fd1498Szrj   unsigned lang_flag_4 : 1;
162138fd1498Szrj   unsigned lang_flag_5 : 1;
162238fd1498Szrj   unsigned lang_flag_6 : 1;
162338fd1498Szrj   unsigned lang_flag_7 : 1;
162438fd1498Szrj   unsigned lang_flag_8 : 1;
162538fd1498Szrj 
162638fd1498Szrj   /* In VAR_DECL and PARM_DECL, this is DECL_REGISTER
162738fd1498Szrj      IN TRANSLATION_UNIT_DECL, this is TRANSLATION_UNIT_WARN_EMPTY_P.  */
162838fd1498Szrj   unsigned decl_flag_0 : 1;
162938fd1498Szrj   /* In FIELD_DECL, this is DECL_BIT_FIELD
163038fd1498Szrj      In VAR_DECL and FUNCTION_DECL, this is DECL_EXTERNAL.
163138fd1498Szrj      In TYPE_DECL, this is TYPE_DECL_SUPPRESS_DEBUG.  */
163238fd1498Szrj   unsigned decl_flag_1 : 1;
163338fd1498Szrj   /* In FIELD_DECL, this is DECL_NONADDRESSABLE_P
163438fd1498Szrj      In VAR_DECL, PARM_DECL and RESULT_DECL, this is
163538fd1498Szrj      DECL_HAS_VALUE_EXPR_P.  */
163638fd1498Szrj   unsigned decl_flag_2 : 1;
163738fd1498Szrj   /* In FIELD_DECL, this is DECL_PADDING_P.  */
163838fd1498Szrj   unsigned decl_flag_3 : 1;
163938fd1498Szrj   /* Logically, these two would go in a theoretical base shared by var and
164038fd1498Szrj      parm decl. */
164138fd1498Szrj   unsigned gimple_reg_flag : 1;
164238fd1498Szrj   /* In VAR_DECL, PARM_DECL and RESULT_DECL, this is DECL_BY_REFERENCE.  */
164338fd1498Szrj   unsigned decl_by_reference_flag : 1;
164438fd1498Szrj   /* In a VAR_DECL and PARM_DECL, this is DECL_READ_P.  */
164538fd1498Szrj   unsigned decl_read_flag : 1;
164638fd1498Szrj   /* In a VAR_DECL or RESULT_DECL, this is DECL_NONSHAREABLE.  */
164738fd1498Szrj   unsigned decl_nonshareable_flag : 1;
164838fd1498Szrj 
164938fd1498Szrj   /* DECL_OFFSET_ALIGN, used only for FIELD_DECLs.  */
165038fd1498Szrj   unsigned int off_align : 6;
165138fd1498Szrj 
165238fd1498Szrj   /* DECL_ALIGN.  It should have the same size as TYPE_ALIGN.  */
165338fd1498Szrj   unsigned int align : 6;
165438fd1498Szrj 
165538fd1498Szrj   /* DECL_WARN_IF_NOT_ALIGN.  It should have the same size as
165638fd1498Szrj      TYPE_WARN_IF_NOT_ALIGN.  */
165738fd1498Szrj   unsigned int warn_if_not_align : 6;
165838fd1498Szrj 
165938fd1498Szrj   /* 14 bits unused.  */
166038fd1498Szrj 
166138fd1498Szrj   /* UID for points-to sets, stable over copying from inlining.  */
166238fd1498Szrj   unsigned int pt_uid;
166338fd1498Szrj 
166438fd1498Szrj   tree size_unit;
166538fd1498Szrj   tree initial;
166638fd1498Szrj   tree attributes;
166738fd1498Szrj   tree abstract_origin;
166838fd1498Szrj 
166938fd1498Szrj   /* Points to a structure whose details depend on the language in use.  */
167038fd1498Szrj   struct lang_decl *lang_specific;
167138fd1498Szrj };
167238fd1498Szrj 
167338fd1498Szrj struct GTY(()) tree_decl_with_rtl {
167438fd1498Szrj   struct tree_decl_common common;
167538fd1498Szrj   rtx rtl;
167638fd1498Szrj };
167738fd1498Szrj 
167838fd1498Szrj struct GTY(()) tree_field_decl {
167938fd1498Szrj   struct tree_decl_common common;
168038fd1498Szrj 
168138fd1498Szrj   tree offset;
168238fd1498Szrj   tree bit_field_type;
168338fd1498Szrj   tree qualifier;
168438fd1498Szrj   tree bit_offset;
168538fd1498Szrj   tree fcontext;
168638fd1498Szrj };
168738fd1498Szrj 
168838fd1498Szrj struct GTY(()) tree_label_decl {
168938fd1498Szrj   struct tree_decl_with_rtl common;
169038fd1498Szrj   int label_decl_uid;
169138fd1498Szrj   int eh_landing_pad_nr;
169238fd1498Szrj };
169338fd1498Szrj 
169438fd1498Szrj struct GTY(()) tree_result_decl {
169538fd1498Szrj   struct tree_decl_with_rtl common;
169638fd1498Szrj };
169738fd1498Szrj 
169838fd1498Szrj struct GTY(()) tree_const_decl {
169938fd1498Szrj   struct tree_decl_common common;
170038fd1498Szrj };
170138fd1498Szrj 
170238fd1498Szrj struct GTY(()) tree_parm_decl {
170338fd1498Szrj   struct tree_decl_with_rtl common;
170438fd1498Szrj   rtx incoming_rtl;
170538fd1498Szrj };
170638fd1498Szrj 
170738fd1498Szrj struct GTY(()) tree_decl_with_vis {
170838fd1498Szrj  struct tree_decl_with_rtl common;
170938fd1498Szrj  tree assembler_name;
171038fd1498Szrj  struct symtab_node *symtab_node;
171138fd1498Szrj 
171238fd1498Szrj  /* Belong to VAR_DECL exclusively.  */
171338fd1498Szrj  unsigned defer_output : 1;
171438fd1498Szrj  unsigned hard_register : 1;
171538fd1498Szrj  unsigned common_flag : 1;
171638fd1498Szrj  unsigned in_text_section : 1;
171738fd1498Szrj  unsigned in_constant_pool : 1;
171838fd1498Szrj  unsigned dllimport_flag : 1;
171938fd1498Szrj  /* Don't belong to VAR_DECL exclusively.  */
172038fd1498Szrj  unsigned weak_flag : 1;
172138fd1498Szrj 
172238fd1498Szrj  unsigned seen_in_bind_expr : 1;
172338fd1498Szrj  unsigned comdat_flag : 1;
172438fd1498Szrj  /* Used for FUNCTION_DECL, VAR_DECL and in C++ for TYPE_DECL.  */
172538fd1498Szrj  ENUM_BITFIELD(symbol_visibility) visibility : 2;
172638fd1498Szrj  unsigned visibility_specified : 1;
172738fd1498Szrj 
172838fd1498Szrj  /* Belong to FUNCTION_DECL exclusively.  */
172938fd1498Szrj  unsigned init_priority_p : 1;
173038fd1498Szrj  /* Used by C++ only.  Might become a generic decl flag.  */
173138fd1498Szrj  unsigned shadowed_for_var_p : 1;
173238fd1498Szrj  /* Belong to FUNCTION_DECL exclusively.  */
173338fd1498Szrj  unsigned cxx_constructor : 1;
173438fd1498Szrj  /* Belong to FUNCTION_DECL exclusively.  */
173538fd1498Szrj  unsigned cxx_destructor : 1;
173638fd1498Szrj  /* Belong to FUNCTION_DECL exclusively.  */
173738fd1498Szrj  unsigned final : 1;
173838fd1498Szrj  /* Belong to FUNCTION_DECL exclusively.  */
173938fd1498Szrj  unsigned regdecl_flag : 1;
174038fd1498Szrj  /* 14 unused bits. */
174138fd1498Szrj };
174238fd1498Szrj 
174338fd1498Szrj struct GTY(()) tree_var_decl {
174438fd1498Szrj   struct tree_decl_with_vis common;
174538fd1498Szrj };
174638fd1498Szrj 
174738fd1498Szrj struct GTY(()) tree_decl_non_common {
174838fd1498Szrj   struct tree_decl_with_vis common;
174938fd1498Szrj   /* Almost all FE's use this.  */
175038fd1498Szrj   tree result;
175138fd1498Szrj };
175238fd1498Szrj 
175338fd1498Szrj /* FUNCTION_DECL inherits from DECL_NON_COMMON because of the use of the
175438fd1498Szrj    arguments/result/saved_tree fields by front ends.   It was either inherit
175538fd1498Szrj    FUNCTION_DECL from non_common, or inherit non_common from FUNCTION_DECL,
175638fd1498Szrj    which seemed a bit strange.  */
175738fd1498Szrj 
175838fd1498Szrj struct GTY(()) tree_function_decl {
175938fd1498Szrj   struct tree_decl_non_common common;
176038fd1498Szrj 
176138fd1498Szrj   struct function *f;
176238fd1498Szrj 
176338fd1498Szrj   /* Arguments of the function.  */
176438fd1498Szrj   tree arguments;
176538fd1498Szrj   /* The personality function. Used for stack unwinding. */
176638fd1498Szrj   tree personality;
176738fd1498Szrj 
176838fd1498Szrj   /* Function specific options that are used by this function.  */
176938fd1498Szrj   tree function_specific_target;	/* target options */
177038fd1498Szrj   tree function_specific_optimization;	/* optimization options */
177138fd1498Szrj 
177238fd1498Szrj   /* Generic function body.  */
177338fd1498Szrj   tree saved_tree;
177438fd1498Szrj   /* Index within a virtual table.  */
177538fd1498Szrj   tree vindex;
177638fd1498Szrj 
177738fd1498Szrj   /* In a FUNCTION_DECL for which DECL_BUILT_IN holds, this is
177838fd1498Szrj      DECL_FUNCTION_CODE.  Otherwise unused.
177938fd1498Szrj      ???  The bitfield needs to be able to hold all target function
178038fd1498Szrj 	  codes as well.  */
178138fd1498Szrj   ENUM_BITFIELD(built_in_function) function_code : 12;
178238fd1498Szrj   ENUM_BITFIELD(built_in_class) built_in_class : 2;
178338fd1498Szrj 
178438fd1498Szrj   unsigned static_ctor_flag : 1;
178538fd1498Szrj   unsigned static_dtor_flag : 1;
178638fd1498Szrj 
178738fd1498Szrj   unsigned uninlinable : 1;
178838fd1498Szrj   unsigned possibly_inlined : 1;
178938fd1498Szrj   unsigned novops_flag : 1;
179038fd1498Szrj   unsigned returns_twice_flag : 1;
179138fd1498Szrj   unsigned malloc_flag : 1;
179238fd1498Szrj   unsigned operator_new_flag : 1;
179338fd1498Szrj   unsigned declared_inline_flag : 1;
179438fd1498Szrj   unsigned no_inline_warning_flag : 1;
179538fd1498Szrj 
179638fd1498Szrj   unsigned no_instrument_function_entry_exit : 1;
179738fd1498Szrj   unsigned no_limit_stack : 1;
179838fd1498Szrj   unsigned disregard_inline_limits : 1;
179938fd1498Szrj   unsigned pure_flag : 1;
180038fd1498Szrj   unsigned looping_const_or_pure_flag : 1;
180138fd1498Szrj   unsigned has_debug_args_flag : 1;
180238fd1498Szrj   unsigned versioned_function : 1;
1803*58e805e6Szrj   unsigned lambda_function: 1;
180438fd1498Szrj   /* No bits left.  */
180538fd1498Szrj };
180638fd1498Szrj 
180738fd1498Szrj struct GTY(()) tree_translation_unit_decl {
180838fd1498Szrj   struct tree_decl_common common;
180938fd1498Szrj   /* Source language of this translation unit.  Used for DWARF output.  */
181038fd1498Szrj   const char * GTY((skip(""))) language;
181138fd1498Szrj   /* TODO: Non-optimization used to build this translation unit.  */
181238fd1498Szrj   /* TODO: Root of a partial DWARF tree for global types and decls.  */
181338fd1498Szrj };
181438fd1498Szrj 
181538fd1498Szrj struct GTY(()) tree_type_decl {
181638fd1498Szrj   struct tree_decl_non_common common;
181738fd1498Szrj 
181838fd1498Szrj };
181938fd1498Szrj 
182038fd1498Szrj struct GTY ((chain_next ("%h.next"), chain_prev ("%h.prev"))) tree_statement_list_node
182138fd1498Szrj  {
182238fd1498Szrj   struct tree_statement_list_node *prev;
182338fd1498Szrj   struct tree_statement_list_node *next;
182438fd1498Szrj   tree stmt;
182538fd1498Szrj };
182638fd1498Szrj 
182738fd1498Szrj struct GTY(()) tree_statement_list
182838fd1498Szrj  {
182938fd1498Szrj   struct tree_typed typed;
183038fd1498Szrj   struct tree_statement_list_node *head;
183138fd1498Szrj   struct tree_statement_list_node *tail;
183238fd1498Szrj };
183338fd1498Szrj 
183438fd1498Szrj 
183538fd1498Szrj /* Optimization options used by a function.  */
183638fd1498Szrj 
183738fd1498Szrj struct GTY(()) tree_optimization_option {
183838fd1498Szrj   struct tree_base base;
183938fd1498Szrj 
184038fd1498Szrj   /* The optimization options used by the user.  */
184138fd1498Szrj   struct cl_optimization *opts;
184238fd1498Szrj 
184338fd1498Szrj   /* Target optabs for this set of optimization options.  This is of
184438fd1498Szrj      type `struct target_optabs *'.  */
184538fd1498Szrj   void *GTY ((atomic)) optabs;
184638fd1498Szrj 
184738fd1498Szrj   /* The value of this_target_optabs against which the optabs above were
184838fd1498Szrj      generated.  */
184938fd1498Szrj   struct target_optabs *GTY ((skip)) base_optabs;
185038fd1498Szrj };
185138fd1498Szrj 
185238fd1498Szrj /* Forward declaration, defined in target-globals.h.  */
185338fd1498Szrj 
185438fd1498Szrj struct GTY(()) target_globals;
185538fd1498Szrj 
185638fd1498Szrj /* Target options used by a function.  */
185738fd1498Szrj 
185838fd1498Szrj struct GTY(()) tree_target_option {
185938fd1498Szrj   struct tree_base base;
186038fd1498Szrj 
186138fd1498Szrj   /* Target globals for the corresponding target option.  */
186238fd1498Szrj   struct target_globals *globals;
186338fd1498Szrj 
186438fd1498Szrj   /* The optimization options used by the user.  */
186538fd1498Szrj   struct cl_target_option *opts;
186638fd1498Szrj };
186738fd1498Szrj 
186838fd1498Szrj /* Define the overall contents of a tree node.
186938fd1498Szrj    It may be any of the structures declared above
187038fd1498Szrj    for various types of node.  */
187138fd1498Szrj union GTY ((ptr_alias (union lang_tree_node),
187238fd1498Szrj 	    desc ("tree_node_structure (&%h)"), variable_size)) tree_node {
187338fd1498Szrj   struct tree_base GTY ((tag ("TS_BASE"))) base;
187438fd1498Szrj   struct tree_typed GTY ((tag ("TS_TYPED"))) typed;
187538fd1498Szrj   struct tree_common GTY ((tag ("TS_COMMON"))) common;
187638fd1498Szrj   struct tree_int_cst GTY ((tag ("TS_INT_CST"))) int_cst;
187738fd1498Szrj   struct tree_poly_int_cst GTY ((tag ("TS_POLY_INT_CST"))) poly_int_cst;
187838fd1498Szrj   struct tree_real_cst GTY ((tag ("TS_REAL_CST"))) real_cst;
187938fd1498Szrj   struct tree_fixed_cst GTY ((tag ("TS_FIXED_CST"))) fixed_cst;
188038fd1498Szrj   struct tree_vector GTY ((tag ("TS_VECTOR"))) vector;
188138fd1498Szrj   struct tree_string GTY ((tag ("TS_STRING"))) string;
188238fd1498Szrj   struct tree_complex GTY ((tag ("TS_COMPLEX"))) complex;
188338fd1498Szrj   struct tree_identifier GTY ((tag ("TS_IDENTIFIER"))) identifier;
188438fd1498Szrj   struct tree_decl_minimal GTY((tag ("TS_DECL_MINIMAL"))) decl_minimal;
188538fd1498Szrj   struct tree_decl_common GTY ((tag ("TS_DECL_COMMON"))) decl_common;
188638fd1498Szrj   struct tree_decl_with_rtl GTY ((tag ("TS_DECL_WRTL"))) decl_with_rtl;
188738fd1498Szrj   struct tree_decl_non_common  GTY ((tag ("TS_DECL_NON_COMMON")))
188838fd1498Szrj     decl_non_common;
188938fd1498Szrj   struct tree_parm_decl  GTY  ((tag ("TS_PARM_DECL"))) parm_decl;
189038fd1498Szrj   struct tree_decl_with_vis GTY ((tag ("TS_DECL_WITH_VIS"))) decl_with_vis;
189138fd1498Szrj   struct tree_var_decl GTY ((tag ("TS_VAR_DECL"))) var_decl;
189238fd1498Szrj   struct tree_field_decl GTY ((tag ("TS_FIELD_DECL"))) field_decl;
189338fd1498Szrj   struct tree_label_decl GTY ((tag ("TS_LABEL_DECL"))) label_decl;
189438fd1498Szrj   struct tree_result_decl GTY ((tag ("TS_RESULT_DECL"))) result_decl;
189538fd1498Szrj   struct tree_const_decl GTY ((tag ("TS_CONST_DECL"))) const_decl;
189638fd1498Szrj   struct tree_type_decl GTY ((tag ("TS_TYPE_DECL"))) type_decl;
189738fd1498Szrj   struct tree_function_decl GTY ((tag ("TS_FUNCTION_DECL"))) function_decl;
189838fd1498Szrj   struct tree_translation_unit_decl GTY ((tag ("TS_TRANSLATION_UNIT_DECL")))
189938fd1498Szrj     translation_unit_decl;
190038fd1498Szrj   struct tree_type_common GTY ((tag ("TS_TYPE_COMMON"))) type_common;
190138fd1498Szrj   struct tree_type_with_lang_specific GTY ((tag ("TS_TYPE_WITH_LANG_SPECIFIC")))
190238fd1498Szrj     type_with_lang_specific;
190338fd1498Szrj   struct tree_type_non_common GTY ((tag ("TS_TYPE_NON_COMMON")))
190438fd1498Szrj     type_non_common;
190538fd1498Szrj   struct tree_list GTY ((tag ("TS_LIST"))) list;
190638fd1498Szrj   struct tree_vec GTY ((tag ("TS_VEC"))) vec;
190738fd1498Szrj   struct tree_exp GTY ((tag ("TS_EXP"))) exp;
190838fd1498Szrj   struct tree_ssa_name GTY ((tag ("TS_SSA_NAME"))) ssa_name;
190938fd1498Szrj   struct tree_block GTY ((tag ("TS_BLOCK"))) block;
191038fd1498Szrj   struct tree_binfo GTY ((tag ("TS_BINFO"))) binfo;
191138fd1498Szrj   struct tree_statement_list GTY ((tag ("TS_STATEMENT_LIST"))) stmt_list;
191238fd1498Szrj   struct tree_constructor GTY ((tag ("TS_CONSTRUCTOR"))) constructor;
191338fd1498Szrj   struct tree_omp_clause GTY ((tag ("TS_OMP_CLAUSE"))) omp_clause;
191438fd1498Szrj   struct tree_optimization_option GTY ((tag ("TS_OPTIMIZATION"))) optimization;
191538fd1498Szrj   struct tree_target_option GTY ((tag ("TS_TARGET_OPTION"))) target_option;
191638fd1498Szrj };
191738fd1498Szrj 
191838fd1498Szrj /* Structure describing an attribute and a function to handle it.  */
191938fd1498Szrj struct attribute_spec {
192038fd1498Szrj   /* The name of the attribute (without any leading or trailing __),
192138fd1498Szrj      or NULL to mark the end of a table of attributes.  */
192238fd1498Szrj   const char *name;
192338fd1498Szrj   /* The minimum length of the list of arguments of the attribute.  */
192438fd1498Szrj   int min_length;
192538fd1498Szrj   /* The maximum length of the list of arguments of the attribute
192638fd1498Szrj      (-1 for no maximum).  */
192738fd1498Szrj   int max_length;
192838fd1498Szrj   /* Whether this attribute requires a DECL.  If it does, it will be passed
192938fd1498Szrj      from types of DECLs, function return types and array element types to
193038fd1498Szrj      the DECLs, function types and array types respectively; but when
193138fd1498Szrj      applied to a type in any other circumstances, it will be ignored with
193238fd1498Szrj      a warning.  (If greater control is desired for a given attribute,
193338fd1498Szrj      this should be false, and the flags argument to the handler may be
193438fd1498Szrj      used to gain greater control in that case.)  */
193538fd1498Szrj   bool decl_required;
193638fd1498Szrj   /* Whether this attribute requires a type.  If it does, it will be passed
193738fd1498Szrj      from a DECL to the type of that DECL.  */
193838fd1498Szrj   bool type_required;
193938fd1498Szrj   /* Whether this attribute requires a function (or method) type.  If it does,
194038fd1498Szrj      it will be passed from a function pointer type to the target type,
194138fd1498Szrj      and from a function return type (which is not itself a function
194238fd1498Szrj      pointer type) to the function type.  */
194338fd1498Szrj   bool function_type_required;
194438fd1498Szrj   /* Specifies if attribute affects type's identity.  */
194538fd1498Szrj   bool affects_type_identity;
194638fd1498Szrj   /* Function to handle this attribute.  NODE points to the node to which
194738fd1498Szrj      the attribute is to be applied.  If a DECL, it should be modified in
194838fd1498Szrj      place; if a TYPE, a copy should be created.  NAME is the name of the
194938fd1498Szrj      attribute (possibly with leading or trailing __).  ARGS is the TREE_LIST
195038fd1498Szrj      of the arguments (which may be NULL).  FLAGS gives further information
195138fd1498Szrj      about the context of the attribute.  Afterwards, the attributes will
195238fd1498Szrj      be added to the DECL_ATTRIBUTES or TYPE_ATTRIBUTES, as appropriate,
195338fd1498Szrj      unless *NO_ADD_ATTRS is set to true (which should be done on error,
195438fd1498Szrj      as well as in any other cases when the attributes should not be added
195538fd1498Szrj      to the DECL or TYPE).  Depending on FLAGS, any attributes to be
195638fd1498Szrj      applied to another type or DECL later may be returned;
195738fd1498Szrj      otherwise the return value should be NULL_TREE.  This pointer may be
195838fd1498Szrj      NULL if no special handling is required beyond the checks implied
195938fd1498Szrj      by the rest of this structure.  */
196038fd1498Szrj   tree (*handler) (tree *node, tree name, tree args,
196138fd1498Szrj 		   int flags, bool *no_add_attrs);
196238fd1498Szrj 
196338fd1498Szrj   /* Specifies the name of an attribute that's mutually exclusive with
196438fd1498Szrj      this one, and whether the relationship applies to the function,
196538fd1498Szrj      variable, or type form of the attribute.  */
196638fd1498Szrj   struct exclusions {
196738fd1498Szrj     const char *name;
196838fd1498Szrj     bool function;
196938fd1498Szrj     bool variable;
197038fd1498Szrj     bool type;
197138fd1498Szrj   };
197238fd1498Szrj 
197338fd1498Szrj   /* An array of attribute exclusions describing names of other attributes
197438fd1498Szrj      that this attribute is mutually exclusive with.  */
197538fd1498Szrj   const exclusions *exclude;
197638fd1498Szrj };
197738fd1498Szrj 
197838fd1498Szrj /* These functions allow a front-end to perform a manual layout of a
197938fd1498Szrj    RECORD_TYPE.  (For instance, if the placement of subsequent fields
198038fd1498Szrj    depends on the placement of fields so far.)  Begin by calling
198138fd1498Szrj    start_record_layout.  Then, call place_field for each of the
198238fd1498Szrj    fields.  Then, call finish_record_layout.  See layout_type for the
198338fd1498Szrj    default way in which these functions are used.  */
198438fd1498Szrj typedef struct record_layout_info_s {
198538fd1498Szrj   /* The RECORD_TYPE that we are laying out.  */
198638fd1498Szrj   tree t;
198738fd1498Szrj   /* The offset into the record so far, in bytes, not including bits in
198838fd1498Szrj      BITPOS.  */
198938fd1498Szrj   tree offset;
199038fd1498Szrj   /* The last known alignment of SIZE.  */
199138fd1498Szrj   unsigned int offset_align;
199238fd1498Szrj   /* The bit position within the last OFFSET_ALIGN bits, in bits.  */
199338fd1498Szrj   tree bitpos;
199438fd1498Szrj   /* The alignment of the record so far, in bits.  */
199538fd1498Szrj   unsigned int record_align;
199638fd1498Szrj   /* The alignment of the record so far, ignoring #pragma pack and
199738fd1498Szrj      __attribute__ ((packed)), in bits.  */
199838fd1498Szrj   unsigned int unpacked_align;
199938fd1498Szrj   /* The previous field laid out.  */
200038fd1498Szrj   tree prev_field;
200138fd1498Szrj   /* The static variables (i.e., class variables, as opposed to
200238fd1498Szrj      instance variables) encountered in T.  */
200338fd1498Szrj   vec<tree, va_gc> *pending_statics;
200438fd1498Szrj   /* Bits remaining in the current alignment group */
200538fd1498Szrj   int remaining_in_alignment;
200638fd1498Szrj   /* True if we've seen a packed field that didn't have normal
200738fd1498Szrj      alignment anyway.  */
200838fd1498Szrj   int packed_maybe_necessary;
200938fd1498Szrj } *record_layout_info;
201038fd1498Szrj 
201138fd1498Szrj /* Iterator for going through the function arguments.  */
201238fd1498Szrj struct function_args_iterator {
201338fd1498Szrj   tree next;			/* TREE_LIST pointing to the next argument */
201438fd1498Szrj };
201538fd1498Szrj 
201638fd1498Szrj /* Structures to map from a tree to another tree.  */
201738fd1498Szrj struct GTY(()) tree_map_base {
201838fd1498Szrj   tree from;
201938fd1498Szrj };
202038fd1498Szrj 
202138fd1498Szrj /* Map from a tree to another tree.  */
202238fd1498Szrj 
202338fd1498Szrj struct GTY((for_user)) tree_map {
202438fd1498Szrj   struct tree_map_base base;
202538fd1498Szrj   unsigned int hash;
202638fd1498Szrj   tree to;
202738fd1498Szrj };
202838fd1498Szrj 
202938fd1498Szrj /* Map from a decl tree to another tree.  */
203038fd1498Szrj struct GTY((for_user)) tree_decl_map {
203138fd1498Szrj   struct tree_map_base base;
203238fd1498Szrj   tree to;
203338fd1498Szrj };
203438fd1498Szrj 
203538fd1498Szrj /* Map from a tree to an int.  */
203638fd1498Szrj struct GTY((for_user)) tree_int_map {
203738fd1498Szrj   struct tree_map_base base;
203838fd1498Szrj   unsigned int to;
203938fd1498Szrj };
204038fd1498Szrj 
204138fd1498Szrj /* Map from a decl tree to a tree vector.  */
204238fd1498Szrj struct GTY((for_user)) tree_vec_map {
204338fd1498Szrj   struct tree_map_base base;
204438fd1498Szrj   vec<tree, va_gc> *to;
204538fd1498Szrj };
204638fd1498Szrj 
204738fd1498Szrj /* Abstract iterators for CALL_EXPRs.  These static inline definitions
204838fd1498Szrj    have to go towards the end of tree.h so that union tree_node is fully
204938fd1498Szrj    defined by this point.  */
205038fd1498Szrj 
205138fd1498Szrj /* Structure containing iterator state.  */
205238fd1498Szrj struct call_expr_arg_iterator {
205338fd1498Szrj   tree t;	/* the call_expr */
205438fd1498Szrj   int n;	/* argument count */
205538fd1498Szrj   int i;	/* next argument index */
205638fd1498Szrj };
205738fd1498Szrj 
205838fd1498Szrj struct const_call_expr_arg_iterator {
205938fd1498Szrj   const_tree t;	/* the call_expr */
206038fd1498Szrj   int n;	/* argument count */
206138fd1498Szrj   int i;	/* next argument index */
206238fd1498Szrj };
206338fd1498Szrj 
206438fd1498Szrj /* The builtin_info structure holds the FUNCTION_DECL of the standard builtin
206538fd1498Szrj    function, and flags.  */
206638fd1498Szrj struct GTY(()) builtin_info_type {
206738fd1498Szrj   tree decl;
206838fd1498Szrj   /* Whether the user can use <xxx> instead of explicitly using calls
206938fd1498Szrj      to __builtin_<xxx>.  */
207038fd1498Szrj   unsigned implicit_p : 1;
207138fd1498Szrj   /* Whether the user has provided a declaration of <xxx>.  */
207238fd1498Szrj   unsigned declared_p : 1;
207338fd1498Szrj };
207438fd1498Szrj 
207538fd1498Szrj /* Information about a _FloatN or _FloatNx type that may be
207638fd1498Szrj    supported.  */
207738fd1498Szrj struct floatn_type_info {
207838fd1498Szrj   /* The number N in the type name.  */
207938fd1498Szrj   int n;
208038fd1498Szrj   /* Whether it is an extended type _FloatNx (true) or an interchange
208138fd1498Szrj      type (false).  */
208238fd1498Szrj   bool extended;
208338fd1498Szrj };
208438fd1498Szrj 
208538fd1498Szrj 
208638fd1498Szrj /*---------------------------------------------------------------------------
208738fd1498Szrj                                 Global variables
208838fd1498Szrj ---------------------------------------------------------------------------*/
208938fd1498Szrj /* Matrix describing the structures contained in a given tree code.  */
209038fd1498Szrj extern bool tree_contains_struct[MAX_TREE_CODES][64];
209138fd1498Szrj 
209238fd1498Szrj /* Class of tree given its code.  */
209338fd1498Szrj extern const enum tree_code_class tree_code_type[];
209438fd1498Szrj 
209538fd1498Szrj /* Each tree code class has an associated string representation.
209638fd1498Szrj    These must correspond to the tree_code_class entries.  */
209738fd1498Szrj extern const char *const tree_code_class_strings[];
209838fd1498Szrj 
209938fd1498Szrj /* Number of argument-words in each kind of tree-node.  */
210038fd1498Szrj extern const unsigned char tree_code_length[];
210138fd1498Szrj 
210238fd1498Szrj /* Vector of all alias pairs for global symbols.  */
210338fd1498Szrj extern GTY(()) vec<alias_pair, va_gc> *alias_pairs;
210438fd1498Szrj 
210538fd1498Szrj /* Names of all the built_in classes.  */
210638fd1498Szrj extern const char *const built_in_class_names[BUILT_IN_LAST];
210738fd1498Szrj 
210838fd1498Szrj /* Names of all the built_in functions.  */
210938fd1498Szrj extern const char * built_in_names[(int) END_BUILTINS];
211038fd1498Szrj 
211138fd1498Szrj /* Number of operands and names for each OMP_CLAUSE node.  */
211238fd1498Szrj extern unsigned const char omp_clause_num_ops[];
211338fd1498Szrj extern const char * const omp_clause_code_name[];
211438fd1498Szrj 
211538fd1498Szrj /* A vector of all translation-units.  */
211638fd1498Szrj extern GTY (()) vec<tree, va_gc> *all_translation_units;
211738fd1498Szrj 
211838fd1498Szrj /* Vector of standard trees used by the C compiler.  */
211938fd1498Szrj extern GTY(()) tree global_trees[TI_MAX];
212038fd1498Szrj 
212138fd1498Szrj /* The standard C integer types.  Use integer_type_kind to index into
212238fd1498Szrj    this array.  */
212338fd1498Szrj extern GTY(()) tree integer_types[itk_none];
212438fd1498Szrj 
212538fd1498Szrj /* Types used to represent sizes.  */
212638fd1498Szrj extern GTY(()) tree sizetype_tab[(int) stk_type_kind_last];
212738fd1498Szrj 
212838fd1498Szrj /* Arrays for keeping track of tree node statistics.  */
212938fd1498Szrj extern uint64_t tree_node_counts[];
213038fd1498Szrj extern uint64_t tree_node_sizes[];
213138fd1498Szrj 
213238fd1498Szrj /* True if we are in gimple form and the actions of the folders need to
213338fd1498Szrj    be restricted.  False if we are not in gimple form and folding is not
213438fd1498Szrj    restricted to creating gimple expressions.  */
213538fd1498Szrj extern bool in_gimple_form;
213638fd1498Szrj 
213738fd1498Szrj /* Functional interface to the builtin functions.  */
213838fd1498Szrj extern GTY(()) builtin_info_type builtin_info[(int)END_BUILTINS];
213938fd1498Szrj 
214038fd1498Szrj /* If nonzero, an upper limit on alignment of structure fields, in bits,  */
214138fd1498Szrj extern unsigned int maximum_field_alignment;
214238fd1498Szrj 
214338fd1498Szrj /* Points to the FUNCTION_DECL of the function whose body we are reading.  */
214438fd1498Szrj extern GTY(()) tree current_function_decl;
214538fd1498Szrj 
214638fd1498Szrj /* Nonzero means a FUNC_BEGIN label was emitted.  */
214738fd1498Szrj extern GTY(()) const char * current_function_func_begin_label;
214838fd1498Szrj 
214938fd1498Szrj /* Information about the _FloatN and _FloatNx types.  */
215038fd1498Szrj extern const floatn_type_info floatn_nx_types[NUM_FLOATN_NX_TYPES];
215138fd1498Szrj 
215238fd1498Szrj #endif  // GCC_TREE_CORE_H
2153