dominance.c (free_dominance_info): Add overload with function parameter.
[platform/upstream/gcc.git] / gcc / tree-core.h
1 /* Core data structures for the 'tree' type.
2    Copyright (C) 1989-2014 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 "hashtab.h"
24 #include "machmode.h"
25 #include "input.h"
26 #include "statistics.h"
27 #include "vec.h"
28 #include "double-int.h"
29 #include "real.h"
30 #include "fixed-value.h"
31 #include "alias.h"
32 #include "flags.h"
33 #include "symtab.h"
34
35 /* This file contains all the data structures that define the 'tree' type.
36    There are no accessor macros nor functions in this file. Only the
37    basic data structures, extern declarations and type definitions.  */
38
39 /*---------------------------------------------------------------------------
40    Forward type declarations.  Mostly to avoid including unnecessary headers
41 ---------------------------------------------------------------------------*/
42 struct function;
43 struct real_value;
44 struct fixed_value;
45 struct ptr_info_def;
46 struct range_info_def;
47 struct die_struct;
48 struct pointer_set_t;
49
50
51 /*---------------------------------------------------------------------------
52                               #defined constants
53 ---------------------------------------------------------------------------*/
54 /* Nonzero if this is a call to a function whose return value depends
55    solely on its arguments, has no side effects, and does not read
56    global memory.  This corresponds to TREE_READONLY for function
57    decls.  */
58 #define ECF_CONST                 (1 << 0)
59
60 /* Nonzero if this is a call to "pure" function (like const function,
61    but may read memory.  This corresponds to DECL_PURE_P for function
62    decls.  */
63 #define ECF_PURE                  (1 << 1)
64
65 /* Nonzero if this is ECF_CONST or ECF_PURE but cannot be proven to no
66    infinite loop.  This corresponds to DECL_LOOPING_CONST_OR_PURE_P
67    for function decls.*/
68 #define ECF_LOOPING_CONST_OR_PURE (1 << 2)
69
70 /* Nonzero if this call will never return.  */
71 #define ECF_NORETURN              (1 << 3)
72
73 /* Nonzero if this is a call to malloc or a related function.  */
74 #define ECF_MALLOC                (1 << 4)
75
76 /* Nonzero if it is plausible that this is a call to alloca.  */
77 #define ECF_MAY_BE_ALLOCA         (1 << 5)
78
79 /* Nonzero if this is a call to a function that won't throw an exception.  */
80 #define ECF_NOTHROW               (1 << 6)
81
82 /* Nonzero if this is a call to setjmp or a related function.  */
83 #define ECF_RETURNS_TWICE         (1 << 7)
84
85 /* Nonzero if this call replaces the current stack frame.  */
86 #define ECF_SIBCALL               (1 << 8)
87
88 /* Function does not read or write memory (but may have side effects, so
89    it does not necessarily fit ECF_CONST).  */
90 #define ECF_NOVOPS                (1 << 9)
91
92 /* The function does not lead to calls within current function unit.  */
93 #define ECF_LEAF                  (1 << 10)
94
95 /* Nonzero if this call does not affect transactions.  */
96 #define ECF_TM_PURE               (1 << 11)
97
98 /* Nonzero if this call is into the transaction runtime library.  */
99 #define ECF_TM_BUILTIN            (1 << 12)
100
101 /* Call argument flags.  */
102 /* Nonzero if the argument is not dereferenced recursively, thus only
103    directly reachable memory is read or written.  */
104 #define EAF_DIRECT              (1 << 0)
105
106 /* Nonzero if memory reached by the argument is not clobbered.  */
107 #define EAF_NOCLOBBER           (1 << 1)
108
109 /* Nonzero if the argument does not escape.  */
110 #define EAF_NOESCAPE            (1 << 2)
111
112 /* Nonzero if the argument is not used by the function.  */
113 #define EAF_UNUSED              (1 << 3)
114
115 /* Call return flags.  */
116 /* Mask for the argument number that is returned.  Lower two bits of
117    the return flags, encodes argument slots zero to three.  */
118 #define ERF_RETURN_ARG_MASK     (3)
119
120 /* Nonzero if the return value is equal to the argument number
121    flags & ERF_RETURN_ARG_MASK.  */
122 #define ERF_RETURNS_ARG         (1 << 2)
123
124 /* Nonzero if the return value does not alias with anything.  Functions
125    with the malloc attribute have this set on their return value.  */
126 #define ERF_NOALIAS             (1 << 3)
127
128
129 /*---------------------------------------------------------------------------
130                                   Enumerations
131 ---------------------------------------------------------------------------*/
132 /* Codes of tree nodes.  */
133 #define DEFTREECODE(SYM, STRING, TYPE, NARGS)   SYM,
134 #define END_OF_BASE_TREE_CODES LAST_AND_UNUSED_TREE_CODE,
135
136 enum tree_code {
137 #include "all-tree.def"
138 MAX_TREE_CODES
139 };
140
141 #undef DEFTREECODE
142 #undef END_OF_BASE_TREE_CODES
143
144 /* Number of language-independent tree codes.  */
145 #define NUM_TREE_CODES \
146   ((int) LAST_AND_UNUSED_TREE_CODE)
147
148 #define CODE_CONTAINS_STRUCT(CODE, STRUCT) \
149   (tree_contains_struct[(CODE)][(STRUCT)])
150
151
152 /* Classify which part of the compiler has defined a given builtin function.
153    Note that we assume below that this is no more than two bits.  */
154 enum built_in_class {
155   NOT_BUILT_IN = 0,
156   BUILT_IN_FRONTEND,
157   BUILT_IN_MD,
158   BUILT_IN_NORMAL
159 };
160
161 /* Last marker used for LTO stremaing of built_in_class.  We can not add it
162    to the enum since we need the enumb to fit in 2 bits.  */
163 #define BUILT_IN_LAST (BUILT_IN_NORMAL + 1)
164
165 /* Codes that identify the various built in functions
166    so that expand_call can identify them quickly.  */
167 #define DEF_BUILTIN(ENUM, N, C, T, LT, B, F, NA, AT, IM, COND) ENUM,
168 enum built_in_function {
169 #include "builtins.def"
170
171   /* Complex division routines in libgcc.  These are done via builtins
172      because emit_library_call_value can't handle complex values.  */
173   BUILT_IN_COMPLEX_MUL_MIN,
174   BUILT_IN_COMPLEX_MUL_MAX
175     = BUILT_IN_COMPLEX_MUL_MIN
176       + MAX_MODE_COMPLEX_FLOAT
177       - MIN_MODE_COMPLEX_FLOAT,
178
179   BUILT_IN_COMPLEX_DIV_MIN,
180   BUILT_IN_COMPLEX_DIV_MAX
181     = BUILT_IN_COMPLEX_DIV_MIN
182       + MAX_MODE_COMPLEX_FLOAT
183       - MIN_MODE_COMPLEX_FLOAT,
184
185   /* Upper bound on non-language-specific builtins.  */
186   END_BUILTINS
187 };
188 #undef DEF_BUILTIN
189
190 /* Tree code classes.  Each tree_code has an associated code class
191    represented by a TREE_CODE_CLASS.  */
192 enum tree_code_class {
193   tcc_exceptional, /* An exceptional code (fits no category).  */
194   tcc_constant,    /* A constant.  */
195   /* Order of tcc_type and tcc_declaration is important.  */
196   tcc_type,        /* A type object code.  */
197   tcc_declaration, /* A declaration (also serving as variable refs).  */
198   tcc_reference,   /* A reference to storage.  */
199   tcc_comparison,  /* A comparison expression.  */
200   tcc_unary,       /* A unary arithmetic expression.  */
201   tcc_binary,      /* A binary arithmetic expression.  */
202   tcc_statement,   /* A statement expression, which have side effects
203                       but usually no interesting value.  */
204   tcc_vl_exp,      /* A function call or other expression with a
205                       variable-length operand vector.  */
206   tcc_expression   /* Any other expression.  */
207 };
208
209 /* OMP_CLAUSE codes.  Do not reorder, as this is used to index into
210    the tables omp_clause_num_ops and omp_clause_code_name.  */
211 enum omp_clause_code {
212   /* Clause zero is special-cased inside the parser
213      (c_parser_omp_variable_list).  */
214   OMP_CLAUSE_ERROR = 0,
215
216   /* OpenMP clause: private (variable_list).  */
217   OMP_CLAUSE_PRIVATE,
218
219   /* OpenMP clause: shared (variable_list).  */
220   OMP_CLAUSE_SHARED,
221
222   /* OpenMP clause: firstprivate (variable_list).  */
223   OMP_CLAUSE_FIRSTPRIVATE,
224
225   /* OpenMP clause: lastprivate (variable_list).  */
226   OMP_CLAUSE_LASTPRIVATE,
227
228   /* OpenMP clause: reduction (operator:variable_list).
229      OMP_CLAUSE_REDUCTION_CODE: The tree_code of the operator.
230      Operand 1: OMP_CLAUSE_REDUCTION_INIT: Stmt-list to initialize the var.
231      Operand 2: OMP_CLAUSE_REDUCTION_MERGE: Stmt-list to merge private var
232                 into the shared one.
233      Operand 3: OMP_CLAUSE_REDUCTION_PLACEHOLDER: A dummy VAR_DECL
234                 placeholder used in OMP_CLAUSE_REDUCTION_{INIT,MERGE}.  */
235   OMP_CLAUSE_REDUCTION,
236
237   /* OpenMP clause: copyin (variable_list).  */
238   OMP_CLAUSE_COPYIN,
239
240   /* OpenMP clause: copyprivate (variable_list).  */
241   OMP_CLAUSE_COPYPRIVATE,
242
243   /* OpenMP clause: linear (variable-list[:linear-step]).  */
244   OMP_CLAUSE_LINEAR,
245
246   /* OpenMP clause: aligned (variable-list[:alignment]).  */
247   OMP_CLAUSE_ALIGNED,
248
249   /* OpenMP clause: depend ({in,out,inout}:variable-list).  */
250   OMP_CLAUSE_DEPEND,
251
252   /* OpenMP clause: uniform (argument-list).  */
253   OMP_CLAUSE_UNIFORM,
254
255   /* OpenMP clause: from (variable-list).  */
256   OMP_CLAUSE_FROM,
257
258   /* OpenMP clause: to (variable-list).  */
259   OMP_CLAUSE_TO,
260
261   /* OpenMP clause: map ({alloc:,to:,from:,tofrom:,}variable-list).  */
262   OMP_CLAUSE_MAP,
263
264   /* Internal clause: temporary for combined loops expansion.  */
265   OMP_CLAUSE__LOOPTEMP_,
266
267   /* OpenMP clause: if (scalar-expression).  */
268   OMP_CLAUSE_IF,
269
270   /* OpenMP clause: num_threads (integer-expression).  */
271   OMP_CLAUSE_NUM_THREADS,
272
273   /* OpenMP clause: schedule.  */
274   OMP_CLAUSE_SCHEDULE,
275
276   /* OpenMP clause: nowait.  */
277   OMP_CLAUSE_NOWAIT,
278
279   /* OpenMP clause: ordered.  */
280   OMP_CLAUSE_ORDERED,
281
282   /* OpenMP clause: default.  */
283   OMP_CLAUSE_DEFAULT,
284
285   /* OpenMP clause: collapse (constant-integer-expression).  */
286   OMP_CLAUSE_COLLAPSE,
287
288   /* OpenMP clause: untied.  */
289   OMP_CLAUSE_UNTIED,
290
291   /* OpenMP clause: final (scalar-expression).  */
292   OMP_CLAUSE_FINAL,
293
294   /* OpenMP clause: mergeable.  */
295   OMP_CLAUSE_MERGEABLE,
296
297   /* OpenMP clause: device (integer-expression).  */
298   OMP_CLAUSE_DEVICE,
299
300   /* OpenMP clause: dist_schedule (static[:chunk-size]).  */
301   OMP_CLAUSE_DIST_SCHEDULE,
302
303   /* OpenMP clause: inbranch.  */
304   OMP_CLAUSE_INBRANCH,
305
306   /* OpenMP clause: notinbranch.  */
307   OMP_CLAUSE_NOTINBRANCH,
308
309   /* OpenMP clause: num_teams(integer-expression).  */
310   OMP_CLAUSE_NUM_TEAMS,
311
312   /* OpenMP clause: thread_limit(integer-expression).  */
313   OMP_CLAUSE_THREAD_LIMIT,
314
315   /* OpenMP clause: proc_bind ({master,close,spread}).  */
316   OMP_CLAUSE_PROC_BIND,
317
318   /* OpenMP clause: safelen (constant-integer-expression).  */
319   OMP_CLAUSE_SAFELEN,
320
321   /* OpenMP clause: simdlen (constant-integer-expression).  */
322   OMP_CLAUSE_SIMDLEN,
323
324   /* OpenMP clause: for.  */
325   OMP_CLAUSE_FOR,
326
327   /* OpenMP clause: parallel.  */
328   OMP_CLAUSE_PARALLEL,
329
330   /* OpenMP clause: sections.  */
331   OMP_CLAUSE_SECTIONS,
332
333   /* OpenMP clause: taskgroup.  */
334   OMP_CLAUSE_TASKGROUP,
335
336   /* Internally used only clause, holding SIMD uid.  */
337   OMP_CLAUSE__SIMDUID_
338 };
339
340 #undef DEFTREESTRUCT
341 #define DEFTREESTRUCT(ENUM, NAME) ENUM,
342 enum tree_node_structure_enum {
343 #include "treestruct.def"
344   LAST_TS_ENUM
345 };
346 #undef DEFTREESTRUCT
347
348 enum omp_clause_schedule_kind {
349   OMP_CLAUSE_SCHEDULE_STATIC,
350   OMP_CLAUSE_SCHEDULE_DYNAMIC,
351   OMP_CLAUSE_SCHEDULE_GUIDED,
352   OMP_CLAUSE_SCHEDULE_AUTO,
353   OMP_CLAUSE_SCHEDULE_RUNTIME,
354   OMP_CLAUSE_SCHEDULE_LAST
355 };
356
357 enum omp_clause_default_kind {
358   OMP_CLAUSE_DEFAULT_UNSPECIFIED,
359   OMP_CLAUSE_DEFAULT_SHARED,
360   OMP_CLAUSE_DEFAULT_NONE,
361   OMP_CLAUSE_DEFAULT_PRIVATE,
362   OMP_CLAUSE_DEFAULT_FIRSTPRIVATE,
363   OMP_CLAUSE_DEFAULT_LAST
364 };
365
366 /* There is a TYPE_QUAL value for each type qualifier.  They can be
367    combined by bitwise-or to form the complete set of qualifiers for a
368    type.  */
369 enum cv_qualifier {
370   TYPE_UNQUALIFIED   = 0x0,
371   TYPE_QUAL_CONST    = 0x1,
372   TYPE_QUAL_VOLATILE = 0x2,
373   TYPE_QUAL_RESTRICT = 0x4,
374   TYPE_QUAL_ATOMIC   = 0x8
375 };
376
377 /* Enumerate visibility settings.  */
378 #ifndef SYMBOL_VISIBILITY_DEFINED
379 #define SYMBOL_VISIBILITY_DEFINED
380 enum symbol_visibility {
381   VISIBILITY_DEFAULT,
382   VISIBILITY_PROTECTED,
383   VISIBILITY_HIDDEN,
384   VISIBILITY_INTERNAL
385 };
386 #endif  // SYMBOL_VISIBILITY_DEFINED
387
388 /* Standard named or nameless data types of the C compiler.  */
389 enum tree_index {
390   TI_ERROR_MARK,
391   TI_INTQI_TYPE,
392   TI_INTHI_TYPE,
393   TI_INTSI_TYPE,
394   TI_INTDI_TYPE,
395   TI_INTTI_TYPE,
396
397   TI_UINTQI_TYPE,
398   TI_UINTHI_TYPE,
399   TI_UINTSI_TYPE,
400   TI_UINTDI_TYPE,
401   TI_UINTTI_TYPE,
402
403   TI_ATOMICQI_TYPE,
404   TI_ATOMICHI_TYPE,
405   TI_ATOMICSI_TYPE,
406   TI_ATOMICDI_TYPE,
407   TI_ATOMICTI_TYPE,
408
409   TI_UINT16_TYPE,
410   TI_UINT32_TYPE,
411   TI_UINT64_TYPE,
412
413   TI_INTEGER_ZERO,
414   TI_INTEGER_ONE,
415   TI_INTEGER_THREE,
416   TI_INTEGER_MINUS_ONE,
417   TI_NULL_POINTER,
418
419   TI_SIZE_ZERO,
420   TI_SIZE_ONE,
421
422   TI_BITSIZE_ZERO,
423   TI_BITSIZE_ONE,
424   TI_BITSIZE_UNIT,
425
426   TI_PUBLIC,
427   TI_PROTECTED,
428   TI_PRIVATE,
429
430   TI_BOOLEAN_FALSE,
431   TI_BOOLEAN_TRUE,
432
433   TI_COMPLEX_INTEGER_TYPE,
434   TI_COMPLEX_FLOAT_TYPE,
435   TI_COMPLEX_DOUBLE_TYPE,
436   TI_COMPLEX_LONG_DOUBLE_TYPE,
437
438   TI_FLOAT_TYPE,
439   TI_DOUBLE_TYPE,
440   TI_LONG_DOUBLE_TYPE,
441
442   TI_FLOAT_PTR_TYPE,
443   TI_DOUBLE_PTR_TYPE,
444   TI_LONG_DOUBLE_PTR_TYPE,
445   TI_INTEGER_PTR_TYPE,
446
447   TI_VOID_TYPE,
448   TI_PTR_TYPE,
449   TI_CONST_PTR_TYPE,
450   TI_SIZE_TYPE,
451   TI_PID_TYPE,
452   TI_PTRDIFF_TYPE,
453   TI_VA_LIST_TYPE,
454   TI_VA_LIST_GPR_COUNTER_FIELD,
455   TI_VA_LIST_FPR_COUNTER_FIELD,
456   TI_BOOLEAN_TYPE,
457   TI_FILEPTR_TYPE,
458   TI_POINTER_SIZED_TYPE,
459
460   TI_DFLOAT32_TYPE,
461   TI_DFLOAT64_TYPE,
462   TI_DFLOAT128_TYPE,
463   TI_DFLOAT32_PTR_TYPE,
464   TI_DFLOAT64_PTR_TYPE,
465   TI_DFLOAT128_PTR_TYPE,
466
467   TI_VOID_LIST_NODE,
468
469   TI_MAIN_IDENTIFIER,
470
471   TI_SAT_SFRACT_TYPE,
472   TI_SAT_FRACT_TYPE,
473   TI_SAT_LFRACT_TYPE,
474   TI_SAT_LLFRACT_TYPE,
475   TI_SAT_USFRACT_TYPE,
476   TI_SAT_UFRACT_TYPE,
477   TI_SAT_ULFRACT_TYPE,
478   TI_SAT_ULLFRACT_TYPE,
479   TI_SFRACT_TYPE,
480   TI_FRACT_TYPE,
481   TI_LFRACT_TYPE,
482   TI_LLFRACT_TYPE,
483   TI_USFRACT_TYPE,
484   TI_UFRACT_TYPE,
485   TI_ULFRACT_TYPE,
486   TI_ULLFRACT_TYPE,
487   TI_SAT_SACCUM_TYPE,
488   TI_SAT_ACCUM_TYPE,
489   TI_SAT_LACCUM_TYPE,
490   TI_SAT_LLACCUM_TYPE,
491   TI_SAT_USACCUM_TYPE,
492   TI_SAT_UACCUM_TYPE,
493   TI_SAT_ULACCUM_TYPE,
494   TI_SAT_ULLACCUM_TYPE,
495   TI_SACCUM_TYPE,
496   TI_ACCUM_TYPE,
497   TI_LACCUM_TYPE,
498   TI_LLACCUM_TYPE,
499   TI_USACCUM_TYPE,
500   TI_UACCUM_TYPE,
501   TI_ULACCUM_TYPE,
502   TI_ULLACCUM_TYPE,
503   TI_QQ_TYPE,
504   TI_HQ_TYPE,
505   TI_SQ_TYPE,
506   TI_DQ_TYPE,
507   TI_TQ_TYPE,
508   TI_UQQ_TYPE,
509   TI_UHQ_TYPE,
510   TI_USQ_TYPE,
511   TI_UDQ_TYPE,
512   TI_UTQ_TYPE,
513   TI_SAT_QQ_TYPE,
514   TI_SAT_HQ_TYPE,
515   TI_SAT_SQ_TYPE,
516   TI_SAT_DQ_TYPE,
517   TI_SAT_TQ_TYPE,
518   TI_SAT_UQQ_TYPE,
519   TI_SAT_UHQ_TYPE,
520   TI_SAT_USQ_TYPE,
521   TI_SAT_UDQ_TYPE,
522   TI_SAT_UTQ_TYPE,
523   TI_HA_TYPE,
524   TI_SA_TYPE,
525   TI_DA_TYPE,
526   TI_TA_TYPE,
527   TI_UHA_TYPE,
528   TI_USA_TYPE,
529   TI_UDA_TYPE,
530   TI_UTA_TYPE,
531   TI_SAT_HA_TYPE,
532   TI_SAT_SA_TYPE,
533   TI_SAT_DA_TYPE,
534   TI_SAT_TA_TYPE,
535   TI_SAT_UHA_TYPE,
536   TI_SAT_USA_TYPE,
537   TI_SAT_UDA_TYPE,
538   TI_SAT_UTA_TYPE,
539
540   TI_OPTIMIZATION_DEFAULT,
541   TI_OPTIMIZATION_CURRENT,
542   TI_TARGET_OPTION_DEFAULT,
543   TI_TARGET_OPTION_CURRENT,
544   TI_CURRENT_TARGET_PRAGMA,
545   TI_CURRENT_OPTIMIZE_PRAGMA,
546
547   TI_MAX
548 };
549
550 /* An enumeration of the standard C integer types.  These must be
551    ordered so that shorter types appear before longer ones, and so
552    that signed types appear before unsigned ones, for the correct
553    functioning of interpret_integer() in c-lex.c.  */
554 enum integer_type_kind {
555   itk_char,
556   itk_signed_char,
557   itk_unsigned_char,
558   itk_short,
559   itk_unsigned_short,
560   itk_int,
561   itk_unsigned_int,
562   itk_long,
563   itk_unsigned_long,
564   itk_long_long,
565   itk_unsigned_long_long,
566   itk_int128,
567   itk_unsigned_int128,
568   itk_none
569 };
570
571 /* A pointer-to-function member type looks like:
572
573      struct {
574        __P __pfn;
575        ptrdiff_t __delta;
576      };
577
578    If __pfn is NULL, it is a NULL pointer-to-member-function.
579
580    (Because the vtable is always the first thing in the object, we
581    don't need its offset.)  If the function is virtual, then PFN is
582    one plus twice the index into the vtable; otherwise, it is just a
583    pointer to the function.
584
585    Unfortunately, using the lowest bit of PFN doesn't work in
586    architectures that don't impose alignment requirements on function
587    addresses, or that use the lowest bit to tell one ISA from another,
588    for example.  For such architectures, we use the lowest bit of
589    DELTA instead of the lowest bit of the PFN, and DELTA will be
590    multiplied by 2.  */
591 enum ptrmemfunc_vbit_where_t {
592   ptrmemfunc_vbit_in_pfn,
593   ptrmemfunc_vbit_in_delta
594 };
595
596 /* Flags that may be passed in the third argument of decl_attributes, and
597    to handler functions for attributes.  */
598 enum attribute_flags {
599   /* The type passed in is the type of a DECL, and any attributes that
600      should be passed in again to be applied to the DECL rather than the
601      type should be returned.  */
602   ATTR_FLAG_DECL_NEXT = 1,
603   /* The type passed in is a function return type, and any attributes that
604      should be passed in again to be applied to the function type rather
605      than the return type should be returned.  */
606   ATTR_FLAG_FUNCTION_NEXT = 2,
607   /* The type passed in is an array element type, and any attributes that
608      should be passed in again to be applied to the array type rather
609      than the element type should be returned.  */
610   ATTR_FLAG_ARRAY_NEXT = 4,
611   /* The type passed in is a structure, union or enumeration type being
612      created, and should be modified in place.  */
613   ATTR_FLAG_TYPE_IN_PLACE = 8,
614   /* The attributes are being applied by default to a library function whose
615      name indicates known behavior, and should be silently ignored if they
616      are not in fact compatible with the function type.  */
617   ATTR_FLAG_BUILT_IN = 16,
618   /* A given attribute has been parsed as a C++-11 attribute.  */
619   ATTR_FLAG_CXX11 = 32
620 };
621
622 /* Types used to represent sizes.  */
623 enum size_type_kind {
624   stk_sizetype,         /* Normal representation of sizes in bytes.  */
625   stk_ssizetype,        /* Signed representation of sizes in bytes.  */
626   stk_bitsizetype,      /* Normal representation of sizes in bits.  */
627   stk_sbitsizetype,     /* Signed representation of sizes in bits.  */
628   stk_type_kind_last
629 };
630
631 enum operand_equal_flag {
632   OEP_ONLY_CONST = 1,
633   OEP_PURE_SAME = 2,
634   OEP_CONSTANT_ADDRESS_OF = 4
635 };
636
637 /* Enum and arrays used for tree allocation stats.
638    Keep in sync with tree.c:tree_node_kind_names.  */
639 enum tree_node_kind {
640   d_kind,
641   t_kind,
642   b_kind,
643   s_kind,
644   r_kind,
645   e_kind,
646   c_kind,
647   id_kind,
648   vec_kind,
649   binfo_kind,
650   ssa_name_kind,
651   constr_kind,
652   x_kind,
653   lang_decl,
654   lang_type,
655   omp_clause_kind,
656   all_kinds
657 };
658
659 enum annot_expr_kind {
660   annot_expr_ivdep_kind,
661   annot_expr_no_vector_kind,
662   annot_expr_vector_kind,
663   annot_expr_kind_last
664 };
665
666
667 /*---------------------------------------------------------------------------
668                                 Type definitions
669 ---------------------------------------------------------------------------*/
670 /* When processing aliases at the symbol table level, we need the
671    declaration of target. For this reason we need to queue aliases and
672    process them after all declarations has been produced.  */
673 struct GTY(()) alias_pair {
674   tree decl;
675   tree target;
676 };
677
678 /* An initialization priority.  */
679 typedef unsigned short priority_type;
680
681 /* The type of a callback function for walking over tree structure.  */
682 typedef tree (*walk_tree_fn) (tree *, int *, void *);
683
684 /* The type of a callback function that represents a custom walk_tree.  */
685 typedef tree (*walk_tree_lh) (tree *, int *, tree (*) (tree *, int *, void *),
686                               void *, struct pointer_set_t*);
687
688
689 /*---------------------------------------------------------------------------
690                               Main data structures
691 ---------------------------------------------------------------------------*/
692 /* A tree node can represent a data type, a variable, an expression
693    or a statement.  Each node has a TREE_CODE which says what kind of
694    thing it represents.  Some common codes are:
695    INTEGER_TYPE -- represents a type of integers.
696    ARRAY_TYPE -- represents a type of pointer.
697    VAR_DECL -- represents a declared variable.
698    INTEGER_CST -- represents a constant integer value.
699    PLUS_EXPR -- represents a sum (an expression).
700
701    As for the contents of a tree node: there are some fields
702    that all nodes share.  Each TREE_CODE has various special-purpose
703    fields as well.  The fields of a node are never accessed directly,
704    always through accessor macros.  */
705
706 /* Every kind of tree node starts with this structure,
707    so all nodes have these fields.
708
709    See the accessor macros, defined below, for documentation of the
710    fields, and the table below which connects the fields and the
711    accessor macros.  */
712
713 struct GTY(()) tree_base {
714   ENUM_BITFIELD(tree_code) code : 16;
715
716   unsigned side_effects_flag : 1;
717   unsigned constant_flag : 1;
718   unsigned addressable_flag : 1;
719   unsigned volatile_flag : 1;
720   unsigned readonly_flag : 1;
721   unsigned asm_written_flag: 1;
722   unsigned nowarning_flag : 1;
723   unsigned visited : 1;
724
725   unsigned used_flag : 1;
726   unsigned nothrow_flag : 1;
727   unsigned static_flag : 1;
728   unsigned public_flag : 1;
729   unsigned private_flag : 1;
730   unsigned protected_flag : 1;
731   unsigned deprecated_flag : 1;
732   unsigned default_def_flag : 1;
733
734   union {
735     /* The bits in the following structure should only be used with
736        accessor macros that constrain inputs with tree checking.  */
737     struct {
738       unsigned lang_flag_0 : 1;
739       unsigned lang_flag_1 : 1;
740       unsigned lang_flag_2 : 1;
741       unsigned lang_flag_3 : 1;
742       unsigned lang_flag_4 : 1;
743       unsigned lang_flag_5 : 1;
744       unsigned lang_flag_6 : 1;
745       unsigned saturating_flag : 1;
746
747       unsigned unsigned_flag : 1;
748       unsigned packed_flag : 1;
749       unsigned user_align : 1;
750       unsigned nameless_flag : 1;
751       unsigned atomic_flag : 1;
752       unsigned spare0 : 3;
753
754       unsigned spare1 : 8;
755
756       /* This field is only used with TREE_TYPE nodes; the only reason it is
757          present in tree_base instead of tree_type is to save space.  The size
758          of the field must be large enough to hold addr_space_t values.  */
759       unsigned address_space : 8;
760     } bits;
761     /* The following fields are present in tree_base to save space.  The
762        nodes using them do not require any of the flags above and so can
763        make better use of the 4-byte sized word.  */
764     /* VEC length.  This field is only used with TREE_VEC.  */
765     int length;
766     /* SSA version number.  This field is only used with SSA_NAME.  */
767     unsigned int version;
768   } GTY((skip(""))) u;
769 };
770
771 /* The following table lists the uses of each of the above flags and
772    for which types of nodes they are defined.
773
774    addressable_flag:
775
776        TREE_ADDRESSABLE in
777            VAR_DECL, PARM_DECL, RESULT_DECL, FUNCTION_DECL, LABEL_DECL
778            SSA_NAME
779            all types
780            CONSTRUCTOR, IDENTIFIER_NODE
781            STMT_EXPR
782
783        CALL_EXPR_TAILCALL in
784            CALL_EXPR
785
786        CASE_LOW_SEEN in
787            CASE_LABEL_EXPR
788
789        PREDICT_EXPR_OUTCOME in
790            PREDICT_EXPR
791
792    static_flag:
793
794        TREE_STATIC in
795            VAR_DECL, FUNCTION_DECL
796            CONSTRUCTOR
797
798        TREE_NO_TRAMPOLINE in
799            ADDR_EXPR
800
801        BINFO_VIRTUAL_P in
802            TREE_BINFO
803
804        TREE_SYMBOL_REFERENCED in
805            IDENTIFIER_NODE
806
807        CLEANUP_EH_ONLY in
808            TARGET_EXPR, WITH_CLEANUP_EXPR
809
810        TRY_CATCH_IS_CLEANUP in
811            TRY_CATCH_EXPR
812
813        ASM_INPUT_P in
814            ASM_EXPR
815
816        TYPE_REF_CAN_ALIAS_ALL in
817            POINTER_TYPE, REFERENCE_TYPE
818
819        CASE_HIGH_SEEN in
820            CASE_LABEL_EXPR
821
822        ENUM_IS_SCOPED in
823            ENUMERAL_TYPE
824
825        TRANSACTION_EXPR_OUTER in
826            TRANSACTION_EXPR
827
828        SSA_NAME_ANTI_RANGE_P in
829            SSA_NAME
830
831    public_flag:
832
833        TREE_OVERFLOW in
834            INTEGER_CST, REAL_CST, COMPLEX_CST, VECTOR_CST
835
836        TREE_PUBLIC in
837            VAR_DECL, FUNCTION_DECL
838            IDENTIFIER_NODE
839
840        CONSTRUCTOR_NO_CLEARING in
841            CONSTRUCTOR
842
843        ASM_VOLATILE_P in
844            ASM_EXPR
845
846        CALL_EXPR_VA_ARG_PACK in
847            CALL_EXPR
848
849        TYPE_CACHED_VALUES_P in
850            all types
851
852        SAVE_EXPR_RESOLVED_P in
853            SAVE_EXPR
854
855        OMP_CLAUSE_LASTPRIVATE_FIRSTPRIVATE in
856            OMP_CLAUSE_LASTPRIVATE
857
858        OMP_CLAUSE_PRIVATE_DEBUG in
859            OMP_CLAUSE_PRIVATE
860
861        OMP_CLAUSE_LINEAR_NO_COPYIN in
862            OMP_CLAUSE_LINEAR
863
864        OMP_CLAUSE_MAP_ZERO_BIAS_ARRAY_SECTION in
865            OMP_CLAUSE_MAP
866
867        OMP_CLAUSE_REDUCTION_OMP_ORIG_REF in
868            OMP_CLAUSE_REDUCTION
869
870        TRANSACTION_EXPR_RELAXED in
871            TRANSACTION_EXPR
872
873    private_flag:
874
875        TREE_PRIVATE in
876            all decls
877
878        CALL_EXPR_RETURN_SLOT_OPT in
879            CALL_EXPR
880
881        OMP_SECTION_LAST in
882            OMP_SECTION
883
884        OMP_PARALLEL_COMBINED in
885            OMP_PARALLEL
886
887        OMP_ATOMIC_SEQ_CST in
888            OMP_ATOMIC*
889
890        OMP_CLAUSE_PRIVATE_OUTER_REF in
891            OMP_CLAUSE_PRIVATE
892
893        OMP_CLAUSE_LINEAR_NO_COPYOUT in
894            OMP_CLAUSE_LINEAR
895
896        TYPE_REF_IS_RVALUE in
897            REFERENCE_TYPE
898
899        ENUM_IS_OPAQUE in
900            ENUMERAL_TYPE
901
902    protected_flag:
903
904        TREE_PROTECTED in
905            BLOCK
906            all decls
907
908        CALL_FROM_THUNK_P and
909        CALL_ALLOCA_FOR_VAR_P in
910            CALL_EXPR
911
912        OMP_CLAUSE_LINEAR_VARIABLE_STRIDE in
913            OMP_CLAUSE_LINEAR
914
915    side_effects_flag:
916
917        TREE_SIDE_EFFECTS in
918            all expressions
919            all decls
920            all constants
921
922        FORCED_LABEL in
923            LABEL_DECL
924
925    volatile_flag:
926
927        TREE_THIS_VOLATILE in
928            all expressions
929            all decls
930
931        TYPE_VOLATILE in
932            all types
933
934    readonly_flag:
935
936        TREE_READONLY in
937            all expressions
938            all decls
939
940        TYPE_READONLY in
941            all types
942
943    constant_flag:
944
945        TREE_CONSTANT in
946            all expressions
947            all decls
948            all constants
949
950        TYPE_SIZES_GIMPLIFIED in
951            all types
952
953    unsigned_flag:
954
955        TYPE_UNSIGNED in
956            all types
957
958        DECL_UNSIGNED in
959            all decls
960
961    asm_written_flag:
962
963        TREE_ASM_WRITTEN in
964            VAR_DECL, FUNCTION_DECL, TYPE_DECL
965            RECORD_TYPE, UNION_TYPE, QUAL_UNION_TYPE
966            BLOCK, STRING_CST
967
968        SSA_NAME_OCCURS_IN_ABNORMAL_PHI in
969            SSA_NAME
970
971    used_flag:
972
973        TREE_USED in
974            all expressions
975            all decls
976            IDENTIFIER_NODE
977
978    nothrow_flag:
979
980        TREE_NOTHROW in
981            CALL_EXPR
982            FUNCTION_DECL
983
984        TYPE_ALIGN_OK in
985            all types
986
987        TREE_THIS_NOTRAP in
988           INDIRECT_REF, MEM_REF, TARGET_MEM_REF, ARRAY_REF, ARRAY_RANGE_REF
989
990        SSA_NAME_IN_FREELIST in
991           SSA_NAME
992
993        VAR_DECL_NONALIASED in
994           VAR_DECL
995
996    deprecated_flag:
997
998        TREE_DEPRECATED in
999            all decls
1000            all types
1001
1002        IDENTIFIER_TRANSPARENT_ALIAS in
1003            IDENTIFIER_NODE
1004
1005    visited:
1006
1007        TREE_VISITED in
1008            all trees (used liberally by many passes)
1009
1010    saturating_flag:
1011
1012        TYPE_SATURATING in
1013            all types
1014
1015        VAR_DECL_IS_VIRTUAL_OPERAND in
1016            VAR_DECL
1017
1018    nowarning_flag:
1019
1020        TREE_NO_WARNING in
1021            all expressions
1022            all decls
1023
1024        TYPE_ARTIFICIAL in
1025            all types
1026
1027    default_def_flag:
1028
1029        TYPE_VECTOR_OPAQUE in
1030            VECTOR_TYPE
1031
1032        SSA_NAME_IS_DEFAULT_DEF in
1033            SSA_NAME
1034
1035        DECL_NONLOCAL_FRAME in
1036            VAR_DECL
1037
1038        TYPE_FINAL_P in
1039            RECORD_TYPE, UNION_TYPE and QUAL_UNION_TYPE
1040 */
1041
1042 struct GTY(()) tree_typed {
1043   struct tree_base base;
1044   tree type;
1045 };
1046
1047 struct GTY(()) tree_common {
1048   struct tree_typed typed;
1049   tree chain;
1050 };
1051
1052 struct GTY(()) tree_int_cst {
1053   struct tree_typed typed;
1054   double_int int_cst;
1055 };
1056
1057
1058 struct GTY(()) tree_real_cst {
1059   struct tree_typed typed;
1060   struct real_value * real_cst_ptr;
1061 };
1062
1063 struct GTY(()) tree_fixed_cst {
1064   struct tree_typed typed;
1065   struct fixed_value * fixed_cst_ptr;
1066 };
1067
1068 struct GTY(()) tree_string {
1069   struct tree_typed typed;
1070   int length;
1071   char str[1];
1072 };
1073
1074 struct GTY(()) tree_complex {
1075   struct tree_typed typed;
1076   tree real;
1077   tree imag;
1078 };
1079
1080 struct GTY(()) tree_vector {
1081   struct tree_typed typed;
1082   tree GTY ((length ("TYPE_VECTOR_SUBPARTS (TREE_TYPE ((tree)&%h))"))) elts[1];
1083 };
1084
1085 struct GTY(()) tree_identifier {
1086   struct tree_common common;
1087   struct ht_identifier id;
1088 };
1089
1090 struct GTY(()) tree_list {
1091   struct tree_common common;
1092   tree purpose;
1093   tree value;
1094 };
1095
1096 struct GTY(()) tree_vec {
1097   struct tree_common common;
1098   tree GTY ((length ("TREE_VEC_LENGTH ((tree)&%h)"))) a[1];
1099 };
1100
1101 /* A single element of a CONSTRUCTOR. VALUE holds the actual value of the
1102    element. INDEX can optionally design the position of VALUE: in arrays,
1103    it is the index where VALUE has to be placed; in structures, it is the
1104    FIELD_DECL of the member.  */
1105 struct GTY(()) constructor_elt {
1106   tree index;
1107   tree value;
1108 };
1109
1110 struct GTY(()) tree_constructor {
1111   struct tree_typed typed;
1112   vec<constructor_elt, va_gc> *elts;
1113 };
1114
1115 enum omp_clause_depend_kind
1116 {
1117   OMP_CLAUSE_DEPEND_IN,
1118   OMP_CLAUSE_DEPEND_OUT,
1119   OMP_CLAUSE_DEPEND_INOUT,
1120   OMP_CLAUSE_DEPEND_LAST
1121 };
1122
1123 enum omp_clause_map_kind
1124 {
1125   OMP_CLAUSE_MAP_ALLOC,
1126   OMP_CLAUSE_MAP_TO,
1127   OMP_CLAUSE_MAP_FROM,
1128   OMP_CLAUSE_MAP_TOFROM,
1129   /* The following kind is an internal only map kind, used for pointer based
1130      array sections.  OMP_CLAUSE_SIZE for these is not the pointer size,
1131      which is implicitly POINTER_SIZE / BITS_PER_UNIT, but the bias.  */
1132   OMP_CLAUSE_MAP_POINTER,
1133   OMP_CLAUSE_MAP_LAST
1134 };
1135
1136 enum omp_clause_proc_bind_kind
1137 {
1138   /* Numbers should match omp_proc_bind_t enum in omp.h.  */
1139   OMP_CLAUSE_PROC_BIND_FALSE = 0,
1140   OMP_CLAUSE_PROC_BIND_TRUE = 1,
1141   OMP_CLAUSE_PROC_BIND_MASTER = 2,
1142   OMP_CLAUSE_PROC_BIND_CLOSE = 3,
1143   OMP_CLAUSE_PROC_BIND_SPREAD = 4,
1144   OMP_CLAUSE_PROC_BIND_LAST
1145 };
1146
1147 struct GTY(()) tree_exp {
1148   struct tree_typed typed;
1149   location_t locus;
1150   tree GTY ((special ("tree_exp"),
1151              desc ("TREE_CODE ((tree) &%0)")))
1152     operands[1];
1153 };
1154
1155 /* Immediate use linking structure.  This structure is used for maintaining
1156    a doubly linked list of uses of an SSA_NAME.  */
1157 struct GTY(()) ssa_use_operand_t {
1158   struct ssa_use_operand_t* GTY((skip(""))) prev;
1159   struct ssa_use_operand_t* GTY((skip(""))) next;
1160   /* Immediate uses for a given SSA name are maintained as a cyclic
1161      list.  To recognize the root of this list, the location field
1162      needs to point to the original SSA name.  Since statements and
1163      SSA names are of different data types, we need this union.  See
1164      the explanation in struct imm_use_iterator.  */
1165   union { gimple stmt; tree ssa_name; } GTY((skip(""))) loc;
1166   tree *GTY((skip(""))) use;
1167 };
1168
1169 struct GTY(()) tree_ssa_name {
1170   struct tree_typed typed;
1171
1172   /* _DECL wrapped by this SSA name.  */
1173   tree var;
1174
1175   /* Statement that defines this SSA name.  */
1176   gimple def_stmt;
1177
1178   /* Value range information.  */
1179   union ssa_name_info_type {
1180     /* Pointer attributes used for alias analysis.  */
1181     struct GTY ((tag ("0"))) ptr_info_def *ptr_info;
1182     /* Value range attributes used for zero/sign extension elimination.  */
1183     struct GTY ((tag ("1"))) range_info_def *range_info;
1184   } GTY ((desc ("%1.typed.type ?" \
1185                 "!POINTER_TYPE_P (TREE_TYPE ((tree)&%1)) : 2"))) info;
1186
1187   /* Immediate uses list for this SSA_NAME.  */
1188   struct ssa_use_operand_t imm_uses;
1189 };
1190
1191 struct GTY(()) phi_arg_d {
1192   /* imm_use MUST be the first element in struct because we do some
1193      pointer arithmetic with it.  See phi_arg_index_from_use.  */
1194   struct ssa_use_operand_t imm_use;
1195   tree def;
1196   location_t locus;
1197 };
1198
1199 struct GTY(()) tree_omp_clause {
1200   struct tree_common common;
1201   location_t locus;
1202   enum omp_clause_code code;
1203   union omp_clause_subcode {
1204     enum omp_clause_default_kind   default_kind;
1205     enum omp_clause_schedule_kind  schedule_kind;
1206     enum omp_clause_depend_kind    depend_kind;
1207     enum omp_clause_map_kind       map_kind;
1208     enum omp_clause_proc_bind_kind proc_bind_kind;
1209     enum tree_code                 reduction_code;
1210   } GTY ((skip)) subcode;
1211
1212   /* The gimplification of OMP_CLAUSE_REDUCTION_{INIT,MERGE} for omp-low's
1213      usage.  */
1214   gimple_seq gimple_reduction_init;
1215   gimple_seq gimple_reduction_merge;
1216
1217   tree GTY ((length ("omp_clause_num_ops[OMP_CLAUSE_CODE ((tree)&%h)]")))
1218     ops[1];
1219 };
1220
1221 struct GTY(()) tree_block {
1222   struct tree_base base;
1223   tree chain;
1224
1225   unsigned abstract_flag : 1;
1226   unsigned block_num : 31;
1227
1228   location_t locus;
1229
1230   tree vars;
1231   vec<tree, va_gc> *nonlocalized_vars;
1232
1233   tree subblocks;
1234   tree supercontext;
1235   tree abstract_origin;
1236   tree fragment_origin;
1237   tree fragment_chain;
1238 };
1239
1240 struct GTY(()) tree_type_common {
1241   struct tree_common common;
1242   tree size;
1243   tree size_unit;
1244   tree attributes;
1245   unsigned int uid;
1246
1247   unsigned int precision : 10;
1248   unsigned no_force_blk_flag : 1;
1249   unsigned needs_constructing_flag : 1;
1250   unsigned transparent_aggr_flag : 1;
1251   unsigned restrict_flag : 1;
1252   unsigned contains_placeholder_bits : 2;
1253
1254   ENUM_BITFIELD(machine_mode) mode : 8;
1255
1256   unsigned string_flag : 1;
1257   unsigned lang_flag_0 : 1;
1258   unsigned lang_flag_1 : 1;
1259   unsigned lang_flag_2 : 1;
1260   unsigned lang_flag_3 : 1;
1261   unsigned lang_flag_4 : 1;
1262   unsigned lang_flag_5 : 1;
1263   unsigned lang_flag_6 : 1;
1264
1265   unsigned int align;
1266   alias_set_type alias_set;
1267   tree pointer_to;
1268   tree reference_to;
1269   union tree_type_symtab {
1270     int GTY ((tag ("TYPE_SYMTAB_IS_ADDRESS"))) address;
1271     const char * GTY ((tag ("TYPE_SYMTAB_IS_POINTER"))) pointer;
1272     struct die_struct * GTY ((tag ("TYPE_SYMTAB_IS_DIE"))) die;
1273   } GTY ((desc ("debug_hooks->tree_type_symtab_field"))) symtab;
1274   tree canonical;
1275   tree next_variant;
1276   tree main_variant;
1277   tree context;
1278   tree name;
1279 };
1280
1281 struct GTY(()) tree_type_with_lang_specific {
1282   struct tree_type_common common;
1283   /* Points to a structure whose details depend on the language in use.  */
1284   struct lang_type *lang_specific;
1285 };
1286
1287 struct GTY(()) tree_type_non_common {
1288   struct tree_type_with_lang_specific with_lang_specific;
1289   tree values;
1290   tree minval;
1291   tree maxval;
1292   tree binfo;
1293 };
1294
1295 struct GTY (()) tree_binfo {
1296   struct tree_common common;
1297
1298   tree offset;
1299   tree vtable;
1300   tree virtuals;
1301   tree vptr_field;
1302   vec<tree, va_gc> *base_accesses;
1303   tree inheritance;
1304
1305   tree vtt_subvtt;
1306   tree vtt_vptr;
1307
1308   vec<tree, va_gc> base_binfos;
1309 };
1310
1311 struct GTY(()) tree_decl_minimal {
1312   struct tree_common common;
1313   location_t locus;
1314   unsigned int uid;
1315   tree name;
1316   tree context;
1317 };
1318
1319 struct GTY(()) tree_decl_common {
1320   struct tree_decl_minimal common;
1321   tree size;
1322
1323   ENUM_BITFIELD(machine_mode) mode : 8;
1324
1325   unsigned nonlocal_flag : 1;
1326   unsigned virtual_flag : 1;
1327   unsigned ignored_flag : 1;
1328   unsigned abstract_flag : 1;
1329   unsigned artificial_flag : 1;
1330   unsigned preserve_flag: 1;
1331   unsigned debug_expr_is_from : 1;
1332
1333   unsigned lang_flag_0 : 1;
1334   unsigned lang_flag_1 : 1;
1335   unsigned lang_flag_2 : 1;
1336   unsigned lang_flag_3 : 1;
1337   unsigned lang_flag_4 : 1;
1338   unsigned lang_flag_5 : 1;
1339   unsigned lang_flag_6 : 1;
1340   unsigned lang_flag_7 : 1;
1341   unsigned lang_flag_8 : 1;
1342
1343   /* In VAR_DECL and PARM_DECL, this is DECL_REGISTER.  */
1344   unsigned decl_flag_0 : 1;
1345   /* In FIELD_DECL, this is DECL_BIT_FIELD
1346      In VAR_DECL and FUNCTION_DECL, this is DECL_EXTERNAL.
1347      In TYPE_DECL, this is TYPE_DECL_SUPPRESS_DEBUG.  */
1348   unsigned decl_flag_1 : 1;
1349   /* In FIELD_DECL, this is DECL_NONADDRESSABLE_P
1350      In VAR_DECL, PARM_DECL and RESULT_DECL, this is
1351      DECL_HAS_VALUE_EXPR_P.  */
1352   unsigned decl_flag_2 : 1;
1353   /* 1 bit unused.  */
1354   unsigned decl_flag_3 : 1;
1355   /* Logically, these two would go in a theoretical base shared by var and
1356      parm decl. */
1357   unsigned gimple_reg_flag : 1;
1358   /* In VAR_DECL, PARM_DECL and RESULT_DECL, this is DECL_BY_REFERENCE.  */
1359   unsigned decl_by_reference_flag : 1;
1360   /* In a VAR_DECL and PARM_DECL, this is DECL_READ_P.  */
1361   unsigned decl_read_flag : 1;
1362   /* In a VAR_DECL or RESULT_DECL, this is DECL_NONSHAREABLE.  */
1363   unsigned decl_nonshareable_flag : 1;
1364
1365   /* DECL_OFFSET_ALIGN, used only for FIELD_DECLs.  */
1366   unsigned int off_align : 8;
1367
1368   /* 24 bits unused.  */
1369
1370   /* DECL_ALIGN.  It should have the same size as TYPE_ALIGN.  */
1371   unsigned int align;
1372
1373   /* UID for points-to sets, stable over copying from inlining.  */
1374   unsigned int pt_uid;
1375
1376   tree size_unit;
1377   tree initial;
1378   tree attributes;
1379   tree abstract_origin;
1380
1381   /* Points to a structure whose details depend on the language in use.  */
1382   struct lang_decl *lang_specific;
1383 };
1384
1385 struct GTY(()) tree_decl_with_rtl {
1386   struct tree_decl_common common;
1387   rtx rtl;
1388 };
1389
1390 struct GTY(()) tree_field_decl {
1391   struct tree_decl_common common;
1392
1393   tree offset;
1394   tree bit_field_type;
1395   tree qualifier;
1396   tree bit_offset;
1397   tree fcontext;
1398 };
1399
1400 struct GTY(()) tree_label_decl {
1401   struct tree_decl_with_rtl common;
1402   int label_decl_uid;
1403   int eh_landing_pad_nr;
1404 };
1405
1406 struct GTY(()) tree_result_decl {
1407   struct tree_decl_with_rtl common;
1408 };
1409
1410 struct GTY(()) tree_const_decl {
1411   struct tree_decl_common common;
1412 };
1413
1414 struct GTY(()) tree_parm_decl {
1415   struct tree_decl_with_rtl common;
1416   rtx incoming_rtl;
1417 };
1418
1419 struct GTY(()) tree_decl_with_vis {
1420  struct tree_decl_with_rtl common;
1421  tree assembler_name;
1422  tree section_name;
1423  tree comdat_group;
1424
1425  /* Belong to VAR_DECL exclusively.  */
1426  unsigned defer_output : 1;
1427  unsigned hard_register : 1;
1428  unsigned common_flag : 1;
1429  unsigned in_text_section : 1;
1430  unsigned in_constant_pool : 1;
1431  unsigned dllimport_flag : 1;
1432  /* Don't belong to VAR_DECL exclusively.  */
1433  unsigned weak_flag : 1;
1434  /* When SECTION_NAME is implied by -ffunction-section.  */
1435  unsigned implicit_section_name_p : 1;
1436
1437  unsigned seen_in_bind_expr : 1;
1438  unsigned comdat_flag : 1;
1439  ENUM_BITFIELD(symbol_visibility) visibility : 2;
1440  unsigned visibility_specified : 1;
1441  /* Belongs to VAR_DECL exclusively.  */
1442  ENUM_BITFIELD(tls_model) tls_model : 3;
1443
1444  /* Belong to FUNCTION_DECL exclusively.  */
1445  unsigned init_priority_p : 1;
1446  /* Used by C++ only.  Might become a generic decl flag.  */
1447  unsigned shadowed_for_var_p : 1;
1448  /* Belong to FUNCTION_DECL exclusively.  */
1449  unsigned cxx_constructor : 1;
1450  /* Belong to FUNCTION_DECL exclusively.  */
1451  unsigned cxx_destructor : 1;
1452  /* Belong to FUNCTION_DECL exclusively.  */
1453  unsigned final : 1;
1454  /* 11 unused bits. */
1455 };
1456
1457 struct GTY(()) tree_var_decl {
1458   struct tree_decl_with_vis common;
1459 };
1460
1461 struct GTY(()) tree_decl_non_common {
1462   struct tree_decl_with_vis common;
1463   /* C++ uses this in namespaces.  */
1464   tree saved_tree;
1465   /* C++ uses this in templates.  */
1466   tree arguments;
1467   /* Almost all FE's use this.  */
1468   tree result;
1469   /* C++ uses this in namespaces and function_decls.  */
1470   tree vindex;
1471 };
1472
1473 /* FUNCTION_DECL inherits from DECL_NON_COMMON because of the use of the
1474    arguments/result/saved_tree fields by front ends.   It was either inherit
1475    FUNCTION_DECL from non_common, or inherit non_common from FUNCTION_DECL,
1476    which seemed a bit strange.  */
1477
1478 struct GTY(()) tree_function_decl {
1479   struct tree_decl_non_common common;
1480
1481   struct function *f;
1482
1483   /* The personality function. Used for stack unwinding. */
1484   tree personality;
1485
1486   /* Function specific options that are used by this function.  */
1487   tree function_specific_target;        /* target options */
1488   tree function_specific_optimization;  /* optimization options */
1489
1490   /* In a FUNCTION_DECL for which DECL_BUILT_IN holds, this is
1491      DECL_FUNCTION_CODE.  Otherwise unused.
1492      ???  The bitfield needs to be able to hold all target function
1493           codes as well.  */
1494   ENUM_BITFIELD(built_in_function) function_code : 11;
1495   ENUM_BITFIELD(built_in_class) built_in_class : 2;
1496
1497   unsigned static_ctor_flag : 1;
1498   unsigned static_dtor_flag : 1;
1499   unsigned uninlinable : 1;
1500
1501   unsigned possibly_inlined : 1;
1502   unsigned novops_flag : 1;
1503   unsigned returns_twice_flag : 1;
1504   unsigned malloc_flag : 1;
1505   unsigned operator_new_flag : 1;
1506   unsigned declared_inline_flag : 1;
1507   unsigned regdecl_flag : 1;
1508   unsigned no_inline_warning_flag : 1;
1509
1510   unsigned no_instrument_function_entry_exit : 1;
1511   unsigned no_limit_stack : 1;
1512   unsigned disregard_inline_limits : 1;
1513   unsigned pure_flag : 1;
1514   unsigned looping_const_or_pure_flag : 1;
1515   unsigned has_debug_args_flag : 1;
1516   unsigned tm_clone_flag : 1;
1517   unsigned versioned_function : 1;
1518   /* No bits left.  */
1519 };
1520
1521 struct GTY(()) tree_translation_unit_decl {
1522   struct tree_decl_common common;
1523   /* Source language of this translation unit.  Used for DWARF output.  */
1524   const char * GTY((skip(""))) language;
1525   /* TODO: Non-optimization used to build this translation unit.  */
1526   /* TODO: Root of a partial DWARF tree for global types and decls.  */
1527 };
1528
1529 struct GTY(()) tree_type_decl {
1530   struct tree_decl_non_common common;
1531
1532 };
1533
1534 struct GTY ((chain_next ("%h.next"), chain_prev ("%h.prev"))) tree_statement_list_node
1535  {
1536   struct tree_statement_list_node *prev;
1537   struct tree_statement_list_node *next;
1538   tree stmt;
1539 };
1540
1541 struct GTY(()) tree_statement_list
1542  {
1543   struct tree_typed typed;
1544   struct tree_statement_list_node *head;
1545   struct tree_statement_list_node *tail;
1546 };
1547
1548
1549 /* Optimization options used by a function.  */
1550
1551 struct GTY(()) tree_optimization_option {
1552   struct tree_common common;
1553
1554   /* The optimization options used by the user.  */
1555   struct cl_optimization opts;
1556
1557   /* Target optabs for this set of optimization options.  This is of
1558      type `struct target_optabs *'.  */
1559   void *GTY ((atomic)) optabs;
1560
1561   /* The value of this_target_optabs against which the optabs above were
1562      generated.  */
1563   struct target_optabs *GTY ((skip)) base_optabs;
1564 };
1565
1566 /* Forward declaration, defined in target-globals.h.  */
1567
1568 struct GTY(()) target_globals;
1569
1570 /* Target options used by a function.  */
1571
1572 struct GTY(()) tree_target_option {
1573   struct tree_common common;
1574
1575   /* Target globals for the corresponding target option.  */
1576   struct target_globals *globals;
1577
1578   /* The optimization options used by the user.  */
1579   struct cl_target_option opts;
1580 };
1581
1582 /* Define the overall contents of a tree node.
1583    It may be any of the structures declared above
1584    for various types of node.  */
1585 union GTY ((ptr_alias (union lang_tree_node),
1586             desc ("tree_node_structure (&%h)"), variable_size)) tree_node {
1587   struct tree_base GTY ((tag ("TS_BASE"))) base;
1588   struct tree_typed GTY ((tag ("TS_TYPED"))) typed;
1589   struct tree_common GTY ((tag ("TS_COMMON"))) common;
1590   struct tree_int_cst GTY ((tag ("TS_INT_CST"))) int_cst;
1591   struct tree_real_cst GTY ((tag ("TS_REAL_CST"))) real_cst;
1592   struct tree_fixed_cst GTY ((tag ("TS_FIXED_CST"))) fixed_cst;
1593   struct tree_vector GTY ((tag ("TS_VECTOR"))) vector;
1594   struct tree_string GTY ((tag ("TS_STRING"))) string;
1595   struct tree_complex GTY ((tag ("TS_COMPLEX"))) complex;
1596   struct tree_identifier GTY ((tag ("TS_IDENTIFIER"))) identifier;
1597   struct tree_decl_minimal GTY((tag ("TS_DECL_MINIMAL"))) decl_minimal;
1598   struct tree_decl_common GTY ((tag ("TS_DECL_COMMON"))) decl_common;
1599   struct tree_decl_with_rtl GTY ((tag ("TS_DECL_WRTL"))) decl_with_rtl;
1600   struct tree_decl_non_common  GTY ((tag ("TS_DECL_NON_COMMON")))
1601     decl_non_common;
1602   struct tree_parm_decl  GTY  ((tag ("TS_PARM_DECL"))) parm_decl;
1603   struct tree_decl_with_vis GTY ((tag ("TS_DECL_WITH_VIS"))) decl_with_vis;
1604   struct tree_var_decl GTY ((tag ("TS_VAR_DECL"))) var_decl;
1605   struct tree_field_decl GTY ((tag ("TS_FIELD_DECL"))) field_decl;
1606   struct tree_label_decl GTY ((tag ("TS_LABEL_DECL"))) label_decl;
1607   struct tree_result_decl GTY ((tag ("TS_RESULT_DECL"))) result_decl;
1608   struct tree_const_decl GTY ((tag ("TS_CONST_DECL"))) const_decl;
1609   struct tree_type_decl GTY ((tag ("TS_TYPE_DECL"))) type_decl;
1610   struct tree_function_decl GTY ((tag ("TS_FUNCTION_DECL"))) function_decl;
1611   struct tree_translation_unit_decl GTY ((tag ("TS_TRANSLATION_UNIT_DECL")))
1612     translation_unit_decl;
1613   struct tree_type_common GTY ((tag ("TS_TYPE_COMMON"))) type_common;
1614   struct tree_type_with_lang_specific GTY ((tag ("TS_TYPE_WITH_LANG_SPECIFIC")))
1615     type_with_lang_specific;
1616   struct tree_type_non_common GTY ((tag ("TS_TYPE_NON_COMMON")))
1617     type_non_common;
1618   struct tree_list GTY ((tag ("TS_LIST"))) list;
1619   struct tree_vec GTY ((tag ("TS_VEC"))) vec;
1620   struct tree_exp GTY ((tag ("TS_EXP"))) exp;
1621   struct tree_ssa_name GTY ((tag ("TS_SSA_NAME"))) ssa_name;
1622   struct tree_block GTY ((tag ("TS_BLOCK"))) block;
1623   struct tree_binfo GTY ((tag ("TS_BINFO"))) binfo;
1624   struct tree_statement_list GTY ((tag ("TS_STATEMENT_LIST"))) stmt_list;
1625   struct tree_constructor GTY ((tag ("TS_CONSTRUCTOR"))) constructor;
1626   struct tree_omp_clause GTY ((tag ("TS_OMP_CLAUSE"))) omp_clause;
1627   struct tree_optimization_option GTY ((tag ("TS_OPTIMIZATION"))) optimization;
1628   struct tree_target_option GTY ((tag ("TS_TARGET_OPTION"))) target_option;
1629 };
1630
1631 /* Structure describing an attribute and a function to handle it.  */
1632 struct attribute_spec {
1633   /* The name of the attribute (without any leading or trailing __),
1634      or NULL to mark the end of a table of attributes.  */
1635   const char *name;
1636   /* The minimum length of the list of arguments of the attribute.  */
1637   int min_length;
1638   /* The maximum length of the list of arguments of the attribute
1639      (-1 for no maximum).  */
1640   int max_length;
1641   /* Whether this attribute requires a DECL.  If it does, it will be passed
1642      from types of DECLs, function return types and array element types to
1643      the DECLs, function types and array types respectively; but when
1644      applied to a type in any other circumstances, it will be ignored with
1645      a warning.  (If greater control is desired for a given attribute,
1646      this should be false, and the flags argument to the handler may be
1647      used to gain greater control in that case.)  */
1648   bool decl_required;
1649   /* Whether this attribute requires a type.  If it does, it will be passed
1650      from a DECL to the type of that DECL.  */
1651   bool type_required;
1652   /* Whether this attribute requires a function (or method) type.  If it does,
1653      it will be passed from a function pointer type to the target type,
1654      and from a function return type (which is not itself a function
1655      pointer type) to the function type.  */
1656   bool function_type_required;
1657   /* Function to handle this attribute.  NODE points to the node to which
1658      the attribute is to be applied.  If a DECL, it should be modified in
1659      place; if a TYPE, a copy should be created.  NAME is the name of the
1660      attribute (possibly with leading or trailing __).  ARGS is the TREE_LIST
1661      of the arguments (which may be NULL).  FLAGS gives further information
1662      about the context of the attribute.  Afterwards, the attributes will
1663      be added to the DECL_ATTRIBUTES or TYPE_ATTRIBUTES, as appropriate,
1664      unless *NO_ADD_ATTRS is set to true (which should be done on error,
1665      as well as in any other cases when the attributes should not be added
1666      to the DECL or TYPE).  Depending on FLAGS, any attributes to be
1667      applied to another type or DECL later may be returned;
1668      otherwise the return value should be NULL_TREE.  This pointer may be
1669      NULL if no special handling is required beyond the checks implied
1670      by the rest of this structure.  */
1671   tree (*handler) (tree *node, tree name, tree args,
1672                    int flags, bool *no_add_attrs);
1673   /* Specifies if attribute affects type's identity.  */
1674   bool affects_type_identity;
1675 };
1676
1677 /* These functions allow a front-end to perform a manual layout of a
1678    RECORD_TYPE.  (For instance, if the placement of subsequent fields
1679    depends on the placement of fields so far.)  Begin by calling
1680    start_record_layout.  Then, call place_field for each of the
1681    fields.  Then, call finish_record_layout.  See layout_type for the
1682    default way in which these functions are used.  */
1683 typedef struct record_layout_info_s {
1684   /* The RECORD_TYPE that we are laying out.  */
1685   tree t;
1686   /* The offset into the record so far, in bytes, not including bits in
1687      BITPOS.  */
1688   tree offset;
1689   /* The last known alignment of SIZE.  */
1690   unsigned int offset_align;
1691   /* The bit position within the last OFFSET_ALIGN bits, in bits.  */
1692   tree bitpos;
1693   /* The alignment of the record so far, in bits.  */
1694   unsigned int record_align;
1695   /* The alignment of the record so far, ignoring #pragma pack and
1696      __attribute__ ((packed)), in bits.  */
1697   unsigned int unpacked_align;
1698   /* The previous field laid out.  */
1699   tree prev_field;
1700   /* The static variables (i.e., class variables, as opposed to
1701      instance variables) encountered in T.  */
1702   vec<tree, va_gc> *pending_statics;
1703   /* Bits remaining in the current alignment group */
1704   int remaining_in_alignment;
1705   /* True if we've seen a packed field that didn't have normal
1706      alignment anyway.  */
1707   int packed_maybe_necessary;
1708 } *record_layout_info;
1709
1710 /* Iterator for going through the function arguments.  */
1711 struct function_args_iterator {
1712   tree next;                    /* TREE_LIST pointing to the next argument */
1713 };
1714
1715 /* Structures to map from a tree to another tree.  */
1716 struct GTY(()) tree_map_base {
1717   tree from;
1718 };
1719
1720 /* Map from a tree to another tree.  */
1721
1722 struct GTY(()) tree_map {
1723   struct tree_map_base base;
1724   unsigned int hash;
1725   tree to;
1726 };
1727
1728 /* Map from a decl tree to another tree.  */
1729 struct GTY(()) tree_decl_map {
1730   struct tree_map_base base;
1731   tree to;
1732 };
1733
1734 /* Map from a tree to an int.  */
1735 struct GTY(()) tree_int_map {
1736   struct tree_map_base base;
1737   unsigned int to;
1738 };
1739
1740 /* Map from a tree to initialization/finalization priorities.  */
1741 struct GTY(()) tree_priority_map {
1742   struct tree_map_base base;
1743   priority_type init;
1744   priority_type fini;
1745 };
1746
1747 /* Map from a decl tree to a tree vector.  */
1748 struct GTY(()) tree_vec_map {
1749   struct tree_map_base base;
1750   vec<tree, va_gc> *to;
1751 };
1752
1753 /* Abstract iterators for CALL_EXPRs.  These static inline definitions
1754    have to go towards the end of tree.h so that union tree_node is fully
1755    defined by this point.  */
1756
1757 /* Structure containing iterator state.  */
1758 struct call_expr_arg_iterator {
1759   tree t;       /* the call_expr */
1760   int n;        /* argument count */
1761   int i;        /* next argument index */
1762 };
1763
1764 struct const_call_expr_arg_iterator {
1765   const_tree t; /* the call_expr */
1766   int n;        /* argument count */
1767   int i;        /* next argument index */
1768 };
1769
1770 /* The builtin_info structure holds the FUNCTION_DECL of the standard builtin
1771    function, and a flag that says if the function is available implicitly, or
1772    whether the user has to code explicit calls to __builtin_<xxx>.  */
1773 struct GTY(()) builtin_info_type {
1774   tree decl[(int)END_BUILTINS];
1775   bool implicit_p[(int)END_BUILTINS];
1776 };
1777
1778
1779 /*---------------------------------------------------------------------------
1780                                 Global variables
1781 ---------------------------------------------------------------------------*/
1782 /* Matrix describing the structures contained in a given tree code.  */
1783 extern unsigned char tree_contains_struct[MAX_TREE_CODES][64];
1784
1785 /* Class of tree given its code.  */
1786 extern const enum tree_code_class tree_code_type[];
1787
1788 /* Each tree code class has an associated string representation.
1789    These must correspond to the tree_code_class entries.  */
1790 extern const char *const tree_code_class_strings[];
1791
1792 /* Number of argument-words in each kind of tree-node.  */
1793 extern const unsigned char tree_code_length[];
1794
1795 /* Vector of all alias pairs for global symbols.  */
1796 extern GTY(()) vec<alias_pair, va_gc> *alias_pairs;
1797
1798 /* Names of all the built_in classes.  */
1799 extern const char *const built_in_class_names[BUILT_IN_LAST];
1800
1801 /* Names of all the built_in functions.  */
1802 extern const char * built_in_names[(int) END_BUILTINS];
1803
1804 /* Number of operands and names for each OMP_CLAUSE node.  */
1805 extern unsigned const char omp_clause_num_ops[];
1806 extern const char * const omp_clause_code_name[];
1807
1808 /* A vector of all translation-units.  */
1809 extern GTY (()) vec<tree, va_gc> *all_translation_units;
1810
1811 /* Vector of standard trees used by the C compiler.  */
1812 extern GTY(()) tree global_trees[TI_MAX];
1813
1814 /* The standard C integer types.  Use integer_type_kind to index into
1815    this array.  */
1816 extern GTY(()) tree integer_types[itk_none];
1817
1818 /* Types used to represent sizes.  */
1819 extern GTY(()) tree sizetype_tab[(int) stk_type_kind_last];
1820
1821 /* Arrays for keeping track of tree node statistics.  */
1822 extern int tree_node_counts[];
1823 extern int tree_node_sizes[];
1824
1825 /* True if we are in gimple form and the actions of the folders need to
1826    be restricted.  False if we are not in gimple form and folding is not
1827    restricted to creating gimple expressions.  */
1828 extern bool in_gimple_form;
1829
1830 /* Functional interface to the builtin functions.  */
1831 extern GTY(()) builtin_info_type builtin_info;
1832
1833 /* If nonzero, an upper limit on alignment of structure fields, in bits,  */
1834 extern unsigned int maximum_field_alignment;
1835
1836 /* Nonzero means lvalues are limited to those valid in pedantic ANSI C.
1837    Zero means allow extended lvalues.  */
1838 extern int pedantic_lvalues;
1839
1840 /* Points to the FUNCTION_DECL of the function whose body we are reading.  */
1841 extern GTY(()) tree current_function_decl;
1842
1843 /* Nonzero means a FUNC_BEGIN label was emitted.  */
1844 extern GTY(()) const char * current_function_func_begin_label;
1845
1846 #endif  // GCC_TREE_CORE_H