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