]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/tree.h
* output.h (__gcc_host_wide_int__): Move to hwint.h.
[thirdparty/gcc.git] / gcc / tree.h
CommitLineData
d72a838e 1/* Front-end tree definitions for GNU compiler.
d513ec2f 2 Copyright (C) 1989, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
3637bb87 3 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
68d6de5b 4 Free Software Foundation, Inc.
d72a838e 5
f12b58b3 6This file is part of GCC.
d72a838e 7
f12b58b3 8GCC is free software; you can redistribute it and/or modify it under
9the terms of the GNU General Public License as published by the Free
8c4c00c1 10Software Foundation; either version 3, or (at your option) any later
f12b58b3 11version.
d72a838e 12
f12b58b3 13GCC is distributed in the hope that it will be useful, but WITHOUT ANY
14WARRANTY; without even the implied warranty of MERCHANTABILITY or
15FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
16for more details.
d72a838e 17
18You should have received a copy of the GNU General Public License
8c4c00c1 19along with GCC; see the file COPYING3. If not see
20<http://www.gnu.org/licenses/>. */
d72a838e 21
b229f760 22#ifndef GCC_TREE_H
23#define GCC_TREE_H
24
503c6e8e 25#include "hashtab.h"
d72a838e 26#include "machmode.h"
5a8a92a0 27#include "input.h"
674b05f5 28#include "statistics.h"
f6cc6a08 29#include "vec.h"
115133dd 30#include "vecir.h"
ad3827a6 31#include "double-int.h"
a7a46268 32#include "real.h"
33#include "fixed-value.h"
32c2fdea 34#include "alias.h"
f3f006ad 35#include "flags.h"
d72a838e 36
b8dea3b2 37/* Codes of tree nodes */
d72a838e 38
39#define DEFTREECODE(SYM, STRING, TYPE, NARGS) SYM,
e014fc6a 40#define END_OF_BASE_TREE_CODES LAST_AND_UNUSED_TREE_CODE,
d72a838e 41
42enum tree_code {
e014fc6a 43#include "all-tree.def"
44MAX_TREE_CODES
d72a838e 45};
46
47#undef DEFTREECODE
e014fc6a 48#undef END_OF_BASE_TREE_CODES
d72a838e 49
5ca99950 50extern unsigned char tree_contains_struct[MAX_TREE_CODES][64];
5ded8c6f 51#define CODE_CONTAINS_STRUCT(CODE, STRUCT) (tree_contains_struct[(CODE)][(STRUCT)])
52
9b88d08d 53/* Macros for initializing `tree_contains_struct'. */
54#define MARK_TS_BASE(C) \
55 do { \
56 tree_contains_struct[C][TS_BASE] = 1; \
57 } while (0)
58
59#define MARK_TS_TYPED(C) \
60 do { \
61 MARK_TS_BASE (C); \
62 tree_contains_struct[C][TS_TYPED] = 1; \
63 } while (0)
64
65#define MARK_TS_COMMON(C) \
66 do { \
67 MARK_TS_TYPED (C); \
68 tree_contains_struct[C][TS_COMMON] = 1; \
69 } while (0)
70
8f2eb9e1 71#define MARK_TS_TYPE_COMMON(C) \
72 do { \
73 MARK_TS_COMMON (C); \
74 tree_contains_struct[C][TS_TYPE_COMMON] = 1; \
75 } while (0)
76
77#define MARK_TS_TYPE_WITH_LANG_SPECIFIC(C) \
78 do { \
79 MARK_TS_TYPE_COMMON (C); \
80 tree_contains_struct[C][TS_TYPE_WITH_LANG_SPECIFIC] = 1; \
81 } while (0)
82
9b88d08d 83#define MARK_TS_DECL_MINIMAL(C) \
84 do { \
85 MARK_TS_COMMON (C); \
86 tree_contains_struct[C][TS_DECL_MINIMAL] = 1; \
87 } while (0)
88
89#define MARK_TS_DECL_COMMON(C) \
90 do { \
91 MARK_TS_DECL_MINIMAL (C); \
92 tree_contains_struct[C][TS_DECL_COMMON] = 1; \
93 } while (0)
94
95#define MARK_TS_DECL_WRTL(C) \
96 do { \
97 MARK_TS_DECL_COMMON (C); \
98 tree_contains_struct[C][TS_DECL_WRTL] = 1; \
99 } while (0)
100
101#define MARK_TS_DECL_WITH_VIS(C) \
102 do { \
103 MARK_TS_DECL_WRTL (C); \
104 tree_contains_struct[C][TS_DECL_WITH_VIS] = 1; \
105 } while (0)
106
107#define MARK_TS_DECL_NON_COMMON(C) \
108 do { \
109 MARK_TS_DECL_WITH_VIS (C); \
110 tree_contains_struct[C][TS_DECL_NON_COMMON] = 1; \
111 } while (0)
112
f3c6d29a 113/* Number of language-independent tree codes. */
114#define NUM_TREE_CODES ((int) LAST_AND_UNUSED_TREE_CODE)
d72a838e 115
ce45a448 116/* Tree code classes. */
117
118/* Each tree_code has an associated code class represented by a
119 TREE_CODE_CLASS. */
120
121enum tree_code_class {
122 tcc_exceptional, /* An exceptional code (fits no category). */
123 tcc_constant, /* A constant. */
9843a47d 124 /* Order of tcc_type and tcc_declaration is important. */
ce45a448 125 tcc_type, /* A type object code. */
126 tcc_declaration, /* A declaration (also serving as variable refs). */
127 tcc_reference, /* A reference to storage. */
128 tcc_comparison, /* A comparison expression. */
129 tcc_unary, /* A unary arithmetic expression. */
130 tcc_binary, /* A binary arithmetic expression. */
131 tcc_statement, /* A statement expression, which have side effects
132 but usually no interesting value. */
c2f47e15 133 tcc_vl_exp, /* A function call or other expression with a
134 variable-length operand vector. */
75a70cf9 135 tcc_expression /* Any other expression. */
ce45a448 136};
137
138/* Each tree code class has an associated string representation.
139 These must correspond to the tree_code_class entries. */
140
a93de1ee 141extern const char *const tree_code_class_strings[];
ce45a448 142
143/* Returns the string representing CLASS. */
144
145#define TREE_CODE_CLASS_STRING(CLASS)\
146 tree_code_class_strings[(int) (CLASS)]
d72a838e 147
ce45a448 148extern const enum tree_code_class tree_code_type[];
b4dae43c 149#define TREE_CODE_CLASS(CODE) tree_code_type[(int) (CODE)]
d72a838e 150
ce45a448 151/* Nonzero if CODE represents an exceptional code. */
152
153#define EXCEPTIONAL_CLASS_P(CODE)\
154 (TREE_CODE_CLASS (TREE_CODE (CODE)) == tcc_exceptional)
155
156/* Nonzero if CODE represents a constant. */
157
158#define CONSTANT_CLASS_P(CODE)\
159 (TREE_CODE_CLASS (TREE_CODE (CODE)) == tcc_constant)
160
161/* Nonzero if CODE represents a type. */
162
163#define TYPE_P(CODE)\
164 (TREE_CODE_CLASS (TREE_CODE (CODE)) == tcc_type)
165
166/* Nonzero if CODE represents a declaration. */
167
168#define DECL_P(CODE)\
169 (TREE_CODE_CLASS (TREE_CODE (CODE)) == tcc_declaration)
170
5ded8c6f 171/* Nonzero if DECL represents a VAR_DECL or FUNCTION_DECL. */
172
173#define VAR_OR_FUNCTION_DECL_P(DECL)\
174 (TREE_CODE (DECL) == VAR_DECL || TREE_CODE (DECL) == FUNCTION_DECL)
175
9843a47d 176/* Nonzero if CODE represents a INDIRECT_REF. Keep these checks in
177 ascending code order. */
5ded8c6f 178
2a448a75 179#define INDIRECT_REF_P(CODE)\
5d9de213 180 (TREE_CODE (CODE) == INDIRECT_REF)
2a448a75 181
ce45a448 182/* Nonzero if CODE represents a reference. */
183
184#define REFERENCE_CLASS_P(CODE)\
185 (TREE_CODE_CLASS (TREE_CODE (CODE)) == tcc_reference)
186
187/* Nonzero if CODE represents a comparison. */
188
189#define COMPARISON_CLASS_P(CODE)\
190 (TREE_CODE_CLASS (TREE_CODE (CODE)) == tcc_comparison)
191
192/* Nonzero if CODE represents a unary arithmetic expression. */
193
194#define UNARY_CLASS_P(CODE)\
195 (TREE_CODE_CLASS (TREE_CODE (CODE)) == tcc_unary)
196
197/* Nonzero if CODE represents a binary arithmetic expression. */
198
199#define BINARY_CLASS_P(CODE)\
200 (TREE_CODE_CLASS (TREE_CODE (CODE)) == tcc_binary)
201
202/* Nonzero if CODE represents a statement expression. */
203
204#define STATEMENT_CLASS_P(CODE)\
205 (TREE_CODE_CLASS (TREE_CODE (CODE)) == tcc_statement)
206
c2f47e15 207/* Nonzero if CODE represents a function call-like expression with a
208 variable-length operand vector. */
209
210#define VL_EXP_CLASS_P(CODE)\
211 (TREE_CODE_CLASS (TREE_CODE (CODE)) == tcc_vl_exp)
212
ce45a448 213/* Nonzero if CODE represents any other expression. */
214
215#define EXPRESSION_CLASS_P(CODE)\
216 (TREE_CODE_CLASS (TREE_CODE (CODE)) == tcc_expression)
217
ce45a448 218/* Returns nonzero iff CODE represents a type or declaration. */
219
220#define IS_TYPE_OR_DECL_P(CODE)\
221 (TYPE_P (CODE) || DECL_P (CODE))
66d12a6c 222
f712a0dc 223/* Returns nonzero iff CLASS is the tree-code class of an
14ac2afb 224 expression. */
225
ce45a448 226#define IS_EXPR_CODE_CLASS(CLASS)\
fbbb2067 227 ((CLASS) >= tcc_reference && (CLASS) <= tcc_expression)
b5e4e1dc 228
229/* Returns nonzero iff NODE is an expression of some kind. */
230
231#define EXPR_P(NODE) IS_EXPR_CODE_CLASS (TREE_CODE_CLASS (TREE_CODE (NODE)))
14ac2afb 232
d72a838e 233/* Number of argument-words in each kind of tree-node. */
234
ab1a776d 235extern const unsigned char tree_code_length[];
f3c6d29a 236#define TREE_CODE_LENGTH(CODE) tree_code_length[(int) (CODE)]
d72a838e 237
238/* Names of tree components. */
239
ab1a776d 240extern const char *const tree_code_name[];
f6cc6a08 241
afea39ad 242/* When procesing aliases on symtab level, we need the declaration of target.
243 For this reason we need to queue aliases and process them after all declarations
244 has been produced. */
245
34e5cced 246typedef struct GTY(()) alias_pair
247{
248 tree decl;
98ff07a9 249 tree target;
34e5cced 250} alias_pair;
251
252/* Define gc'd vector type. */
253DEF_VEC_O(alias_pair);
254DEF_VEC_ALLOC_O(alias_pair,gc);
255
256extern GTY(()) VEC(alias_pair,gc) * alias_pairs;
257
d72a838e 258\f
ab7943b9 259/* Classify which part of the compiler has defined a given builtin function.
260 Note that we assume below that this is no more than two bits. */
8305149e 261enum built_in_class
262{
263 NOT_BUILT_IN = 0,
264 BUILT_IN_FRONTEND,
265 BUILT_IN_MD,
266 BUILT_IN_NORMAL
267};
ab7943b9 268
34c4d8ed 269/* Last marker used for LTO stremaing of built_in_class. We can not add it
270 to the enum since we need the enumb to fit in 2 bits. */
271#define BUILT_IN_LAST (BUILT_IN_NORMAL + 1)
272
ab7943b9 273/* Names for the above. */
8934cb0c 274extern const char *const built_in_class_names[4];
ab7943b9 275
d72a838e 276/* Codes that identify the various built in functions
277 so that expand_call can identify them quickly. */
278
9cfddb70 279#define DEF_BUILTIN(ENUM, N, C, T, LT, B, F, NA, AT, IM, COND) ENUM,
d72a838e 280enum built_in_function
281{
4e9d90c7 282#include "builtins.def"
132bc06c 283
0dfc45b5 284 /* Complex division routines in libgcc. These are done via builtins
285 because emit_library_call_value can't handle complex values. */
286 BUILT_IN_COMPLEX_MUL_MIN,
287 BUILT_IN_COMPLEX_MUL_MAX
288 = BUILT_IN_COMPLEX_MUL_MIN
289 + MAX_MODE_COMPLEX_FLOAT
290 - MIN_MODE_COMPLEX_FLOAT,
291
292 BUILT_IN_COMPLEX_DIV_MIN,
293 BUILT_IN_COMPLEX_DIV_MAX
294 = BUILT_IN_COMPLEX_DIV_MIN
295 + MAX_MODE_COMPLEX_FLOAT
296 - MIN_MODE_COMPLEX_FLOAT,
297
88b5b080 298 /* Upper bound on non-language-specific builtins. */
132bc06c 299 END_BUILTINS
d72a838e 300};
4e9d90c7 301#undef DEF_BUILTIN
ab7943b9 302
303/* Names for the above. */
0dfc45b5 304extern const char * built_in_names[(int) END_BUILTINS];
df94cd3b 305
852da3c3 306/* Helper macros for math builtins. */
307
308#define BUILTIN_EXP10_P(FN) \
309 ((FN) == BUILT_IN_EXP10 || (FN) == BUILT_IN_EXP10F || (FN) == BUILT_IN_EXP10L \
310 || (FN) == BUILT_IN_POW10 || (FN) == BUILT_IN_POW10F || (FN) == BUILT_IN_POW10L)
311
312#define BUILTIN_EXPONENT_P(FN) (BUILTIN_EXP10_P (FN) \
313 || (FN) == BUILT_IN_EXP || (FN) == BUILT_IN_EXPF || (FN) == BUILT_IN_EXPL \
314 || (FN) == BUILT_IN_EXP2 || (FN) == BUILT_IN_EXP2F || (FN) == BUILT_IN_EXP2L)
315
316#define BUILTIN_SQRT_P(FN) \
317 ((FN) == BUILT_IN_SQRT || (FN) == BUILT_IN_SQRTF || (FN) == BUILT_IN_SQRTL)
318
319#define BUILTIN_CBRT_P(FN) \
320 ((FN) == BUILT_IN_CBRT || (FN) == BUILT_IN_CBRTF || (FN) == BUILT_IN_CBRTL)
321
322#define BUILTIN_ROOT_P(FN) (BUILTIN_SQRT_P (FN) || BUILTIN_CBRT_P (FN))
323
4f35b1fc 324#define CASE_FLT_FN(FN) case FN: case FN##F: case FN##L
e84da7c1 325#define CASE_FLT_FN_REENT(FN) case FN##_R: case FN##F_R: case FN##L_R
4f35b1fc 326#define CASE_INT_FN(FN) case FN: case FN##L: case FN##LL
d72a838e 327\f
55d6e7cd 328/* In an OMP_CLAUSE node. */
329
330/* Number of operands and names for each clause. */
331extern unsigned const char omp_clause_num_ops[];
332extern const char * const omp_clause_code_name[];
333
334/* Clause codes. Do not reorder, as this is used to index into the tables
335 omp_clause_num_ops and omp_clause_code_name. */
336enum omp_clause_code
337{
338 /* Clause zero is special-cased inside the parser
339 (c_parser_omp_variable_list). */
340 OMP_CLAUSE_ERROR = 0,
341
342 /* OpenMP clause: private (variable_list). */
343 OMP_CLAUSE_PRIVATE,
344
345 /* OpenMP clause: shared (variable_list). */
346 OMP_CLAUSE_SHARED,
347
348 /* OpenMP clause: firstprivate (variable_list). */
349 OMP_CLAUSE_FIRSTPRIVATE,
350
351 /* OpenMP clause: lastprivate (variable_list). */
352 OMP_CLAUSE_LASTPRIVATE,
353
354 /* OpenMP clause: reduction (operator:variable_list).
355 OMP_CLAUSE_REDUCTION_CODE: The tree_code of the operator.
356 Operand 1: OMP_CLAUSE_REDUCTION_INIT: Stmt-list to initialize the var.
7bd4091f 357 Operand 2: OMP_CLAUSE_REDUCTION_MERGE: Stmt-list to merge private var
55d6e7cd 358 into the shared one.
359 Operand 3: OMP_CLAUSE_REDUCTION_PLACEHOLDER: A dummy VAR_DECL
fd6481cf 360 placeholder used in OMP_CLAUSE_REDUCTION_{INIT,MERGE}. */
55d6e7cd 361 OMP_CLAUSE_REDUCTION,
362
363 /* OpenMP clause: copyin (variable_list). */
364 OMP_CLAUSE_COPYIN,
365
366 /* OpenMP clause: copyprivate (variable_list). */
367 OMP_CLAUSE_COPYPRIVATE,
368
369 /* OpenMP clause: if (scalar-expression). */
370 OMP_CLAUSE_IF,
371
372 /* OpenMP clause: num_threads (integer-expression). */
373 OMP_CLAUSE_NUM_THREADS,
374
375 /* OpenMP clause: schedule. */
376 OMP_CLAUSE_SCHEDULE,
377
378 /* OpenMP clause: nowait. */
379 OMP_CLAUSE_NOWAIT,
380
381 /* OpenMP clause: ordered. */
382 OMP_CLAUSE_ORDERED,
383
384 /* OpenMP clause: default. */
fd6481cf 385 OMP_CLAUSE_DEFAULT,
386
387 /* OpenMP clause: collapse (constant-integer-expression). */
388 OMP_CLAUSE_COLLAPSE,
389
390 /* OpenMP clause: untied. */
2169f33b 391 OMP_CLAUSE_UNTIED,
392
393 /* OpenMP clause: final (scalar-expression). */
394 OMP_CLAUSE_FINAL,
395
396 /* OpenMP clause: mergeable. */
397 OMP_CLAUSE_MERGEABLE
55d6e7cd 398};
399\f
d72a838e 400/* The definition of tree nodes fills the next several pages. */
401
402/* A tree node can represent a data type, a variable, an expression
403 or a statement. Each node has a TREE_CODE which says what kind of
404 thing it represents. Some common codes are:
405 INTEGER_TYPE -- represents a type of integers.
406 ARRAY_TYPE -- represents a type of pointer.
407 VAR_DECL -- represents a declared variable.
408 INTEGER_CST -- represents a constant integer value.
409 PLUS_EXPR -- represents a sum (an expression).
410
411 As for the contents of a tree node: there are some fields
412 that all nodes share. Each TREE_CODE has various special-purpose
413 fields as well. The fields of a node are never accessed directly,
414 always through accessor macros. */
415
d72a838e 416/* Every kind of tree node starts with this structure,
417 so all nodes have these fields.
418
a7baca71 419 See the accessor macros, defined below, for documentation of the
a7dce381 420 fields. */
d72a838e 421
fb1e4f4a 422struct GTY(()) tree_base {
5ca99950 423 ENUM_BITFIELD(tree_code) code : 16;
20f2763e 424
d72a838e 425 unsigned side_effects_flag : 1;
426 unsigned constant_flag : 1;
d72a838e 427 unsigned addressable_flag : 1;
428 unsigned volatile_flag : 1;
429 unsigned readonly_flag : 1;
430 unsigned unsigned_flag : 1;
431 unsigned asm_written_flag: 1;
4ee9c684 432 unsigned nowarning_flag : 1;
66d12a6c 433
4ee9c684 434 unsigned used_flag : 1;
00dd2e9e 435 unsigned nothrow_flag : 1;
d72a838e 436 unsigned static_flag : 1;
437 unsigned public_flag : 1;
438 unsigned private_flag : 1;
439 unsigned protected_flag : 1;
88da234d 440 unsigned deprecated_flag : 1;
06f0b99c 441 unsigned saturating_flag : 1;
d72a838e 442
7ac958de 443 unsigned default_def_flag : 1;
d72a838e 444 unsigned lang_flag_0 : 1;
445 unsigned lang_flag_1 : 1;
446 unsigned lang_flag_2 : 1;
447 unsigned lang_flag_3 : 1;
448 unsigned lang_flag_4 : 1;
449 unsigned lang_flag_5 : 1;
450 unsigned lang_flag_6 : 1;
7ac958de 451
4ee9c684 452 unsigned visited : 1;
33a0b99d 453 unsigned packed_flag : 1;
454 unsigned user_align : 1;
84bfaaeb 455 unsigned nameless_flag : 1;
35cc02b5 456
84bfaaeb 457 unsigned spare : 12;
bd1a81f7 458
459 /* This field is only used with type nodes; the only reason it is present
460 in tree_base instead of tree_type is to save space. The size of the
461 field must be large enough to hold addr_space_t values. */
462 unsigned address_space : 8;
35cc02b5 463};
464
1646aa85 465struct GTY(()) tree_typed {
35cc02b5 466 struct tree_base base;
35cc02b5 467 tree type;
468};
469
1646aa85 470struct GTY(()) tree_common {
471 struct tree_typed typed;
472 tree chain;
473};
474
7e787821 475/* The following table lists the uses of each of the above flags and
eba15a75 476 for which types of nodes they are defined.
7e787821 477
478 addressable_flag:
479
480 TREE_ADDRESSABLE in
f8b3db21 481 VAR_DECL, PARM_DECL, RESULT_DECL, FUNCTION_DECL, LABEL_DECL
eba15a75 482 all types
483 CONSTRUCTOR, IDENTIFIER_NODE
484 STMT_EXPR, it means we want the result of the enclosed expression
485
486 CALL_EXPR_TAILCALL in
487 CALL_EXPR
488
489 CASE_LOW_SEEN in
490 CASE_LABEL_EXPR
7e787821 491
492 static_flag:
493
494 TREE_STATIC in
eba15a75 495 VAR_DECL, FUNCTION_DECL
496 CONSTRUCTOR
497
498 TREE_NO_TRAMPOLINE in
499 ADDR_EXPR
500
2cfde4f3 501 BINFO_VIRTUAL_P in
57c28194 502 TREE_BINFO
eba15a75 503
7e787821 504 TREE_SYMBOL_REFERENCED in
505 IDENTIFIER_NODE
eba15a75 506
a9bc793b 507 CLEANUP_EH_ONLY in
dddab69e 508 TARGET_EXPR, WITH_CLEANUP_EXPR
eba15a75 509
0bc060a4 510 TRY_CATCH_IS_CLEANUP in
511 TRY_CATCH_EXPR
eba15a75 512
4ee9c684 513 ASM_INPUT_P in
514 ASM_EXPR
eba15a75 515
b24423db 516 TYPE_REF_CAN_ALIAS_ALL in
517 POINTER_TYPE, REFERENCE_TYPE
eba15a75 518
5b5037b3 519 MOVE_NONTEMPORAL in
75a70cf9 520 MODIFY_EXPR
eba15a75 521
28d5335f 522 CASE_HIGH_SEEN in
eba15a75 523 CASE_LABEL_EXPR
524
7765d0db 525 ENUM_IS_SCOPED in
526 ENUMERAL_TYPE
7e787821 527
4c0315d0 528 TRANSACTION_EXPR_OUTER in
529 TRANSACTION_EXPR
530
7e787821 531 public_flag:
532
533 TREE_OVERFLOW in
886cfd4f 534 INTEGER_CST, REAL_CST, COMPLEX_CST, VECTOR_CST
eba15a75 535
7e787821 536 TREE_PUBLIC in
eba15a75 537 VAR_DECL, FUNCTION_DECL
538 IDENTIFIER_NODE
539
4ee9c684 540 ASM_VOLATILE_P in
541 ASM_EXPR
eba15a75 542
48dc2227 543 CALL_EXPR_VA_ARG_PACK in
eba15a75 544 CALL_EXPR
545
00b76131 546 TYPE_CACHED_VALUES_P in
eba15a75 547 all types
548
0c8fe10f 549 SAVE_EXPR_RESOLVED_P in
eba15a75 550 SAVE_EXPR
551
1e8e9920 552 OMP_CLAUSE_LASTPRIVATE_FIRSTPRIVATE in
eba15a75 553 OMP_CLAUSE_LASTPRIVATE
554
1e8e9920 555 OMP_CLAUSE_PRIVATE_DEBUG in
eba15a75 556 OMP_CLAUSE_PRIVATE
7e787821 557
4c0315d0 558 TRANSACTION_EXPR_RELAXED in
559 TRANSACTION_EXPR
560
7e787821 561 private_flag:
562
7e787821 563 TREE_PRIVATE in
eba15a75 564 all decls
565
ea523851 566 CALL_EXPR_RETURN_SLOT_OPT in
805e22b2 567 CALL_EXPR
eba15a75 568
61e47ac8 569 OMP_SECTION_LAST in
eba15a75 570 OMP_SECTION
571
87f7c31e 572 OMP_PARALLEL_COMBINED in
eba15a75 573 OMP_PARALLEL
fd6481cf 574 OMP_CLAUSE_PRIVATE_OUTER_REF in
575 OMP_CLAUSE_PRIVATE
7e787821 576
678b5e9b 577 TYPE_REF_IS_RVALUE in
578 REFERENCE_TYPE
579
7e787821 580 protected_flag:
581
7e787821 582 TREE_PROTECTED in
583 BLOCK
eba15a75 584 all decls
585
990495a7 586 CALL_FROM_THUNK_P and
a882d754 587 CALL_ALLOCA_FOR_VAR_P in
491e04ef 588 CALL_EXPR
7e787821 589
590 side_effects_flag:
591
592 TREE_SIDE_EFFECTS in
593 all expressions
eba15a75 594 all decls
595 all constants
7e787821 596
4ee9c684 597 FORCED_LABEL in
eba15a75 598 LABEL_DECL
4ee9c684 599
7e787821 600 volatile_flag:
601
602 TREE_THIS_VOLATILE in
603 all expressions
eba15a75 604 all decls
605
7e787821 606 TYPE_VOLATILE in
eba15a75 607 all types
7e787821 608
609 readonly_flag:
610
611 TREE_READONLY in
997d68fe 612 all expressions
eba15a75 613 all decls
614
7e787821 615 TYPE_READONLY in
eba15a75 616 all types
7e787821 617
618 constant_flag:
619
620 TREE_CONSTANT in
621 all expressions
eba15a75 622 all decls
623 all constants
624
625 TYPE_SIZES_GIMPLIFIED in
626 all types
7e787821 627
7e787821 628 unsigned_flag:
629
78a8ed03 630 TYPE_UNSIGNED in
631 all types
eba15a75 632
86ae60fd 633 DECL_UNSIGNED in
634 all decls
7e787821 635
636 asm_written_flag:
637
638 TREE_ASM_WRITTEN in
bace6acf 639 VAR_DECL, FUNCTION_DECL, TYPE_DECL
eba15a75 640 RECORD_TYPE, UNION_TYPE, QUAL_UNION_TYPE
641 BLOCK, SSA_NAME, STRING_CST
642
7e787821 643 used_flag:
644
645 TREE_USED in
eba15a75 646 all expressions
647 all decls
648 IDENTIFIER_NODE
7e787821 649
00dd2e9e 650 nothrow_flag:
7e787821 651
00dd2e9e 652 TREE_NOTHROW in
eba15a75 653 CALL_EXPR
654 FUNCTION_DECL
7e787821 655
9f5f9308 656 TYPE_ALIGN_OK in
eba15a75 657 all types
9f5f9308 658
010d0641 659 TREE_THIS_NOTRAP in
b93508c0 660 INDIRECT_REF, MEM_REF, TARGET_MEM_REF, ARRAY_REF, ARRAY_RANGE_REF
010d0641 661
88da234d 662 deprecated_flag:
663
eba15a75 664 TREE_DEPRECATED in
665 all decls
e0213ecc 666 all types
eba15a75 667
668 IDENTIFIER_TRANSPARENT_ALIAS in
669 IDENTIFIER_NODE
eaa112a0 670
4ee9c684 671 visited:
672
eba15a75 673 TREE_VISITED in
674 all trees (used liberally by many passes)
4ee9c684 675
06f0b99c 676 saturating_flag:
677
678 TYPE_SATURATING in
679 all types
680
5084b2e4 681 VAR_DECL_IS_VIRTUAL_OPERAND in
682 VAR_DECL
683
4ee9c684 684 nowarning_flag:
685
686 TREE_NO_WARNING in
eba15a75 687 all expressions
688 all decls
689
5bf971ee 690 TYPE_ARTIFICIAL in
691 all types
692
eba15a75 693 default_def_flag:
694
e0213ecc 695 TYPE_VECTOR_OPAQUE in
696 VECTOR_TYPE
697
eba15a75 698 SSA_NAME_IS_DEFAULT_DEF in
699 SSA_NAME
88da234d 700*/
eba15a75 701
5ded8c6f 702#undef DEFTREESTRUCT
703#define DEFTREESTRUCT(ENUM, NAME) ENUM,
704enum tree_node_structure_enum {
705#include "treestruct.def"
706 LAST_TS_ENUM
707};
708#undef DEFTREESTRUCT
716fc477 709
d72a838e 710/* Define accessors for the fields that all tree nodes have
711 (though some fields are not used for all kinds of nodes). */
712
713/* The tree-code says what kind of node it is.
714 Codes are defined in tree.def. */
35cc02b5 715#define TREE_CODE(NODE) ((enum tree_code) (NODE)->base.code)
716#define TREE_SET_CODE(NODE, VALUE) ((NODE)->base.code = (VALUE))
d72a838e 717
3e207e38 718/* When checking is enabled, errors will be generated if a tree node
1fa3a8f6 719 is accessed incorrectly. The macros die with a fatal error. */
0c4e40c5 720#if defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 2007)
3e207e38 721
5e674ace 722#define TREE_CHECK(T, CODE) __extension__ \
0c16c31b 723({ __typeof (T) const __t = (T); \
5e674ace 724 if (TREE_CODE (__t) != (CODE)) \
36066e37 725 tree_check_failed (__t, __FILE__, __LINE__, __FUNCTION__, \
726 (CODE), 0); \
727 __t; })
728
729#define TREE_NOT_CHECK(T, CODE) __extension__ \
0c16c31b 730({ __typeof (T) const __t = (T); \
36066e37 731 if (TREE_CODE (__t) == (CODE)) \
732 tree_not_check_failed (__t, __FILE__, __LINE__, __FUNCTION__, \
733 (CODE), 0); \
a4070a91 734 __t; })
5e674ace 735
82bb2115 736#define TREE_CHECK2(T, CODE1, CODE2) __extension__ \
0c16c31b 737({ __typeof (T) const __t = (T); \
82bb2115 738 if (TREE_CODE (__t) != (CODE1) \
739 && TREE_CODE (__t) != (CODE2)) \
36066e37 740 tree_check_failed (__t, __FILE__, __LINE__, __FUNCTION__, \
741 (CODE1), (CODE2), 0); \
742 __t; })
743
744#define TREE_NOT_CHECK2(T, CODE1, CODE2) __extension__ \
0c16c31b 745({ __typeof (T) const __t = (T); \
36066e37 746 if (TREE_CODE (__t) == (CODE1) \
747 || TREE_CODE (__t) == (CODE2)) \
748 tree_not_check_failed (__t, __FILE__, __LINE__, __FUNCTION__, \
749 (CODE1), (CODE2), 0); \
82bb2115 750 __t; })
751
752#define TREE_CHECK3(T, CODE1, CODE2, CODE3) __extension__ \
0c16c31b 753({ __typeof (T) const __t = (T); \
82bb2115 754 if (TREE_CODE (__t) != (CODE1) \
755 && TREE_CODE (__t) != (CODE2) \
756 && TREE_CODE (__t) != (CODE3)) \
36066e37 757 tree_check_failed (__t, __FILE__, __LINE__, __FUNCTION__, \
758 (CODE1), (CODE2), (CODE3), 0); \
759 __t; })
760
761#define TREE_NOT_CHECK3(T, CODE1, CODE2, CODE3) __extension__ \
0c16c31b 762({ __typeof (T) const __t = (T); \
36066e37 763 if (TREE_CODE (__t) == (CODE1) \
764 || TREE_CODE (__t) == (CODE2) \
765 || TREE_CODE (__t) == (CODE3)) \
766 tree_not_check_failed (__t, __FILE__, __LINE__, __FUNCTION__, \
767 (CODE1), (CODE2), (CODE3), 0); \
82bb2115 768 __t; })
769
b24423db 770#define TREE_CHECK4(T, CODE1, CODE2, CODE3, CODE4) __extension__ \
0c16c31b 771({ __typeof (T) const __t = (T); \
b24423db 772 if (TREE_CODE (__t) != (CODE1) \
773 && TREE_CODE (__t) != (CODE2) \
774 && TREE_CODE (__t) != (CODE3) \
775 && TREE_CODE (__t) != (CODE4)) \
36066e37 776 tree_check_failed (__t, __FILE__, __LINE__, __FUNCTION__, \
777 (CODE1), (CODE2), (CODE3), (CODE4), 0); \
778 __t; })
779
07d52fc9 780#define TREE_NOT_CHECK4(T, CODE1, CODE2, CODE3, CODE4) __extension__ \
0c16c31b 781({ __typeof (T) const __t = (T); \
36066e37 782 if (TREE_CODE (__t) == (CODE1) \
783 || TREE_CODE (__t) == (CODE2) \
784 || TREE_CODE (__t) == (CODE3) \
785 || TREE_CODE (__t) == (CODE4)) \
786 tree_not_check_failed (__t, __FILE__, __LINE__, __FUNCTION__, \
787 (CODE1), (CODE2), (CODE3), (CODE4), 0); \
b24423db 788 __t; })
789
82bb2115 790#define TREE_CHECK5(T, CODE1, CODE2, CODE3, CODE4, CODE5) __extension__ \
0c16c31b 791({ __typeof (T) const __t = (T); \
82bb2115 792 if (TREE_CODE (__t) != (CODE1) \
793 && TREE_CODE (__t) != (CODE2) \
794 && TREE_CODE (__t) != (CODE3) \
795 && TREE_CODE (__t) != (CODE4) \
796 && TREE_CODE (__t) != (CODE5)) \
36066e37 797 tree_check_failed (__t, __FILE__, __LINE__, __FUNCTION__, \
798 (CODE1), (CODE2), (CODE3), (CODE4), (CODE5), 0);\
799 __t; })
800
801#define TREE_NOT_CHECK5(T, CODE1, CODE2, CODE3, CODE4, CODE5) __extension__ \
0c16c31b 802({ __typeof (T) const __t = (T); \
36066e37 803 if (TREE_CODE (__t) == (CODE1) \
804 || TREE_CODE (__t) == (CODE2) \
805 || TREE_CODE (__t) == (CODE3) \
806 || TREE_CODE (__t) == (CODE4) \
807 || TREE_CODE (__t) == (CODE5)) \
808 tree_not_check_failed (__t, __FILE__, __LINE__, __FUNCTION__, \
809 (CODE1), (CODE2), (CODE3), (CODE4), (CODE5), 0);\
82bb2115 810 __t; })
811
5ded8c6f 812#define CONTAINS_STRUCT_CHECK(T, STRUCT) __extension__ \
0c16c31b 813({ __typeof (T) const __t = (T); \
5ded8c6f 814 if (tree_contains_struct[TREE_CODE(__t)][(STRUCT)] != 1) \
815 tree_contains_struct_check_failed (__t, (STRUCT), __FILE__, __LINE__, \
816 __FUNCTION__); \
817 __t; })
818
5e674ace 819#define TREE_CLASS_CHECK(T, CLASS) __extension__ \
0c16c31b 820({ __typeof (T) const __t = (T); \
5e674ace 821 if (TREE_CODE_CLASS (TREE_CODE(__t)) != (CLASS)) \
822 tree_class_check_failed (__t, (CLASS), __FILE__, __LINE__, \
76c6f48d 823 __FUNCTION__); \
a4070a91 824 __t; })
825
1e8e9920 826#define TREE_RANGE_CHECK(T, CODE1, CODE2) __extension__ \
0c16c31b 827({ __typeof (T) const __t = (T); \
55d6e7cd 828 if (TREE_CODE (__t) < (CODE1) || TREE_CODE (__t) > (CODE2)) \
1e8e9920 829 tree_range_check_failed (__t, __FILE__, __LINE__, __FUNCTION__, \
830 (CODE1), (CODE2)); \
831 __t; })
832
55d6e7cd 833#define OMP_CLAUSE_SUBCODE_CHECK(T, CODE) __extension__ \
0c16c31b 834({ __typeof (T) const __t = (T); \
55d6e7cd 835 if (TREE_CODE (__t) != OMP_CLAUSE) \
836 tree_check_failed (__t, __FILE__, __LINE__, __FUNCTION__, \
837 OMP_CLAUSE, 0); \
838 if (__t->omp_clause.code != (CODE)) \
839 omp_clause_check_failed (__t, __FILE__, __LINE__, __FUNCTION__, \
840 (CODE)); \
841 __t; })
842
843#define OMP_CLAUSE_RANGE_CHECK(T, CODE1, CODE2) __extension__ \
0c16c31b 844({ __typeof (T) const __t = (T); \
55d6e7cd 845 if (TREE_CODE (__t) != OMP_CLAUSE) \
846 tree_check_failed (__t, __FILE__, __LINE__, __FUNCTION__, \
847 OMP_CLAUSE, 0); \
848 if ((int) __t->omp_clause.code < (int) (CODE1) \
849 || (int) __t->omp_clause.code > (int) (CODE2)) \
850 omp_clause_range_check_failed (__t, __FILE__, __LINE__, \
851 __FUNCTION__, (CODE1), (CODE2)); \
852 __t; })
853
a4070a91 854/* These checks have to be special cased. */
5e674ace 855#define EXPR_CHECK(T) __extension__ \
0c16c31b 856({ __typeof (T) const __t = (T); \
5e674ace 857 char const __c = TREE_CODE_CLASS (TREE_CODE (__t)); \
47549347 858 if (!IS_EXPR_CODE_CLASS (__c)) \
ce45a448 859 tree_class_check_failed (__t, tcc_expression, __FILE__, __LINE__, \
66d12a6c 860 __FUNCTION__); \
861 __t; })
862
863/* These checks have to be special cased. */
864#define NON_TYPE_CHECK(T) __extension__ \
0c16c31b 865({ __typeof (T) const __t = (T); \
5dd4318b 866 if (TYPE_P (__t)) \
59db13d3 867 tree_not_class_check_failed (__t, tcc_type, __FILE__, __LINE__, \
868 __FUNCTION__); \
a4070a91 869 __t; })
870
5e674ace 871#define TREE_VEC_ELT_CHECK(T, I) __extension__ \
0c16c31b 872(*({__typeof (T) const __t = (T); \
5e674ace 873 const int __i = (I); \
66bc87db 874 if (TREE_CODE (__t) != TREE_VEC) \
36066e37 875 tree_check_failed (__t, __FILE__, __LINE__, __FUNCTION__, \
876 TREE_VEC, 0); \
66bc87db 877 if (__i < 0 || __i >= __t->vec.length) \
878 tree_vec_elt_check_failed (__i, __t->vec.length, \
879 __FILE__, __LINE__, __FUNCTION__); \
880 &__t->vec.a[__i]; }))
881
0c16c31b 882#define OMP_CLAUSE_ELT_CHECK(T, I) __extension__ \
9c2a0c05 883(*({__typeof (T) const __t = (T); \
0c16c31b 884 const int __i = (I); \
55d6e7cd 885 if (TREE_CODE (__t) != OMP_CLAUSE) \
886 tree_check_failed (__t, __FILE__, __LINE__, __FUNCTION__, \
887 OMP_CLAUSE, 0); \
888 if (__i < 0 || __i >= omp_clause_num_ops [__t->omp_clause.code]) \
889 omp_clause_operand_check_failed (__i, __t, __FILE__, __LINE__, \
890 __FUNCTION__); \
891 &__t->omp_clause.ops[__i]; }))
892
2fcde217 893/* Special checks for TREE_OPERANDs. */
5e674ace 894#define TREE_OPERAND_CHECK(T, I) __extension__ \
0c16c31b 895(*({__typeof (T) const __t = EXPR_CHECK (T); \
5e674ace 896 const int __i = (I); \
c2f47e15 897 if (__i < 0 || __i >= TREE_OPERAND_LENGTH (__t)) \
898 tree_operand_check_failed (__i, __t, \
2fcde217 899 __FILE__, __LINE__, __FUNCTION__); \
900 &__t->exp.operands[__i]; }))
901
5e674ace 902#define TREE_OPERAND_CHECK_CODE(T, CODE, I) __extension__ \
0c16c31b 903(*({__typeof (T) const __t = (T); \
5e674ace 904 const int __i = (I); \
905 if (TREE_CODE (__t) != CODE) \
36066e37 906 tree_check_failed (__t, __FILE__, __LINE__, __FUNCTION__, (CODE), 0);\
c2f47e15 907 if (__i < 0 || __i >= TREE_OPERAND_LENGTH (__t)) \
908 tree_operand_check_failed (__i, __t, \
2fcde217 909 __FILE__, __LINE__, __FUNCTION__); \
910 &__t->exp.operands[__i]; }))
911
35cc02b5 912/* Nodes are chained together for many purposes.
913 Types are chained together to record them for being output to the debugger
914 (see the function `chain_type').
915 Decls in the same scope are chained together to record the contents
916 of the scope.
917 Statement nodes for successive statements used to be chained together.
918 Often lists of things are represented by TREE_LIST nodes that
919 are chained together. */
920
921#define TREE_CHAIN(NODE) __extension__ \
9b88d08d 922(*({__typeof (NODE) const __t = CONTAINS_STRUCT_CHECK (NODE, TS_COMMON);\
35cc02b5 923 &__t->common.chain; }))
924
925/* In all nodes that are expressions, this is the data type of the expression.
926 In POINTER_TYPE nodes, this is the type that the pointer points to.
927 In ARRAY_TYPE nodes, this is the type of the elements.
928 In VECTOR_TYPE nodes, this is the type of the elements. */
929#define TREE_TYPE(NODE) __extension__ \
9b88d08d 930(*({__typeof (NODE) const __t = CONTAINS_STRUCT_CHECK (NODE, TS_TYPED); \
1646aa85 931 &__t->typed.type; }))
35cc02b5 932
aae87fc3 933extern void tree_contains_struct_check_failed (const_tree,
7bd4091f 934 const enum tree_node_structure_enum,
5ded8c6f 935 const char *, int, const char *)
936 ATTRIBUTE_NORETURN;
937
aae87fc3 938extern void tree_check_failed (const_tree, const char *, int, const char *,
36066e37 939 ...) ATTRIBUTE_NORETURN;
aae87fc3 940extern void tree_not_check_failed (const_tree, const char *, int, const char *,
36066e37 941 ...) ATTRIBUTE_NORETURN;
aae87fc3 942extern void tree_class_check_failed (const_tree, const enum tree_code_class,
60b8c5b3 943 const char *, int, const char *)
a4070a91 944 ATTRIBUTE_NORETURN;
aae87fc3 945extern void tree_range_check_failed (const_tree, const char *, int,
1e8e9920 946 const char *, enum tree_code,
cded957c 947 enum tree_code)
948 ATTRIBUTE_NORETURN;
aae87fc3 949extern void tree_not_class_check_failed (const_tree,
59db13d3 950 const enum tree_code_class,
951 const char *, int, const char *)
952 ATTRIBUTE_NORETURN;
60b8c5b3 953extern void tree_vec_elt_check_failed (int, int, const char *,
954 int, const char *)
66bc87db 955 ATTRIBUTE_NORETURN;
4ee9c684 956extern void phi_node_elt_check_failed (int, int, const char *,
957 int, const char *)
958 ATTRIBUTE_NORETURN;
aae87fc3 959extern void tree_operand_check_failed (int, const_tree,
60b8c5b3 960 const char *, int, const char *)
2fcde217 961 ATTRIBUTE_NORETURN;
aae87fc3 962extern void omp_clause_check_failed (const_tree, const char *, int,
55d6e7cd 963 const char *, enum omp_clause_code)
964 ATTRIBUTE_NORETURN;
720082dc 965extern void omp_clause_operand_check_failed (int, const_tree, const char *,
55d6e7cd 966 int, const char *)
967 ATTRIBUTE_NORETURN;
aae87fc3 968extern void omp_clause_range_check_failed (const_tree, const char *, int,
55d6e7cd 969 const char *, enum omp_clause_code,
970 enum omp_clause_code)
971 ATTRIBUTE_NORETURN;
60b8c5b3 972
0c4e40c5 973#else /* not ENABLE_TREE_CHECKING, or not gcc */
3e207e38 974
5ded8c6f 975#define CONTAINS_STRUCT_CHECK(T, ENUM) (T)
82bb2115 976#define TREE_CHECK(T, CODE) (T)
36066e37 977#define TREE_NOT_CHECK(T, CODE) (T)
82bb2115 978#define TREE_CHECK2(T, CODE1, CODE2) (T)
36066e37 979#define TREE_NOT_CHECK2(T, CODE1, CODE2) (T)
82bb2115 980#define TREE_CHECK3(T, CODE1, CODE2, CODE3) (T)
36066e37 981#define TREE_NOT_CHECK3(T, CODE1, CODE2, CODE3) (T)
b24423db 982#define TREE_CHECK4(T, CODE1, CODE2, CODE3, CODE4) (T)
36066e37 983#define TREE_NOT_CHECK4(T, CODE1, CODE2, CODE3, CODE4) (T)
82bb2115 984#define TREE_CHECK5(T, CODE1, CODE2, CODE3, CODE4, CODE5) (T)
36066e37 985#define TREE_NOT_CHECK5(T, CODE1, CODE2, CODE3, CODE4, CODE5) (T)
82bb2115 986#define TREE_CLASS_CHECK(T, CODE) (T)
1e8e9920 987#define TREE_RANGE_CHECK(T, CODE1, CODE2) (T)
82bb2115 988#define EXPR_CHECK(T) (T)
66d12a6c 989#define NON_TYPE_CHECK(T) (T)
82bb2115 990#define TREE_VEC_ELT_CHECK(T, I) ((T)->vec.a[I])
991#define TREE_OPERAND_CHECK(T, I) ((T)->exp.operands[I])
992#define TREE_OPERAND_CHECK_CODE(T, CODE, I) ((T)->exp.operands[I])
55d6e7cd 993#define OMP_CLAUSE_ELT_CHECK(T, i) ((T)->omp_clause.ops[i])
994#define OMP_CLAUSE_RANGE_CHECK(T, CODE1, CODE2) (T)
07d32e01 995#define OMP_CLAUSE_SUBCODE_CHECK(T, CODE) (T)
a4070a91 996
35cc02b5 997#define TREE_CHAIN(NODE) ((NODE)->common.chain)
1646aa85 998#define TREE_TYPE(NODE) ((NODE)->typed.type)
35cc02b5 999
a4070a91 1000#endif
1001
35cc02b5 1002#define TREE_BLOCK(NODE) *(tree_block (NODE))
4ee9c684 1003
a4070a91 1004#include "tree-check.h"
1005
ce45a448 1006#define TYPE_CHECK(T) TREE_CLASS_CHECK (T, tcc_type)
5ded8c6f 1007#define DECL_MINIMAL_CHECK(T) CONTAINS_STRUCT_CHECK (T, TS_DECL_MINIMAL)
1008#define DECL_COMMON_CHECK(T) CONTAINS_STRUCT_CHECK (T, TS_DECL_COMMON)
1009#define DECL_WRTL_CHECK(T) CONTAINS_STRUCT_CHECK (T, TS_DECL_WRTL)
1010#define DECL_WITH_VIS_CHECK(T) CONTAINS_STRUCT_CHECK (T, TS_DECL_WITH_VIS)
1011#define DECL_NON_COMMON_CHECK(T) CONTAINS_STRUCT_CHECK (T, TS_DECL_NON_COMMON)
ce45a448 1012#define CST_CHECK(T) TREE_CLASS_CHECK (T, tcc_constant)
1013#define STMT_CHECK(T) TREE_CLASS_CHECK (T, tcc_statement)
c2f47e15 1014#define VL_EXP_CHECK(T) TREE_CLASS_CHECK (T, tcc_vl_exp)
82bb2115 1015#define FUNC_OR_METHOD_CHECK(T) TREE_CHECK2 (T, FUNCTION_TYPE, METHOD_TYPE)
b24423db 1016#define PTR_OR_REF_CHECK(T) TREE_CHECK2 (T, POINTER_TYPE, REFERENCE_TYPE)
82bb2115 1017
3cb98335 1018#define RECORD_OR_UNION_CHECK(T) \
82bb2115 1019 TREE_CHECK3 (T, RECORD_TYPE, UNION_TYPE, QUAL_UNION_TYPE)
3cb98335 1020#define NOT_RECORD_OR_UNION_CHECK(T) \
1021 TREE_NOT_CHECK3 (T, RECORD_TYPE, UNION_TYPE, QUAL_UNION_TYPE)
491e04ef 1022
82bb2115 1023#define NUMERICAL_TYPE_CHECK(T) \
06f0b99c 1024 TREE_CHECK5 (T, INTEGER_TYPE, ENUMERAL_TYPE, BOOLEAN_TYPE, REAL_TYPE, \
1025 FIXED_POINT_TYPE)
3e207e38 1026
3609f4f0 1027/* Here is how primitive or already-canonicalized types' hash codes
1028 are made. */
908e5f41 1029#define TYPE_HASH(TYPE) (TYPE_UID (TYPE))
1030
1031/* A simple hash function for an arbitrary tree node. This must not be
1032 used in hash tables which are saved to a PCH. */
1033#define TREE_HASH(NODE) ((size_t) (NODE) & 0777777)
3609f4f0 1034
75a70cf9 1035/* Tests if CODE is a conversion expr (NOP_EXPR or CONVERT_EXPR). */
d9659041 1036#define CONVERT_EXPR_CODE_P(CODE) \
75a70cf9 1037 ((CODE) == NOP_EXPR || (CODE) == CONVERT_EXPR)
72dd6141 1038
75a70cf9 1039/* Similarly, but accept an expressions instead of a tree code. */
d9659041 1040#define CONVERT_EXPR_P(EXP) CONVERT_EXPR_CODE_P (TREE_CODE (EXP))
72dd6141 1041
1042/* Generate case for NOP_EXPR, CONVERT_EXPR. */
1043
1044#define CASE_CONVERT \
1045 case NOP_EXPR: \
1046 case CONVERT_EXPR
1047
98112881 1048/* Given an expression as a tree, strip any conversion that generates
1049 no instruction. Accepts both tree and const_tree arguments since
1050 we are not modifying the tree itself. */
d72a838e 1051
98112881 1052#define STRIP_NOPS(EXP) \
1053 (EXP) = tree_strip_nop_conversions (CONST_CAST_TREE (EXP))
f2bfbd07 1054
155b05dc 1055/* Like STRIP_NOPS, but don't let the signedness change either. */
1056
1057#define STRIP_SIGN_NOPS(EXP) \
98112881 1058 (EXP) = tree_strip_sign_nop_conversions (CONST_CAST_TREE (EXP))
155b05dc 1059
f2bfbd07 1060/* Like STRIP_NOPS, but don't alter the TREE_TYPE either. */
1061
1062#define STRIP_TYPE_NOPS(EXP) \
72dd6141 1063 while ((CONVERT_EXPR_P (EXP) \
f2bfbd07 1064 || TREE_CODE (EXP) == NON_LVALUE_EXPR) \
bdcbc557 1065 && TREE_OPERAND (EXP, 0) != error_mark_node \
f2bfbd07 1066 && (TREE_TYPE (EXP) \
1067 == TREE_TYPE (TREE_OPERAND (EXP, 0)))) \
7ec74242 1068 (EXP) = TREE_OPERAND (EXP, 0)
ffcb8a96 1069
4ee9c684 1070/* Remove unnecessary type conversions according to
1071 tree_ssa_useless_type_conversion. */
1072
98112881 1073#define STRIP_USELESS_TYPE_CONVERSION(EXP) \
1074 (EXP) = tree_ssa_strip_useless_type_conversions (EXP)
4ee9c684 1075
ffcb8a96 1076/* Nonzero if TYPE represents an integral type. Note that we do not
9843a47d 1077 include COMPLEX types here. Keep these checks in ascending code
f7f07c95 1078 order. */
ffcb8a96 1079
1080#define INTEGRAL_TYPE_P(TYPE) \
9843a47d 1081 (TREE_CODE (TYPE) == ENUMERAL_TYPE \
1082 || TREE_CODE (TYPE) == BOOLEAN_TYPE \
9843a47d 1083 || TREE_CODE (TYPE) == INTEGER_TYPE)
ffcb8a96 1084
06f0b99c 1085/* Nonzero if TYPE represents a non-saturating fixed-point type. */
1086
1087#define NON_SAT_FIXED_POINT_TYPE_P(TYPE) \
1088 (TREE_CODE (TYPE) == FIXED_POINT_TYPE && !TYPE_SATURATING (TYPE))
1089
1090/* Nonzero if TYPE represents a saturating fixed-point type. */
1091
1092#define SAT_FIXED_POINT_TYPE_P(TYPE) \
1093 (TREE_CODE (TYPE) == FIXED_POINT_TYPE && TYPE_SATURATING (TYPE))
1094
1095/* Nonzero if TYPE represents a fixed-point type. */
1096
1097#define FIXED_POINT_TYPE_P(TYPE) (TREE_CODE (TYPE) == FIXED_POINT_TYPE)
1098
4b69983d 1099/* Nonzero if TYPE represents a scalar floating-point type. */
1100
1101#define SCALAR_FLOAT_TYPE_P(TYPE) (TREE_CODE (TYPE) == REAL_TYPE)
1102
1103/* Nonzero if TYPE represents a complex floating-point type. */
1104
1105#define COMPLEX_FLOAT_TYPE_P(TYPE) \
1106 (TREE_CODE (TYPE) == COMPLEX_TYPE \
1107 && TREE_CODE (TREE_TYPE (TYPE)) == REAL_TYPE)
1108
b423d9f7 1109/* Nonzero if TYPE represents a vector integer type. */
1110
1111#define VECTOR_INTEGER_TYPE_P(TYPE) \
1112 (TREE_CODE (TYPE) == VECTOR_TYPE \
1113 && TREE_CODE (TREE_TYPE (TYPE)) == INTEGER_TYPE)
1114
1115
4c779744 1116/* Nonzero if TYPE represents a vector floating-point type. */
1117
1118#define VECTOR_FLOAT_TYPE_P(TYPE) \
1119 (TREE_CODE (TYPE) == VECTOR_TYPE \
1120 && TREE_CODE (TREE_TYPE (TYPE)) == REAL_TYPE)
1121
ffcb8a96 1122/* Nonzero if TYPE represents a floating-point type, including complex
9843a47d 1123 and vector floating-point types. The vector and complex check does
1124 not use the previous two macros to enable early folding. */
ffcb8a96 1125
9843a47d 1126#define FLOAT_TYPE_P(TYPE) \
1127 (SCALAR_FLOAT_TYPE_P (TYPE) \
1128 || ((TREE_CODE (TYPE) == COMPLEX_TYPE \
1129 || TREE_CODE (TYPE) == VECTOR_TYPE) \
1130 && SCALAR_FLOAT_TYPE_P (TREE_TYPE (TYPE))))
68db3216 1131
e5d0ba06 1132/* Nonzero if TYPE represents a decimal floating-point type. */
1133#define DECIMAL_FLOAT_TYPE_P(TYPE) \
1134 (SCALAR_FLOAT_TYPE_P (TYPE) \
1135 && DECIMAL_FLOAT_MODE_P (TYPE_MODE (TYPE)))
1136
969443c4 1137/* Nonzero if TYPE is a record or union type. */
1138#define RECORD_OR_UNION_TYPE_P(TYPE) \
1139 (TREE_CODE (TYPE) == RECORD_TYPE \
1140 || TREE_CODE (TYPE) == UNION_TYPE \
1141 || TREE_CODE (TYPE) == QUAL_UNION_TYPE)
1142
9843a47d 1143/* Nonzero if TYPE represents an aggregate (multi-component) type.
1144 Keep these checks in ascending code order. */
68db3216 1145
1146#define AGGREGATE_TYPE_P(TYPE) \
969443c4 1147 (TREE_CODE (TYPE) == ARRAY_TYPE || RECORD_OR_UNION_TYPE_P (TYPE))
e57949ab 1148
1c15359d 1149/* Nonzero if TYPE represents a pointer or reference type.
9843a47d 1150 (It should be renamed to INDIRECT_TYPE_P.) Keep these checks in
1151 ascending code order. */
e57949ab 1152
1153#define POINTER_TYPE_P(TYPE) \
1154 (TREE_CODE (TYPE) == POINTER_TYPE || TREE_CODE (TYPE) == REFERENCE_TYPE)
1071e86e 1155
4b72716d 1156/* Nonzero if this type is a complete type. */
1157#define COMPLETE_TYPE_P(NODE) (TYPE_SIZE (NODE) != NULL_TREE)
1158
5c803577 1159/* Nonzero if this type is the (possibly qualified) void type. */
c92b3a11 1160#define VOID_TYPE_P(NODE) (TREE_CODE (NODE) == VOID_TYPE)
5c803577 1161
4b72716d 1162/* Nonzero if this type is complete or is cv void. */
1163#define COMPLETE_OR_VOID_TYPE_P(NODE) \
56ba46a4 1164 (COMPLETE_TYPE_P (NODE) || VOID_TYPE_P (NODE))
4b72716d 1165
1166/* Nonzero if this type is complete or is an array with unspecified bound. */
1167#define COMPLETE_OR_UNBOUND_ARRAY_TYPE_P(NODE) \
7ec74242 1168 (COMPLETE_TYPE_P (TREE_CODE (NODE) == ARRAY_TYPE ? TREE_TYPE (NODE) : (NODE)))
4b72716d 1169
d72a838e 1170\f
1171/* Define many boolean fields that all tree nodes have. */
1172
a353dfef 1173/* In VAR_DECL, PARM_DECL and RESULT_DECL nodes, nonzero means address
1174 of this is needed. So it cannot be in a register.
2c91799f 1175 In a FUNCTION_DECL it has no meaning.
d72a838e 1176 In CONSTRUCTOR nodes, it means object constructed must be in memory.
6c34d0c2 1177 In LABEL_DECL nodes, it means a goto for this label has been seen
d72a838e 1178 from a place outside all binding contours that restore stack levels.
4cd5bb61 1179 In ..._TYPE nodes, it means that objects of this type must be fully
1180 addressable. This means that pieces of this object cannot go into
1181 register parameters, for example. If this a function type, this
1182 means that the value must be returned in memory.
d72a838e 1183 In IDENTIFIER_NODEs, this means that some extern decl for this name
1184 had its address taken. That matters for inline functions. */
35cc02b5 1185#define TREE_ADDRESSABLE(NODE) ((NODE)->base.addressable_flag)
d72a838e 1186
6070c035 1187/* Set on a CALL_EXPR if the call is in a tail position, ie. just before the
1188 exit of a function. Calls for which this is true are candidates for tail
1189 call optimizations. */
35cc02b5 1190#define CALL_EXPR_TAILCALL(NODE) \
1191 (CALL_EXPR_CHECK(NODE)->base.addressable_flag)
4ee9c684 1192
359d87c6 1193/* Used as a temporary field on a CASE_LABEL_EXPR to indicate that the
1194 CASE_LOW operand has been processed. */
1195#define CASE_LOW_SEEN(NODE) \
35cc02b5 1196 (CASE_LABEL_EXPR_CHECK (NODE)->base.addressable_flag)
359d87c6 1197
4a1849e3 1198#define PREDICT_EXPR_OUTCOME(NODE) \
b9c74b4d 1199 ((enum prediction) (PREDICT_EXPR_CHECK(NODE)->base.addressable_flag))
1200#define SET_PREDICT_EXPR_OUTCOME(NODE, OUTCOME) \
1201 (PREDICT_EXPR_CHECK(NODE)->base.addressable_flag = (int) OUTCOME)
4a1849e3 1202#define PREDICT_EXPR_PREDICTOR(NODE) \
1203 ((enum br_predictor)tree_low_cst (TREE_OPERAND (PREDICT_EXPR_CHECK (NODE), 0), 0))
1204
d72a838e 1205/* In a VAR_DECL, nonzero means allocate static storage.
bc3a4bfd 1206 In a FUNCTION_DECL, nonzero if function has been defined.
eba15a75 1207 In a CONSTRUCTOR, nonzero means allocate static storage. */
35cc02b5 1208#define TREE_STATIC(NODE) ((NODE)->base.static_flag)
d72a838e 1209
eba15a75 1210/* In an ADDR_EXPR, nonzero means do not use a trampoline. */
1211#define TREE_NO_TRAMPOLINE(NODE) (ADDR_EXPR_CHECK (NODE)->base.static_flag)
1212
0bc060a4 1213/* In a TARGET_EXPR or WITH_CLEANUP_EXPR, means that the pertinent cleanup
dddab69e 1214 should only be executed if an exception is thrown, not on normal exit
1215 of its scope. */
35cc02b5 1216#define CLEANUP_EH_ONLY(NODE) ((NODE)->base.static_flag)
a9bc793b 1217
0bc060a4 1218/* In a TRY_CATCH_EXPR, means that the handler should be considered a
1219 separate cleanup in honor_protect_cleanup_actions. */
1220#define TRY_CATCH_IS_CLEANUP(NODE) \
1221 (TRY_CATCH_EXPR_CHECK (NODE)->base.static_flag)
1222
359d87c6 1223/* Used as a temporary field on a CASE_LABEL_EXPR to indicate that the
1224 CASE_HIGH operand has been processed. */
1225#define CASE_HIGH_SEEN(NODE) \
35cc02b5 1226 (CASE_LABEL_EXPR_CHECK (NODE)->base.static_flag)
359d87c6 1227
7765d0db 1228/* Used to mark scoped enums. */
1229#define ENUM_IS_SCOPED(NODE) (ENUMERAL_TYPE_CHECK (NODE)->base.static_flag)
28d5335f 1230
aa290616 1231/* Determines whether an ENUMERAL_TYPE has defined the list of constants. */
1232#define ENUM_IS_OPAQUE(NODE) (ENUMERAL_TYPE_CHECK (NODE)->base.private_flag)
1233
4ee9c684 1234/* In an expr node (usually a conversion) this means the node was made
55c151dc 1235 implicitly and should not lead to any sort of warning. In a decl node,
1236 warnings concerning the decl should be suppressed. This is used at
1237 least for used-before-set warnings, and it set after one warning is
1238 emitted. */
35cc02b5 1239#define TREE_NO_WARNING(NODE) ((NODE)->base.nowarning_flag)
d72a838e 1240
5bf971ee 1241/* Used to indicate that this TYPE represents a compiler-generated entity. */
1242#define TYPE_ARTIFICIAL(NODE) (TYPE_CHECK (NODE)->base.nowarning_flag)
1243
2cf6f20a 1244/* In an IDENTIFIER_NODE, this means that assemble_name was called with
1245 this string as an argument. */
56ba46a4 1246#define TREE_SYMBOL_REFERENCED(NODE) \
35cc02b5 1247 (IDENTIFIER_NODE_CHECK (NODE)->base.static_flag)
2cf6f20a 1248
b24423db 1249/* Nonzero in a pointer or reference type means the data pointed to
1250 by this type can alias anything. */
1251#define TYPE_REF_CAN_ALIAS_ALL(NODE) \
35cc02b5 1252 (PTR_OR_REF_CHECK (NODE)->base.static_flag)
b24423db 1253
5b5037b3 1254/* In a MODIFY_EXPR, means that the store in the expression is nontemporal. */
1255#define MOVE_NONTEMPORAL(NODE) \
75a70cf9 1256 (EXPR_CHECK (NODE)->base.static_flag)
5b5037b3 1257
886cfd4f 1258/* In an INTEGER_CST, REAL_CST, COMPLEX_CST, or VECTOR_CST, this means
acfce21e 1259 there was an overflow in folding. */
b24423db 1260
35cc02b5 1261#define TREE_OVERFLOW(NODE) (CST_CHECK (NODE)->base.public_flag)
7eec364c 1262
f170d67f 1263/* TREE_OVERFLOW can only be true for EXPR of CONSTANT_CLASS_P. */
1264
1265#define TREE_OVERFLOW_P(EXPR) \
1266 (CONSTANT_CLASS_P (EXPR) && TREE_OVERFLOW (EXPR))
1267
4a2849cb 1268/* In a VAR_DECL, FUNCTION_DECL, NAMESPACE_DECL or TYPE_DECL,
807bf718 1269 nonzero means name is to be accessible from outside this translation unit.
1e5bfc66 1270 In an IDENTIFIER_NODE, nonzero means an external declaration
807bf718 1271 accessible from outside this translation unit was previously seen
d72a838e 1272 for this name in an inner scope. */
35cc02b5 1273#define TREE_PUBLIC(NODE) ((NODE)->base.public_flag)
d72a838e 1274
00b76131 1275/* In a _TYPE, indicates whether TYPE_CACHED_VALUES contains a vector
1276 of cached values, or is something else. */
35cc02b5 1277#define TYPE_CACHED_VALUES_P(NODE) (TYPE_CHECK(NODE)->base.public_flag)
0c8fe10f 1278
1279/* In a SAVE_EXPR, indicates that the original expression has already
1280 been substituted with a VAR_DECL that contains the value. */
1281#define SAVE_EXPR_RESOLVED_P(NODE) \
eba15a75 1282 (SAVE_EXPR_CHECK (NODE)->base.public_flag)
00b76131 1283
48dc2227 1284/* Set on a CALL_EXPR if this stdarg call should be passed the argument
1285 pack. */
1286#define CALL_EXPR_VA_ARG_PACK(NODE) \
1287 (CALL_EXPR_CHECK(NODE)->base.public_flag)
1288
66d12a6c 1289/* In any expression, decl, or constant, nonzero means it has side effects or
1290 reevaluation of the whole expression could produce a different value.
1291 This is set if any subexpression is a function call, a side effect or a
1292 reference to a volatile variable. In a ..._DECL, this is set only if the
1293 declaration said `volatile'. This will never be set for a constant. */
1294#define TREE_SIDE_EFFECTS(NODE) \
35cc02b5 1295 (NON_TYPE_CHECK (NODE)->base.side_effects_flag)
d72a838e 1296
4ee9c684 1297/* In a LABEL_DECL, nonzero means this label had its address taken
1298 and therefore can never be deleted and is a jump target for
1299 computed gotos. */
eba15a75 1300#define FORCED_LABEL(NODE) (LABEL_DECL_CHECK (NODE)->base.side_effects_flag)
4ee9c684 1301
d72a838e 1302/* Nonzero means this expression is volatile in the C sense:
1303 its address should be of type `volatile WHATEVER *'.
1304 In other words, the declared item is volatile qualified.
1305 This is used in _DECL nodes and _REF nodes.
bcde7378 1306 On a FUNCTION_DECL node, this means the function does not
1307 return normally. This is the same effect as setting
1308 the attribute noreturn on the function in C.
d72a838e 1309
1310 In a ..._TYPE node, means this type is volatile-qualified.
1311 But use TYPE_VOLATILE instead of this macro when the node is a type,
1312 because eventually we may make that a different bit.
1313
1314 If this bit is set in an expression, so is TREE_SIDE_EFFECTS. */
35cc02b5 1315#define TREE_THIS_VOLATILE(NODE) ((NODE)->base.volatile_flag)
d72a838e 1316
010d0641 1317/* Nonzero means this node will not trap. In an INDIRECT_REF, means
1318 accessing the memory pointed to won't generate a trap. However,
1319 this only applies to an object when used appropriately: it doesn't
5d9de213 1320 mean that writing a READONLY mem won't trap.
491e04ef 1321
7d23383d 1322 In ARRAY_REF and ARRAY_RANGE_REF means that we know that the index
1323 (or slice of the array) always belongs to the range of the array.
1324 I.e. that the access will not trap, provided that the access to
1325 the base to the array will not trap. */
b93508c0 1326#define TREE_THIS_NOTRAP(NODE) \
1327 (TREE_CHECK5 (NODE, INDIRECT_REF, MEM_REF, TARGET_MEM_REF, ARRAY_REF, \
1328 ARRAY_RANGE_REF)->base.nothrow_flag)
010d0641 1329
d72a838e 1330/* In a VAR_DECL, PARM_DECL or FIELD_DECL, or any kind of ..._REF node,
48e1416a 1331 nonzero means it may not be the lhs of an assignment.
9c2a0c05 1332 Nonzero in a FUNCTION_DECL means this function should be treated
1333 as "const" function (can only read its arguments). */
35cc02b5 1334#define TREE_READONLY(NODE) (NON_TYPE_CHECK (NODE)->base.readonly_flag)
d72a838e 1335
66d12a6c 1336/* Value of expression is constant. Always on in all ..._CST nodes. May
1337 also appear in an expression or decl where the value is constant. */
35cc02b5 1338#define TREE_CONSTANT(NODE) (NON_TYPE_CHECK (NODE)->base.constant_flag)
d72a838e 1339
bc97b18f 1340/* Nonzero if NODE, a type, has had its sizes gimplified. */
35cc02b5 1341#define TYPE_SIZES_GIMPLIFIED(NODE) \
1342 (TYPE_CHECK (NODE)->base.constant_flag)
bc97b18f 1343
86ae60fd 1344/* In a decl (most significantly a FIELD_DECL), means an unsigned field. */
35cc02b5 1345#define DECL_UNSIGNED(NODE) \
1346 (DECL_COMMON_CHECK (NODE)->base.unsigned_flag)
86ae60fd 1347
78a8ed03 1348/* In integral and pointer types, means an unsigned type. */
35cc02b5 1349#define TYPE_UNSIGNED(NODE) (TYPE_CHECK (NODE)->base.unsigned_flag)
78a8ed03 1350
9238c28d 1351/* Nonzero in a VAR_DECL or STRING_CST means assembler code has been written.
d72a838e 1352 Nonzero in a FUNCTION_DECL means that the function has been compiled.
1353 This is interesting in an inline function, since it might not need
1354 to be compiled separately.
bace6acf 1355 Nonzero in a RECORD_TYPE, UNION_TYPE, QUAL_UNION_TYPE, ENUMERAL_TYPE
1356 or TYPE_DECL if the debugging info for the type has been written.
491e04ef 1357 In a BLOCK node, nonzero if reorder_blocks has already seen this block.
4ee9c684 1358 In an SSA_NAME node, nonzero if the SSA_NAME occurs in an abnormal
1359 PHI node. */
35cc02b5 1360#define TREE_ASM_WRITTEN(NODE) ((NODE)->base.asm_written_flag)
d72a838e 1361
1362/* Nonzero in a _DECL if the name is used in its scope.
1363 Nonzero in an expr node means inhibit warning if value is unused.
1364 In IDENTIFIER_NODEs, this means that some extern decl for this name
7bd4091f 1365 was used.
7c0a8197 1366 In a BLOCK, this means that the block contains variables that are used. */
35cc02b5 1367#define TREE_USED(NODE) ((NODE)->base.used_flag)
d72a838e 1368
b93508c0 1369/* In a FUNCTION_DECL, nonzero means a call to the function cannot
1370 throw an exception. In a CALL_EXPR, nonzero means the call cannot
1371 throw. We can't easily check the node type here as the C++
1372 frontend also uses this flag (for AGGR_INIT_EXPR). */
35cc02b5 1373#define TREE_NOTHROW(NODE) ((NODE)->base.nothrow_flag)
a9d9ab08 1374
ea523851 1375/* In a CALL_EXPR, means that it's safe to use the target of the call
1376 expansion as the return slot for a call that returns in memory. */
eba15a75 1377#define CALL_EXPR_RETURN_SLOT_OPT(NODE) \
1378 (CALL_EXPR_CHECK (NODE)->base.private_flag)
805e22b2 1379
7ac958de 1380/* In a RESULT_DECL, PARM_DECL and VAR_DECL, means that it is
1095d222 1381 passed by invisible reference (and the TREE_TYPE is a pointer to the true
1382 type). */
7ac958de 1383#define DECL_BY_REFERENCE(NODE) \
1384 (TREE_CHECK3 (NODE, VAR_DECL, PARM_DECL, \
1385 RESULT_DECL)->decl_common.decl_by_reference_flag)
dddcebdc 1386
8bb76364 1387/* In a RESULT_DECL, PARM_DECL and VAR_DECL, means that this decl
1388 can be used as restricted tag to disambiguate against other restrict
1389 pointers. Used by fortran to capture something like non-addressability
1390 (which it isn't really because the middle-end does take addresses of
1391 such variables). */
1392#define DECL_RESTRICTED_P(NODE) \
1393 (TREE_CHECK3 (NODE, VAR_DECL, PARM_DECL, \
1394 RESULT_DECL)->decl_common.decl_restricted_flag)
1395
abc6c64f 1396#define DECL_READ_P(NODE) \
1397 (TREE_CHECK2 (NODE, VAR_DECL, PARM_DECL)->decl_common.decl_read_flag)
1398
c7c68014 1399#define DECL_NONSHAREABLE(NODE) \
1400 (TREE_CHECK2 (NODE, VAR_DECL, \
1401 RESULT_DECL)->decl_common.decl_nonshareable_flag)
1402
eaa112a0 1403/* In a CALL_EXPR, means that the call is the jump from a thunk to the
1404 thunked-to function. */
eba15a75 1405#define CALL_FROM_THUNK_P(NODE) (CALL_EXPR_CHECK (NODE)->base.protected_flag)
eaa112a0 1406
990495a7 1407/* In a CALL_EXPR, if the function being called is BUILT_IN_ALLOCA, means that
1408 it has been built for the declaration of a variable-sized object. */
a882d754 1409#define CALL_ALLOCA_FOR_VAR_P(NODE) \
1410 (CALL_EXPR_CHECK (NODE)->base.protected_flag)
990495a7 1411
a9d9ab08 1412/* In a type, nonzero means that all objects of the type are guaranteed by the
1413 language or front-end to be properly aligned, so we can indicate that a MEM
1414 of this type is aligned at least to the alignment of the type, even if it
1415 doesn't appear that it is. We see this, for example, in object-oriented
1416 languages where a tag field may show this is an object of a more-aligned
4ee9c684 1417 variant of the more generic type.
1418
1419 In an SSA_NAME node, nonzero if the SSA_NAME node is on the SSA_NAME
1420 freelist. */
35cc02b5 1421#define TYPE_ALIGN_OK(NODE) (TYPE_CHECK (NODE)->base.nothrow_flag)
d72a838e 1422
bc3a4bfd 1423/* Used in classes in C++. */
35cc02b5 1424#define TREE_PRIVATE(NODE) ((NODE)->base.private_flag)
cee43f7e 1425/* Used in classes in C++. */
35cc02b5 1426#define TREE_PROTECTED(NODE) ((NODE)->base.protected_flag)
d72a838e 1427
678b5e9b 1428/* True if reference type NODE is a C++ rvalue reference. */
1429#define TYPE_REF_IS_RVALUE(NODE) \
1430 (REFERENCE_TYPE_CHECK (NODE)->base.private_flag)
1431
f4a30bd7 1432/* Nonzero in a _DECL if the use of the name is defined as a
88da234d 1433 deprecated feature by __attribute__((deprecated)). */
f4a30bd7 1434#define TREE_DEPRECATED(NODE) \
35cc02b5 1435 ((NODE)->base.deprecated_flag)
f4a30bd7 1436
1437/* Nonzero in an IDENTIFIER_NODE if the name is a local alias, whose
1438 uses are to be substituted for uses of the TREE_CHAINed identifier. */
1439#define IDENTIFIER_TRANSPARENT_ALIAS(NODE) \
35cc02b5 1440 (IDENTIFIER_NODE_CHECK (NODE)->base.deprecated_flag)
88da234d 1441
06f0b99c 1442/* In fixed-point types, means a saturating type. */
1443#define TYPE_SATURATING(NODE) ((NODE)->base.saturating_flag)
1444
bc3a4bfd 1445/* These flags are available for each language front end to use internally. */
35cc02b5 1446#define TREE_LANG_FLAG_0(NODE) ((NODE)->base.lang_flag_0)
1447#define TREE_LANG_FLAG_1(NODE) ((NODE)->base.lang_flag_1)
1448#define TREE_LANG_FLAG_2(NODE) ((NODE)->base.lang_flag_2)
1449#define TREE_LANG_FLAG_3(NODE) ((NODE)->base.lang_flag_3)
1450#define TREE_LANG_FLAG_4(NODE) ((NODE)->base.lang_flag_4)
1451#define TREE_LANG_FLAG_5(NODE) ((NODE)->base.lang_flag_5)
1452#define TREE_LANG_FLAG_6(NODE) ((NODE)->base.lang_flag_6)
d72a838e 1453\f
1454/* Define additional fields and accessors for nodes representing constants. */
1455
9e6d0a9a 1456/* In an INTEGER_CST node. These two together make a 2-word integer.
1457 If the data type is signed, the value is sign-extended to 2 words
d72a838e 1458 even though not all of them may really be in use.
9e6d0a9a 1459 In an unsigned constant shorter than 2 words, the extra bits are 0. */
2a8a276e 1460#define TREE_INT_CST(NODE) (INTEGER_CST_CHECK (NODE)->int_cst.int_cst)
1461#define TREE_INT_CST_LOW(NODE) (TREE_INT_CST (NODE).low)
1462#define TREE_INT_CST_HIGH(NODE) (TREE_INT_CST (NODE).high)
d72a838e 1463
76c6f48d 1464#define INT_CST_LT(A, B) \
1465 (TREE_INT_CST_HIGH (A) < TREE_INT_CST_HIGH (B) \
1466 || (TREE_INT_CST_HIGH (A) == TREE_INT_CST_HIGH (B) \
56ba46a4 1467 && TREE_INT_CST_LOW (A) < TREE_INT_CST_LOW (B)))
d72a838e 1468
76c6f48d 1469#define INT_CST_LT_UNSIGNED(A, B) \
1470 (((unsigned HOST_WIDE_INT) TREE_INT_CST_HIGH (A) \
1471 < (unsigned HOST_WIDE_INT) TREE_INT_CST_HIGH (B)) \
1472 || (((unsigned HOST_WIDE_INT) TREE_INT_CST_HIGH (A) \
6c34d0c2 1473 == (unsigned HOST_WIDE_INT) TREE_INT_CST_HIGH (B)) \
56ba46a4 1474 && TREE_INT_CST_LOW (A) < TREE_INT_CST_LOW (B)))
60b8c5b3 1475
fb1e4f4a 1476struct GTY(()) tree_int_cst {
189737d2 1477 struct tree_typed typed;
99748102 1478 double_int int_cst;
d72a838e 1479};
1480
479838ec 1481/* In a REAL_CST node. struct real_value is an opaque entity, with
ef258422 1482 manipulators defined in real.h. We don't want tree.h depending on
1483 real.h and transitively on tm.h. */
479838ec 1484struct real_value;
56ba46a4 1485
ef258422 1486#define TREE_REAL_CST_PTR(NODE) (REAL_CST_CHECK (NODE)->real_cst.real_cst_ptr)
1487#define TREE_REAL_CST(NODE) (*TREE_REAL_CST_PTR (NODE))
d72a838e 1488
fb1e4f4a 1489struct GTY(()) tree_real_cst {
189737d2 1490 struct tree_typed typed;
479838ec 1491 struct real_value * real_cst_ptr;
d72a838e 1492};
1493
06f0b99c 1494/* In a FIXED_CST node. */
1495struct fixed_value;
1496
eb65426a 1497#define TREE_FIXED_CST_PTR(NODE) \
1498 (FIXED_CST_CHECK (NODE)->fixed_cst.fixed_cst_ptr)
06f0b99c 1499#define TREE_FIXED_CST(NODE) (*TREE_FIXED_CST_PTR (NODE))
1500
fb1e4f4a 1501struct GTY(()) tree_fixed_cst {
189737d2 1502 struct tree_typed typed;
06f0b99c 1503 struct fixed_value * fixed_cst_ptr;
1504};
1505
d72a838e 1506/* In a STRING_CST */
21f01152 1507/* In C terms, this is sizeof, not strlen. */
3e207e38 1508#define TREE_STRING_LENGTH(NODE) (STRING_CST_CHECK (NODE)->string.length)
7d95f6a3 1509#define TREE_STRING_POINTER(NODE) \
1510 ((const char *)(STRING_CST_CHECK (NODE)->string.str))
d72a838e 1511
fb1e4f4a 1512struct GTY(()) tree_string {
189737d2 1513 struct tree_typed typed;
d72a838e 1514 int length;
7d95f6a3 1515 char str[1];
d72a838e 1516};
1517
1518/* In a COMPLEX_CST node. */
3e207e38 1519#define TREE_REALPART(NODE) (COMPLEX_CST_CHECK (NODE)->complex.real)
1520#define TREE_IMAGPART(NODE) (COMPLEX_CST_CHECK (NODE)->complex.imag)
d72a838e 1521
fb1e4f4a 1522struct GTY(()) tree_complex {
189737d2 1523 struct tree_typed typed;
6a3e3d6d 1524 tree real;
1525 tree imag;
d72a838e 1526};
886cfd4f 1527
1528/* In a VECTOR_CST node. */
dbe954dc 1529#define VECTOR_CST_NELTS(NODE) (TYPE_VECTOR_SUBPARTS (TREE_TYPE (NODE)))
fadf62f4 1530#define VECTOR_CST_ELTS(NODE) (VECTOR_CST_CHECK (NODE)->vector.elts)
1531#define VECTOR_CST_ELT(NODE,IDX) (VECTOR_CST_CHECK (NODE)->vector.elts[IDX])
886cfd4f 1532
fb1e4f4a 1533struct GTY(()) tree_vector {
189737d2 1534 struct tree_typed typed;
dbe954dc 1535 tree GTY ((length ("TYPE_VECTOR_SUBPARTS (TREE_TYPE ((tree)&%h))"))) elts[1];
886cfd4f 1536};
d72a838e 1537\f
d856c8a6 1538#include "symtab.h"
0d086e18 1539
d72a838e 1540/* Define fields and accessors for some special-purpose tree nodes. */
1541
0d086e18 1542#define IDENTIFIER_LENGTH(NODE) \
56ba46a4 1543 (IDENTIFIER_NODE_CHECK (NODE)->identifier.id.len)
0d086e18 1544#define IDENTIFIER_POINTER(NODE) \
76c6f48d 1545 ((const char *) IDENTIFIER_NODE_CHECK (NODE)->identifier.id.str)
af694375 1546#define IDENTIFIER_HASH_VALUE(NODE) \
1547 (IDENTIFIER_NODE_CHECK (NODE)->identifier.id.hash_value)
0d086e18 1548
1549/* Translate a hash table identifier pointer to a tree_identifier
1550 pointer, and vice versa. */
1551
1552#define HT_IDENT_TO_GCC_IDENT(NODE) \
fc9c9e87 1553 ((tree) ((char *) (NODE) - sizeof (struct tree_common)))
56ba46a4 1554#define GCC_IDENT_TO_HT_IDENT(NODE) (&((struct tree_identifier *) (NODE))->id)
d72a838e 1555
fb1e4f4a 1556struct GTY(()) tree_identifier {
fc9c9e87 1557 struct tree_common common;
0d086e18 1558 struct ht_identifier id;
d72a838e 1559};
1560
1561/* In a TREE_LIST node. */
3e207e38 1562#define TREE_PURPOSE(NODE) (TREE_LIST_CHECK (NODE)->list.purpose)
1563#define TREE_VALUE(NODE) (TREE_LIST_CHECK (NODE)->list.value)
d72a838e 1564
fb1e4f4a 1565struct GTY(()) tree_list {
851dfbff 1566 struct tree_common common;
6a3e3d6d 1567 tree purpose;
1568 tree value;
d72a838e 1569};
1570
1571/* In a TREE_VEC node. */
3e207e38 1572#define TREE_VEC_LENGTH(NODE) (TREE_VEC_CHECK (NODE)->vec.length)
56ba46a4 1573#define TREE_VEC_END(NODE) \
1574 ((void) TREE_VEC_CHECK (NODE), &((NODE)->vec.a[(NODE)->vec.length]))
d72a838e 1575
66bc87db 1576#define TREE_VEC_ELT(NODE,I) TREE_VEC_ELT_CHECK (NODE, I)
1577
fb1e4f4a 1578struct GTY(()) tree_vec {
851dfbff 1579 struct tree_common common;
d72a838e 1580 int length;
1f3233d1 1581 tree GTY ((length ("TREE_VEC_LENGTH ((tree)&%h)"))) a[1];
d72a838e 1582};
1583
c75b4594 1584/* In a CONSTRUCTOR node. */
1585#define CONSTRUCTOR_ELTS(NODE) (CONSTRUCTOR_CHECK (NODE)->constructor.elts)
f82f1250 1586#define CONSTRUCTOR_ELT(NODE,IDX) \
1587 (VEC_index (constructor_elt, CONSTRUCTOR_ELTS (NODE), IDX))
eb65426a 1588#define CONSTRUCTOR_NELTS(NODE) \
1589 (VEC_length (constructor_elt, CONSTRUCTOR_ELTS (NODE)))
c75b4594 1590
1591/* Iterate through the vector V of CONSTRUCTOR_ELT elements, yielding the
1592 value of each element (stored within VAL). IX must be a scratch variable
1593 of unsigned integer type. */
1594#define FOR_EACH_CONSTRUCTOR_VALUE(V, IX, VAL) \
1595 for (IX = 0; (IX >= VEC_length (constructor_elt, V)) \
1596 ? false \
1597 : ((VAL = VEC_index (constructor_elt, V, IX)->value), \
1598 true); \
1599 (IX)++)
1600
1601/* Iterate through the vector V of CONSTRUCTOR_ELT elements, yielding both
1602 the value of each element (stored within VAL) and its index (stored
1603 within INDEX). IX must be a scratch variable of unsigned integer type. */
1604#define FOR_EACH_CONSTRUCTOR_ELT(V, IX, INDEX, VAL) \
1605 for (IX = 0; (IX >= VEC_length (constructor_elt, V)) \
1606 ? false \
4081d362 1607 : (((void) (VAL = VEC_index (constructor_elt, V, IX)->value)), \
c75b4594 1608 (INDEX = VEC_index (constructor_elt, V, IX)->index), \
4081d362 1609 true); \
c75b4594 1610 (IX)++)
1611
1612/* Append a new constructor element to V, with the specified INDEX and VAL. */
1613#define CONSTRUCTOR_APPEND_ELT(V, INDEX, VALUE) \
1614 do { \
1615 constructor_elt *_ce___ = VEC_safe_push (constructor_elt, gc, V, NULL); \
1616 _ce___->index = INDEX; \
1617 _ce___->value = VALUE; \
1618 } while (0)
1619
34a6a65d 1620/* True if NODE, a FIELD_DECL, is to be processed as a bitfield for
1621 constructor output purposes. */
1622#define CONSTRUCTOR_BITFIELD_P(NODE) \
1623 (DECL_BIT_FIELD (FIELD_DECL_CHECK (NODE)) && DECL_MODE (NODE) != BLKmode)
1624
3c25489e 1625/* True if NODE is a clobber right hand side, an expression of indeterminate
1626 value that clobbers the LHS in a copy instruction. We use a volatile
1627 empty CONSTRUCTOR for this, as it matches most of the necessary semantic.
1628 In particular the volatile flag causes us to not prematurely remove
1629 such clobber instructions. */
1630#define TREE_CLOBBER_P(NODE) \
1631 (TREE_CODE (NODE) == CONSTRUCTOR && TREE_THIS_VOLATILE (NODE))
1632
c75b4594 1633/* A single element of a CONSTRUCTOR. VALUE holds the actual value of the
1634 element. INDEX can optionally design the position of VALUE: in arrays,
1635 it is the index where VALUE has to be placed; in structures, it is the
1636 FIELD_DECL of the member. */
fb1e4f4a 1637typedef struct GTY(()) constructor_elt_d {
c75b4594 1638 tree index;
1639 tree value;
1640} constructor_elt;
1641
1642DEF_VEC_O(constructor_elt);
1643DEF_VEC_ALLOC_O(constructor_elt,gc);
1644
fb1e4f4a 1645struct GTY(()) tree_constructor {
d39db554 1646 struct tree_typed typed;
c75b4594 1647 VEC(constructor_elt,gc) *elts;
1648};
1649
d72a838e 1650/* Define fields and accessors for some nodes that represent expressions. */
1651
365db11e 1652/* Nonzero if NODE is an empty statement (NOP_EXPR <0>). */
4ee9c684 1653#define IS_EMPTY_STMT(NODE) (TREE_CODE (NODE) == NOP_EXPR \
1654 && VOID_TYPE_P (TREE_TYPE (NODE)) \
1655 && integer_zerop (TREE_OPERAND (NODE, 0)))
1656
f20853dd 1657/* In ordinary expression nodes. */
c2f47e15 1658#define TREE_OPERAND_LENGTH(NODE) tree_operand_length (NODE)
2fcde217 1659#define TREE_OPERAND(NODE, I) TREE_OPERAND_CHECK (NODE, I)
f20853dd 1660
c2f47e15 1661/* In a tcc_vl_exp node, operand 0 is an INT_CST node holding the operand
1662 length. Its value includes the length operand itself; that is,
1663 the minimum valid length is 1.
1664 Note that we have to bypass the use of TREE_OPERAND to access
1665 that field to avoid infinite recursion in expanding the macros. */
1666#define VL_EXP_OPERAND_LENGTH(NODE) \
1667 ((int)TREE_INT_CST_LOW (VL_EXP_CHECK (NODE)->exp.operands[0]))
1668
9845d120 1669/* Nonzero if is_gimple_debug() may possibly hold. */
1670#define MAY_HAVE_DEBUG_STMTS (flag_var_tracking_assignments)
1671
b50fb4a3 1672/* In a LOOP_EXPR node. */
2fcde217 1673#define LOOP_EXPR_BODY(NODE) TREE_OPERAND_CHECK_CODE (NODE, LOOP_EXPR, 0)
b50fb4a3 1674
fdfe4b3f 1675/* The source location of this expression. Non-tree_exp nodes such as
1676 decls and constants can be shared among multiple locations, so
1677 return nothing. */
eb65426a 1678#define EXPR_LOCATION(NODE) \
de9d5a8c 1679 (CAN_HAVE_LOCATION_P ((NODE)) ? (NODE)->exp.locus : UNKNOWN_LOCATION)
75a70cf9 1680#define SET_EXPR_LOCATION(NODE, LOCUS) EXPR_CHECK ((NODE))->exp.locus = (LOCUS)
1681#define EXPR_HAS_LOCATION(NODE) (EXPR_LOCATION (NODE) != UNKNOWN_LOCATION)
8637f1db 1682#define EXPR_LOC_OR_HERE(NODE) (EXPR_HAS_LOCATION (NODE) ? (NODE)->exp.locus : input_location)
75a70cf9 1683#define EXPR_FILENAME(NODE) LOCATION_FILE (EXPR_CHECK ((NODE))->exp.locus)
1684#define EXPR_LINENO(NODE) LOCATION_LINE (EXPR_CHECK (NODE)->exp.locus)
35cc02b5 1685
1686/* True if a tree is an expression or statement that can have a
1687 location. */
e60a6f7b 1688#define CAN_HAVE_LOCATION_P(NODE) ((NODE) && EXPR_P (NODE))
dae7d8ad 1689
dda49785 1690extern void protected_set_expr_location (tree, location_t);
1691
7ebc28e0 1692/* In a TARGET_EXPR node. */
2fcde217 1693#define TARGET_EXPR_SLOT(NODE) TREE_OPERAND_CHECK_CODE (NODE, TARGET_EXPR, 0)
1694#define TARGET_EXPR_INITIAL(NODE) TREE_OPERAND_CHECK_CODE (NODE, TARGET_EXPR, 1)
1695#define TARGET_EXPR_CLEANUP(NODE) TREE_OPERAND_CHECK_CODE (NODE, TARGET_EXPR, 2)
7ebc28e0 1696
7dd37241 1697/* DECL_EXPR accessor. This gives access to the DECL associated with
1698 the given declaration statement. */
1699#define DECL_EXPR_DECL(NODE) TREE_OPERAND (DECL_EXPR_CHECK (NODE), 0)
1700
4ee9c684 1701#define EXIT_EXPR_COND(NODE) TREE_OPERAND (EXIT_EXPR_CHECK (NODE), 0)
1702
862f468c 1703/* COMPOUND_LITERAL_EXPR accessors. */
1704#define COMPOUND_LITERAL_EXPR_DECL_EXPR(NODE) \
1705 TREE_OPERAND (COMPOUND_LITERAL_EXPR_CHECK (NODE), 0)
1706#define COMPOUND_LITERAL_EXPR_DECL(NODE) \
1707 DECL_EXPR_DECL (COMPOUND_LITERAL_EXPR_DECL_EXPR (NODE))
1708
4ee9c684 1709/* SWITCH_EXPR accessors. These give access to the condition, body and
1710 original condition type (before any compiler conversions)
1711 of the switch statement, respectively. */
ffc8e524 1712#define SWITCH_COND(NODE) TREE_OPERAND (SWITCH_EXPR_CHECK (NODE), 0)
1713#define SWITCH_BODY(NODE) TREE_OPERAND (SWITCH_EXPR_CHECK (NODE), 1)
1714#define SWITCH_LABELS(NODE) TREE_OPERAND (SWITCH_EXPR_CHECK (NODE), 2)
4ee9c684 1715
eaae3b75 1716/* CASE_LABEL_EXPR accessors. These give access to the high and low values
4ee9c684 1717 of a case label, respectively. */
ffc8e524 1718#define CASE_LOW(NODE) TREE_OPERAND (CASE_LABEL_EXPR_CHECK (NODE), 0)
1719#define CASE_HIGH(NODE) TREE_OPERAND (CASE_LABEL_EXPR_CHECK (NODE), 1)
1720#define CASE_LABEL(NODE) TREE_OPERAND (CASE_LABEL_EXPR_CHECK (NODE), 2)
315119c9 1721#define CASE_CHAIN(NODE) TREE_OPERAND (CASE_LABEL_EXPR_CHECK (NODE), 3)
4ee9c684 1722
28daba6f 1723/* The operands of a TARGET_MEM_REF. Operands 0 and 1 have to match
1724 corresponding MEM_REF operands. */
1725#define TMR_BASE(NODE) (TREE_OPERAND (TARGET_MEM_REF_CHECK (NODE), 0))
1726#define TMR_OFFSET(NODE) (TREE_OPERAND (TARGET_MEM_REF_CHECK (NODE), 1))
aed164c3 1727#define TMR_INDEX(NODE) (TREE_OPERAND (TARGET_MEM_REF_CHECK (NODE), 2))
1728#define TMR_STEP(NODE) (TREE_OPERAND (TARGET_MEM_REF_CHECK (NODE), 3))
28daba6f 1729#define TMR_INDEX2(NODE) (TREE_OPERAND (TARGET_MEM_REF_CHECK (NODE), 4))
aed164c3 1730
4ee9c684 1731/* The operands of a BIND_EXPR. */
1732#define BIND_EXPR_VARS(NODE) (TREE_OPERAND (BIND_EXPR_CHECK (NODE), 0))
1733#define BIND_EXPR_BODY(NODE) (TREE_OPERAND (BIND_EXPR_CHECK (NODE), 1))
1734#define BIND_EXPR_BLOCK(NODE) (TREE_OPERAND (BIND_EXPR_CHECK (NODE), 2))
1735
1736/* GOTO_EXPR accessor. This gives access to the label associated with
1737 a goto statement. */
1738#define GOTO_DESTINATION(NODE) TREE_OPERAND ((NODE), 0)
1739
226c2452 1740/* ASM_EXPR accessors. ASM_STRING returns a STRING_CST for the
4ee9c684 1741 instruction (e.g., "mov x, y"). ASM_OUTPUTS, ASM_INPUTS, and
1742 ASM_CLOBBERS represent the outputs, inputs, and clobbers for the
1743 statement. */
ffc8e524 1744#define ASM_STRING(NODE) TREE_OPERAND (ASM_EXPR_CHECK (NODE), 0)
1745#define ASM_OUTPUTS(NODE) TREE_OPERAND (ASM_EXPR_CHECK (NODE), 1)
1746#define ASM_INPUTS(NODE) TREE_OPERAND (ASM_EXPR_CHECK (NODE), 2)
1747#define ASM_CLOBBERS(NODE) TREE_OPERAND (ASM_EXPR_CHECK (NODE), 3)
78f55ca8 1748#define ASM_LABELS(NODE) TREE_OPERAND (ASM_EXPR_CHECK (NODE), 4)
4ee9c684 1749/* Nonzero if we want to create an ASM_INPUT instead of an
1750 ASM_OPERAND with no operands. */
eba15a75 1751#define ASM_INPUT_P(NODE) (ASM_EXPR_CHECK (NODE)->base.static_flag)
1752#define ASM_VOLATILE_P(NODE) (ASM_EXPR_CHECK (NODE)->base.public_flag)
4ee9c684 1753
1754/* COND_EXPR accessors. */
1755#define COND_EXPR_COND(NODE) (TREE_OPERAND (COND_EXPR_CHECK (NODE), 0))
1756#define COND_EXPR_THEN(NODE) (TREE_OPERAND (COND_EXPR_CHECK (NODE), 1))
1757#define COND_EXPR_ELSE(NODE) (TREE_OPERAND (COND_EXPR_CHECK (NODE), 2))
1758
17519ba0 1759/* Accessors for the chains of recurrences. */
1760#define CHREC_VAR(NODE) TREE_OPERAND (POLYNOMIAL_CHREC_CHECK (NODE), 0)
1761#define CHREC_LEFT(NODE) TREE_OPERAND (POLYNOMIAL_CHREC_CHECK (NODE), 1)
1762#define CHREC_RIGHT(NODE) TREE_OPERAND (POLYNOMIAL_CHREC_CHECK (NODE), 2)
1763#define CHREC_VARIABLE(NODE) TREE_INT_CST_LOW (CHREC_VAR (NODE))
1764
4ee9c684 1765/* LABEL_EXPR accessor. This gives access to the label associated with
1766 the given label expression. */
1767#define LABEL_EXPR_LABEL(NODE) TREE_OPERAND (LABEL_EXPR_CHECK (NODE), 0)
1768
1769/* VDEF_EXPR accessors are specified in tree-flow.h, along with the other
1770 accessors for SSA operands. */
491e04ef 1771
4ee9c684 1772/* CATCH_EXPR accessors. */
1773#define CATCH_TYPES(NODE) TREE_OPERAND (CATCH_EXPR_CHECK (NODE), 0)
1774#define CATCH_BODY(NODE) TREE_OPERAND (CATCH_EXPR_CHECK (NODE), 1)
1775
1776/* EH_FILTER_EXPR accessors. */
1777#define EH_FILTER_TYPES(NODE) TREE_OPERAND (EH_FILTER_EXPR_CHECK (NODE), 0)
1778#define EH_FILTER_FAILURE(NODE) TREE_OPERAND (EH_FILTER_EXPR_CHECK (NODE), 1)
4ee9c684 1779
215e2f1d 1780/* OBJ_TYPE_REF accessors. */
1781#define OBJ_TYPE_REF_EXPR(NODE) TREE_OPERAND (OBJ_TYPE_REF_CHECK (NODE), 0)
1782#define OBJ_TYPE_REF_OBJECT(NODE) TREE_OPERAND (OBJ_TYPE_REF_CHECK (NODE), 1)
1783#define OBJ_TYPE_REF_TOKEN(NODE) TREE_OPERAND (OBJ_TYPE_REF_CHECK (NODE), 2)
1784
88dbf20f 1785/* ASSERT_EXPR accessors. */
1786#define ASSERT_EXPR_VAR(NODE) TREE_OPERAND (ASSERT_EXPR_CHECK (NODE), 0)
1787#define ASSERT_EXPR_COND(NODE) TREE_OPERAND (ASSERT_EXPR_CHECK (NODE), 1)
1788
c2f47e15 1789/* CALL_EXPR accessors.
1790 */
1791#define CALL_EXPR_FN(NODE) TREE_OPERAND (CALL_EXPR_CHECK (NODE), 1)
1792#define CALL_EXPR_STATIC_CHAIN(NODE) TREE_OPERAND (CALL_EXPR_CHECK (NODE), 2)
c2f47e15 1793#define CALL_EXPR_ARG(NODE, I) TREE_OPERAND (CALL_EXPR_CHECK (NODE), (I) + 3)
1794#define call_expr_nargs(NODE) (VL_EXP_OPERAND_LENGTH(NODE) - 3)
1795
1796/* CALL_EXPR_ARGP returns a pointer to the argument vector for NODE.
1797 We can't use &CALL_EXPR_ARG (NODE, 0) because that will complain if
1798 the argument count is zero when checking is enabled. Instead, do
1799 the pointer arithmetic to advance past the 3 fixed operands in a
1800 CALL_EXPR. That produces a valid pointer to just past the end of the
1801 operand array, even if it's not valid to dereference it. */
1802#define CALL_EXPR_ARGP(NODE) \
1803 (&(TREE_OPERAND (CALL_EXPR_CHECK (NODE), 0)) + 3)
1804
4c0315d0 1805/* TM directives and accessors. */
1806#define TRANSACTION_EXPR_BODY(NODE) \
1807 TREE_OPERAND (TRANSACTION_EXPR_CHECK (NODE), 0)
1808#define TRANSACTION_EXPR_OUTER(NODE) \
1809 (TRANSACTION_EXPR_CHECK (NODE)->base.static_flag)
1810#define TRANSACTION_EXPR_RELAXED(NODE) \
1811 (TRANSACTION_EXPR_CHECK (NODE)->base.public_flag)
1812
1e8e9920 1813/* OpenMP directive and clause accessors. */
1814
1815#define OMP_BODY(NODE) \
1816 TREE_OPERAND (TREE_RANGE_CHECK (NODE, OMP_PARALLEL, OMP_CRITICAL), 0)
1817#define OMP_CLAUSES(NODE) \
1818 TREE_OPERAND (TREE_RANGE_CHECK (NODE, OMP_PARALLEL, OMP_SINGLE), 1)
1819
1820#define OMP_PARALLEL_BODY(NODE) TREE_OPERAND (OMP_PARALLEL_CHECK (NODE), 0)
1821#define OMP_PARALLEL_CLAUSES(NODE) TREE_OPERAND (OMP_PARALLEL_CHECK (NODE), 1)
1822
fd6481cf 1823#define OMP_TASK_BODY(NODE) TREE_OPERAND (OMP_TASK_CHECK (NODE), 0)
1824#define OMP_TASK_CLAUSES(NODE) TREE_OPERAND (OMP_TASK_CHECK (NODE), 1)
fd6481cf 1825
1826#define OMP_TASKREG_CHECK(NODE) TREE_RANGE_CHECK (NODE, OMP_PARALLEL, OMP_TASK)
1827#define OMP_TASKREG_BODY(NODE) TREE_OPERAND (OMP_TASKREG_CHECK (NODE), 0)
1828#define OMP_TASKREG_CLAUSES(NODE) TREE_OPERAND (OMP_TASKREG_CHECK (NODE), 1)
fd6481cf 1829
1e8e9920 1830#define OMP_FOR_BODY(NODE) TREE_OPERAND (OMP_FOR_CHECK (NODE), 0)
1831#define OMP_FOR_CLAUSES(NODE) TREE_OPERAND (OMP_FOR_CHECK (NODE), 1)
1832#define OMP_FOR_INIT(NODE) TREE_OPERAND (OMP_FOR_CHECK (NODE), 2)
1833#define OMP_FOR_COND(NODE) TREE_OPERAND (OMP_FOR_CHECK (NODE), 3)
1834#define OMP_FOR_INCR(NODE) TREE_OPERAND (OMP_FOR_CHECK (NODE), 4)
1835#define OMP_FOR_PRE_BODY(NODE) TREE_OPERAND (OMP_FOR_CHECK (NODE), 5)
1836
1837#define OMP_SECTIONS_BODY(NODE) TREE_OPERAND (OMP_SECTIONS_CHECK (NODE), 0)
1838#define OMP_SECTIONS_CLAUSES(NODE) TREE_OPERAND (OMP_SECTIONS_CHECK (NODE), 1)
1839
1840#define OMP_SECTION_BODY(NODE) TREE_OPERAND (OMP_SECTION_CHECK (NODE), 0)
1841
1842#define OMP_SINGLE_BODY(NODE) TREE_OPERAND (OMP_SINGLE_CHECK (NODE), 0)
1843#define OMP_SINGLE_CLAUSES(NODE) TREE_OPERAND (OMP_SINGLE_CHECK (NODE), 1)
1844
1845#define OMP_MASTER_BODY(NODE) TREE_OPERAND (OMP_MASTER_CHECK (NODE), 0)
1846
1847#define OMP_ORDERED_BODY(NODE) TREE_OPERAND (OMP_ORDERED_CHECK (NODE), 0)
1848
1849#define OMP_CRITICAL_BODY(NODE) TREE_OPERAND (OMP_CRITICAL_CHECK (NODE), 0)
1850#define OMP_CRITICAL_NAME(NODE) TREE_OPERAND (OMP_CRITICAL_CHECK (NODE), 1)
1851
55d6e7cd 1852#define OMP_CLAUSE_CHAIN(NODE) TREE_CHAIN (OMP_CLAUSE_CHECK (NODE))
1853#define OMP_CLAUSE_DECL(NODE) \
1854 OMP_CLAUSE_OPERAND (OMP_CLAUSE_RANGE_CHECK (OMP_CLAUSE_CHECK (NODE), \
1855 OMP_CLAUSE_PRIVATE, \
1856 OMP_CLAUSE_COPYPRIVATE), 0)
e60a6f7b 1857#define OMP_CLAUSE_HAS_LOCATION(NODE) \
1858 ((OMP_CLAUSE_CHECK (NODE))->omp_clause.locus != UNKNOWN_LOCATION)
1859#define OMP_CLAUSE_LOCATION(NODE) (OMP_CLAUSE_CHECK (NODE))->omp_clause.locus
1e8e9920 1860
61e47ac8 1861/* True on an OMP_SECTION statement that was the last lexical member.
1862 This status is meaningful in the implementation of lastprivate. */
1863#define OMP_SECTION_LAST(NODE) \
eba15a75 1864 (OMP_SECTION_CHECK (NODE)->base.private_flag)
61e47ac8 1865
87f7c31e 1866/* True on an OMP_PARALLEL statement if it represents an explicit
1867 combined parallel work-sharing constructs. */
1868#define OMP_PARALLEL_COMBINED(NODE) \
eba15a75 1869 (OMP_PARALLEL_CHECK (NODE)->base.private_flag)
87f7c31e 1870
1e8e9920 1871/* True on a PRIVATE clause if its decl is kept around for debugging
1872 information only and its DECL_VALUE_EXPR is supposed to point
1873 to what it has been remapped to. */
1874#define OMP_CLAUSE_PRIVATE_DEBUG(NODE) \
eba15a75 1875 (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_PRIVATE)->base.public_flag)
1e8e9920 1876
fd6481cf 1877/* True on a PRIVATE clause if ctor needs access to outer region's
1878 variable. */
1879#define OMP_CLAUSE_PRIVATE_OUTER_REF(NODE) \
1880 TREE_PRIVATE (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_PRIVATE))
1881
1e8e9920 1882/* True on a LASTPRIVATE clause if a FIRSTPRIVATE clause for the same
1883 decl is present in the chain. */
1884#define OMP_CLAUSE_LASTPRIVATE_FIRSTPRIVATE(NODE) \
eba15a75 1885 (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_LASTPRIVATE)->base.public_flag)
fd6481cf 1886#define OMP_CLAUSE_LASTPRIVATE_STMT(NODE) \
1887 OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, \
1888 OMP_CLAUSE_LASTPRIVATE),\
1889 1)
75a70cf9 1890#define OMP_CLAUSE_LASTPRIVATE_GIMPLE_SEQ(NODE) \
1891 (OMP_CLAUSE_CHECK (NODE))->omp_clause.gimple_reduction_init
1e8e9920 1892
2169f33b 1893#define OMP_CLAUSE_FINAL_EXPR(NODE) \
1894 OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_FINAL), 0)
1e8e9920 1895#define OMP_CLAUSE_IF_EXPR(NODE) \
55d6e7cd 1896 OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_IF), 0)
1e8e9920 1897#define OMP_CLAUSE_NUM_THREADS_EXPR(NODE) \
55d6e7cd 1898 OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_NUM_THREADS),0)
1e8e9920 1899#define OMP_CLAUSE_SCHEDULE_CHUNK_EXPR(NODE) \
55d6e7cd 1900 OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_SCHEDULE), 0)
1e8e9920 1901
fd6481cf 1902#define OMP_CLAUSE_COLLAPSE_EXPR(NODE) \
1903 OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_COLLAPSE), 0)
1904#define OMP_CLAUSE_COLLAPSE_ITERVAR(NODE) \
1905 OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_COLLAPSE), 1)
1906#define OMP_CLAUSE_COLLAPSE_COUNT(NODE) \
1907 OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_COLLAPSE), 2)
1908
1e8e9920 1909#define OMP_CLAUSE_REDUCTION_CODE(NODE) \
55d6e7cd 1910 (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_REDUCTION)->omp_clause.subcode.reduction_code)
1e8e9920 1911#define OMP_CLAUSE_REDUCTION_INIT(NODE) \
55d6e7cd 1912 OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_REDUCTION), 1)
1e8e9920 1913#define OMP_CLAUSE_REDUCTION_MERGE(NODE) \
55d6e7cd 1914 OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_REDUCTION), 2)
75a70cf9 1915#define OMP_CLAUSE_REDUCTION_GIMPLE_INIT(NODE) \
1916 (OMP_CLAUSE_CHECK (NODE))->omp_clause.gimple_reduction_init
1917#define OMP_CLAUSE_REDUCTION_GIMPLE_MERGE(NODE) \
1918 (OMP_CLAUSE_CHECK (NODE))->omp_clause.gimple_reduction_merge
1e8e9920 1919#define OMP_CLAUSE_REDUCTION_PLACEHOLDER(NODE) \
55d6e7cd 1920 OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_REDUCTION), 3)
1e8e9920 1921
1922enum omp_clause_schedule_kind
1923{
1924 OMP_CLAUSE_SCHEDULE_STATIC,
1925 OMP_CLAUSE_SCHEDULE_DYNAMIC,
1926 OMP_CLAUSE_SCHEDULE_GUIDED,
fd6481cf 1927 OMP_CLAUSE_SCHEDULE_AUTO,
1e8e9920 1928 OMP_CLAUSE_SCHEDULE_RUNTIME
1929};
1930
1931#define OMP_CLAUSE_SCHEDULE_KIND(NODE) \
55d6e7cd 1932 (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_SCHEDULE)->omp_clause.subcode.schedule_kind)
1e8e9920 1933
1934enum omp_clause_default_kind
1935{
1936 OMP_CLAUSE_DEFAULT_UNSPECIFIED,
1937 OMP_CLAUSE_DEFAULT_SHARED,
1938 OMP_CLAUSE_DEFAULT_NONE,
fd6481cf 1939 OMP_CLAUSE_DEFAULT_PRIVATE,
1940 OMP_CLAUSE_DEFAULT_FIRSTPRIVATE
1e8e9920 1941};
1942
1943#define OMP_CLAUSE_DEFAULT_KIND(NODE) \
55d6e7cd 1944 (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_DEFAULT)->omp_clause.subcode.default_kind)
1e8e9920 1945
fb1e4f4a 1946struct GTY(()) tree_exp {
1e184c62 1947 struct tree_typed typed;
9c85a98a 1948 location_t locus;
4ee9c684 1949 tree block;
60b8c5b3 1950 tree GTY ((special ("tree_exp"),
1951 desc ("TREE_CODE ((tree) &%0)")))
1f3233d1 1952 operands[1];
f20853dd 1953};
1954\f
4ee9c684 1955/* SSA_NAME accessors. */
1956
1957/* Returns the variable being referenced. Once released, this is the
1958 only field that can be relied upon. */
1959#define SSA_NAME_VAR(NODE) SSA_NAME_CHECK (NODE)->ssa_name.var
1960
75a70cf9 1961/* Returns the statement which defines this SSA name. */
1962#define SSA_NAME_DEF_STMT(NODE) SSA_NAME_CHECK (NODE)->ssa_name.def_stmt
4ee9c684 1963
1964/* Returns the SSA version number of this SSA name. Note that in
1965 tree SSA, version numbers are not per variable and may be recycled. */
1966#define SSA_NAME_VERSION(NODE) SSA_NAME_CHECK (NODE)->ssa_name.version
1967
1968/* Nonzero if this SSA name occurs in an abnormal PHI. SSA_NAMES are
1969 never output, so we can safely use the ASM_WRITTEN_FLAG for this
1970 status bit. */
1971#define SSA_NAME_OCCURS_IN_ABNORMAL_PHI(NODE) \
35cc02b5 1972 SSA_NAME_CHECK (NODE)->base.asm_written_flag
4ee9c684 1973
786d45db 1974/* Nonzero if this SSA_NAME expression is currently on the free list of
4ee9c684 1975 SSA_NAMES. Using NOTHROW_FLAG seems reasonably safe since throwing
1976 has no meaning for an SSA_NAME. */
1977#define SSA_NAME_IN_FREE_LIST(NODE) \
35cc02b5 1978 SSA_NAME_CHECK (NODE)->base.nothrow_flag
4ee9c684 1979
de6ed584 1980/* Nonzero if this SSA_NAME is the default definition for the
1981 underlying symbol. A default SSA name is created for symbol S if
1982 the very first reference to S in the function is a read operation.
1983 Default definitions are always created by an empty statement and
1984 belong to no basic block. */
eb65426a 1985#define SSA_NAME_IS_DEFAULT_DEF(NODE) \
83901169 1986 SSA_NAME_CHECK (NODE)->base.default_def_flag
de6ed584 1987
786d45db 1988/* Attributes for SSA_NAMEs for pointer-type variables. */
1989#define SSA_NAME_PTR_INFO(N) \
1990 SSA_NAME_CHECK (N)->ssa_name.ptr_info
1991
9b40bfbf 1992/* Defined in tree-flow.h. */
591c2a30 1993struct ptr_info_def;
22aa74c4 1994
fe24f256 1995/* Immediate use linking structure. This structure is used for maintaining
22aa74c4 1996 a doubly linked list of uses of an SSA_NAME. */
fb1e4f4a 1997typedef struct GTY(()) ssa_use_operand_d {
b66731e8 1998 struct ssa_use_operand_d* GTY((skip(""))) prev;
1999 struct ssa_use_operand_d* GTY((skip(""))) next;
75a70cf9 2000 /* Immediate uses for a given SSA name are maintained as a cyclic
2001 list. To recognize the root of this list, the location field
2002 needs to point to the original SSA name. Since statements and
2003 SSA names are of different data types, we need this union. See
2004 the explanation in struct immediate_use_iterator_d. */
2005 union { gimple stmt; tree ssa_name; } GTY((skip(""))) loc;
22aa74c4 2006 tree *GTY((skip(""))) use;
b66731e8 2007} ssa_use_operand_t;
22aa74c4 2008
2009/* Return the immediate_use information for an SSA_NAME. */
2010#define SSA_NAME_IMM_USE_NODE(NODE) SSA_NAME_CHECK (NODE)->ssa_name.imm_uses
2011
fb1e4f4a 2012struct GTY(()) tree_ssa_name {
acb5ba8c 2013 struct tree_typed typed;
4ee9c684 2014
2015 /* _DECL wrapped by this SSA name. */
2016 tree var;
2017
75a70cf9 2018 /* Statement that defines this SSA name. */
2019 gimple def_stmt;
2020
4ee9c684 2021 /* SSA version number. */
2022 unsigned int version;
786d45db 2023
2024 /* Pointer attributes used for alias analysis. */
2025 struct ptr_info_def *ptr_info;
7cd909bf 2026
22aa74c4 2027 /* Immediate uses list for this SSA_NAME. */
b66731e8 2028 struct ssa_use_operand_d imm_uses;
4ee9c684 2029};
2030\f
fb1e4f4a 2031struct GTY(()) phi_arg_d {
aa28f7e7 2032 /* imm_use MUST be the first element in struct because we do some
2033 pointer arithmetic with it. See phi_arg_index_from_use. */
b66731e8 2034 struct ssa_use_operand_d imm_use;
4ee9c684 2035 tree def;
efbcb6de 2036 location_t locus;
4ee9c684 2037};
2038
4ee9c684 2039\f
55d6e7cd 2040#define OMP_CLAUSE_CODE(NODE) \
2041 (OMP_CLAUSE_CHECK (NODE))->omp_clause.code
2042
2043#define OMP_CLAUSE_SET_CODE(NODE, CODE) \
2044 ((OMP_CLAUSE_CHECK (NODE))->omp_clause.code = (CODE))
2045
2046#define OMP_CLAUSE_CODE(NODE) \
2047 (OMP_CLAUSE_CHECK (NODE))->omp_clause.code
2048
2049#define OMP_CLAUSE_OPERAND(NODE, I) \
2050 OMP_CLAUSE_ELT_CHECK (NODE, I)
2051
fb1e4f4a 2052struct GTY(()) tree_omp_clause {
55d6e7cd 2053 struct tree_common common;
e60a6f7b 2054 location_t locus;
55d6e7cd 2055 enum omp_clause_code code;
2056 union omp_clause_subcode {
2057 enum omp_clause_default_kind default_kind;
2058 enum omp_clause_schedule_kind schedule_kind;
2059 enum tree_code reduction_code;
2060 } GTY ((skip)) subcode;
75a70cf9 2061
2062 /* The gimplification of OMP_CLAUSE_REDUCTION_{INIT,MERGE} for omp-low's
2063 usage. */
2064 gimple_seq gimple_reduction_init;
2065 gimple_seq gimple_reduction_merge;
2066
c360ad02 2067 tree GTY ((length ("omp_clause_num_ops[OMP_CLAUSE_CODE ((tree)&%h)]"))) ops[1];
55d6e7cd 2068};
2069\f
4ee9c684 2070
d72a838e 2071/* In a BLOCK node. */
3e207e38 2072#define BLOCK_VARS(NODE) (BLOCK_CHECK (NODE)->block.vars)
eb65426a 2073#define BLOCK_NONLOCALIZED_VARS(NODE) \
2074 (BLOCK_CHECK (NODE)->block.nonlocalized_vars)
2075#define BLOCK_NUM_NONLOCALIZED_VARS(NODE) \
2076 VEC_length (tree, BLOCK_NONLOCALIZED_VARS (NODE))
2077#define BLOCK_NONLOCALIZED_VAR(NODE,N) \
2078 VEC_index (tree, BLOCK_NONLOCALIZED_VARS (NODE), N)
3e207e38 2079#define BLOCK_SUBBLOCKS(NODE) (BLOCK_CHECK (NODE)->block.subblocks)
2080#define BLOCK_SUPERCONTEXT(NODE) (BLOCK_CHECK (NODE)->block.supercontext)
027fc6ef 2081#define BLOCK_CHAIN(NODE) (BLOCK_CHECK (NODE)->block.chain)
3e207e38 2082#define BLOCK_ABSTRACT_ORIGIN(NODE) (BLOCK_CHECK (NODE)->block.abstract_origin)
2083#define BLOCK_ABSTRACT(NODE) (BLOCK_CHECK (NODE)->block.abstract_flag)
d72a838e 2084
665611e7 2085/* True if BLOCK has the same ranges as its BLOCK_SUPERCONTEXT. */
2086#define BLOCK_SAME_RANGE(NODE) (BLOCK_CHECK (NODE)->base.nameless_flag)
2087
5846cb0f 2088/* An index number for this block. These values are not guaranteed to
2089 be unique across functions -- whether or not they are depends on
2090 the debugging output format in use. */
2091#define BLOCK_NUMBER(NODE) (BLOCK_CHECK (NODE)->block.block_num)
2092
a36145ca 2093/* If block reordering splits a lexical block into discontiguous
2094 address ranges, we'll make a copy of the original block.
2095
2096 Note that this is logically distinct from BLOCK_ABSTRACT_ORIGIN.
2097 In that case, we have one source block that has been replicated
2098 (through inlining or unrolling) into many logical blocks, and that
2099 these logical blocks have different physical variables in them.
2100
2101 In this case, we have one logical block split into several
2102 non-contiguous address ranges. Most debug formats can't actually
2103 represent this idea directly, so we fake it by creating multiple
2104 logical blocks with the same variables in them. However, for those
2105 that do support non-contiguous regions, these allow the original
2106 logical block to be reconstructed, along with the set of address
2107 ranges.
2108
2109 One of the logical block fragments is arbitrarily chosen to be
2110 the ORIGIN. The other fragments will point to the origin via
2111 BLOCK_FRAGMENT_ORIGIN; the origin itself will have this pointer
6c34d0c2 2112 be null. The list of fragments will be chained through
a36145ca 2113 BLOCK_FRAGMENT_CHAIN from the origin. */
2114
56ba46a4 2115#define BLOCK_FRAGMENT_ORIGIN(NODE) (BLOCK_CHECK (NODE)->block.fragment_origin)
2116#define BLOCK_FRAGMENT_CHAIN(NODE) (BLOCK_CHECK (NODE)->block.fragment_chain)
a36145ca 2117
44276901 2118/* For an inlined function, this gives the location where it was called
2119 from. This is only set in the top level block, which corresponds to the
2120 inlined function scope. This is used in the debug output routines. */
2121
2122#define BLOCK_SOURCE_LOCATION(NODE) (BLOCK_CHECK (NODE)->block.locus)
2123
fb1e4f4a 2124struct GTY(()) tree_block {
027fc6ef 2125 struct tree_base base;
2126 tree chain;
f20853dd 2127
f20853dd 2128 unsigned abstract_flag : 1;
cee43f7e 2129 unsigned block_num : 31;
f20853dd 2130
93110716 2131 location_t locus;
2132
6a3e3d6d 2133 tree vars;
4b5d70fd 2134 VEC(tree,gc) *nonlocalized_vars;
2135
6a3e3d6d 2136 tree subblocks;
2137 tree supercontext;
2138 tree abstract_origin;
2139 tree fragment_origin;
2140 tree fragment_chain;
d72a838e 2141};
2142\f
2143/* Define fields and accessors for nodes representing data types. */
2144
2145/* See tree.def for documentation of the use of these fields.
82bb2115 2146 Look at the documentation of the various ..._TYPE tree codes.
2147
3927afe0 2148 Note that the type.values, type.minval, and type.maxval fields are
82bb2115 2149 overloaded and used for different macros in different kinds of types.
2150 Each macro must check to ensure the tree node is of the proper kind of
2151 type. Note also that some of the front-ends also overload these fields,
2152 so they must be checked as well. */
d72a838e 2153
8f2eb9e1 2154#define TYPE_UID(NODE) (TYPE_CHECK (NODE)->type_common.uid)
2155#define TYPE_SIZE(NODE) (TYPE_CHECK (NODE)->type_common.size)
2156#define TYPE_SIZE_UNIT(NODE) (TYPE_CHECK (NODE)->type_common.size_unit)
2157#define TYPE_POINTER_TO(NODE) (TYPE_CHECK (NODE)->type_common.pointer_to)
2158#define TYPE_REFERENCE_TO(NODE) (TYPE_CHECK (NODE)->type_common.reference_to)
2159#define TYPE_PRECISION(NODE) (TYPE_CHECK (NODE)->type_common.precision)
2160#define TYPE_NAME(NODE) (TYPE_CHECK (NODE)->type_common.name)
2161#define TYPE_NEXT_VARIANT(NODE) (TYPE_CHECK (NODE)->type_common.next_variant)
2162#define TYPE_MAIN_VARIANT(NODE) (TYPE_CHECK (NODE)->type_common.main_variant)
2163#define TYPE_CONTEXT(NODE) (TYPE_CHECK (NODE)->type_common.context)
6753bca0 2164
342ad2d6 2165/* Vector types need to check target flags to determine type. */
2166extern enum machine_mode vector_type_mode (const_tree);
2167#define TYPE_MODE(NODE) \
2168 (TREE_CODE (TYPE_CHECK (NODE)) == VECTOR_TYPE \
8f2eb9e1 2169 ? vector_type_mode (NODE) : (NODE)->type_common.mode)
342ad2d6 2170#define SET_TYPE_MODE(NODE, MODE) \
8f2eb9e1 2171 (TYPE_CHECK (NODE)->type_common.mode = (MODE))
342ad2d6 2172
09eb10ed 2173/* The "canonical" type for this type node, which is used by frontends to
2174 compare the type for equality with another type. If two types are
6753bca0 2175 equal (based on the semantics of the language), then they will have
48e1416a 2176 equivalent TYPE_CANONICAL entries.
6753bca0 2177
09eb10ed 2178 As a special case, if TYPE_CANONICAL is NULL_TREE, and thus
2179 TYPE_STRUCTURAL_EQUALITY_P is true, then it cannot
2180 be used for comparison against other types. Instead, the type is
6753bca0 2181 said to require structural equality checks, described in
09eb10ed 2182 TYPE_STRUCTURAL_EQUALITY_P.
2183
2184 For unqualified aggregate and function types the middle-end relies on
2185 TYPE_CANONICAL to tell whether two variables can be assigned
2186 to each other without a conversion. The middle-end also makes sure
2187 to assign the same alias-sets to the type partition with equal
2188 TYPE_CANONICAL of their unqualified variants. */
8f2eb9e1 2189#define TYPE_CANONICAL(NODE) (TYPE_CHECK (NODE)->type_common.canonical)
6753bca0 2190/* Indicates that the type node requires structural equality
09eb10ed 2191 checks. The compiler will need to look at the composition of the
6753bca0 2192 type to determine whether it is equal to another type, rather than
09eb10ed 2193 just comparing canonical type pointers. For instance, we would need
6753bca0 2194 to look at the return and parameter types of a FUNCTION_TYPE
09eb10ed 2195 node. */
6753bca0 2196#define TYPE_STRUCTURAL_EQUALITY_P(NODE) (TYPE_CANONICAL (NODE) == NULL_TREE)
2197/* Sets the TYPE_CANONICAL field to NULL_TREE, indicating that the
09eb10ed 2198 type node requires structural equality. */
6753bca0 2199#define SET_TYPE_STRUCTURAL_EQUALITY(NODE) (TYPE_CANONICAL (NODE) = NULL_TREE)
09eb10ed 2200
06f0b99c 2201#define TYPE_IBIT(NODE) (GET_MODE_IBIT (TYPE_MODE (NODE)))
2202#define TYPE_FBIT(NODE) (GET_MODE_FBIT (TYPE_MODE (NODE)))
d72a838e 2203
b5ba9f3a 2204/* The (language-specific) typed-based alias set for this type.
2205 Objects whose TYPE_ALIAS_SETs are different cannot alias each
2206 other. If the TYPE_ALIAS_SET is -1, no alias set has yet been
2207 assigned to this type. If the TYPE_ALIAS_SET is 0, objects of this
2208 type can alias objects of any type. */
8f2eb9e1 2209#define TYPE_ALIAS_SET(NODE) (TYPE_CHECK (NODE)->type_common.alias_set)
b5ba9f3a 2210
2211/* Nonzero iff the typed-based alias set for this type has been
2212 calculated. */
8f2eb9e1 2213#define TYPE_ALIAS_SET_KNOWN_P(NODE) \
2214 (TYPE_CHECK (NODE)->type_common.alias_set != -1)
b5ba9f3a 2215
a12eeaaf 2216/* A TREE_LIST of IDENTIFIER nodes of the attributes that apply
2217 to this type. */
8f2eb9e1 2218#define TYPE_ATTRIBUTES(NODE) (TYPE_CHECK (NODE)->type_common.attributes)
a12eeaaf 2219
c3b0175e 2220/* The alignment necessary for objects of this type.
2221 The value is an int, measured in bits. */
8f2eb9e1 2222#define TYPE_ALIGN(NODE) (TYPE_CHECK (NODE)->type_common.align)
c3b0175e 2223
aca14577 2224/* 1 if the alignment for this type was requested by "aligned" attribute,
2225 0 if it is the default for this type. */
1646aa85 2226#define TYPE_USER_ALIGN(NODE) (TYPE_CHECK (NODE)->base.user_align)
aca14577 2227
89e923d8 2228/* The alignment for NODE, in bytes. */
56ba46a4 2229#define TYPE_ALIGN_UNIT(NODE) (TYPE_ALIGN (NODE) / BITS_PER_UNIT)
89e923d8 2230
13fad59c 2231/* If your language allows you to declare types, and you want debug info
2232 for them, then you need to generate corresponding TYPE_DECL nodes.
2233 These "stub" TYPE_DECL nodes have no name, and simply point at the
2234 type node. You then set the TYPE_STUB_DECL field of the type node
2235 to point back at the TYPE_DECL node. This allows the debug routines
2236 to know that the two nodes represent the same type, so that we only
88b5b080 2237 get one debug info record for them. */
742529a2 2238#define TYPE_STUB_DECL(NODE) (TREE_CHAIN (TYPE_CHECK (NODE)))
d72a838e 2239
7dd9d898 2240/* In a RECORD_TYPE, UNION_TYPE or QUAL_UNION_TYPE, it means the type
2241 has BLKmode only because it lacks the alignment requirement for
2242 its size. */
8f2eb9e1 2243#define TYPE_NO_FORCE_BLK(NODE) \
2244 (TYPE_CHECK (NODE)->type_common.no_force_blk_flag)
d72a838e 2245
2246/* Nonzero in a type considered volatile as a whole. */
35cc02b5 2247#define TYPE_VOLATILE(NODE) (TYPE_CHECK (NODE)->base.volatile_flag)
d72a838e 2248
2249/* Means this type is const-qualified. */
35cc02b5 2250#define TYPE_READONLY(NODE) (TYPE_CHECK (NODE)->base.readonly_flag)
d72a838e 2251
a5b1863e 2252/* If nonzero, this type is `restrict'-qualified, in the C sense of
2253 the term. */
8f2eb9e1 2254#define TYPE_RESTRICT(NODE) (TYPE_CHECK (NODE)->type_common.restrict_flag)
a5b1863e 2255
84bfaaeb 2256/* If nonzero, type's name shouldn't be emitted into debug info. */
2257#define TYPE_NAMELESS(NODE) (TYPE_CHECK (NODE)->base.nameless_flag)
2258
bd1a81f7 2259/* The address space the type is in. */
2260#define TYPE_ADDR_SPACE(NODE) (TYPE_CHECK (NODE)->base.address_space)
2261
a5b1863e 2262/* There is a TYPE_QUAL value for each type qualifier. They can be
2263 combined by bitwise-or to form the complete set of qualifiers for a
2264 type. */
ece7f9e3 2265enum cv_qualifier
2266 {
2267 TYPE_UNQUALIFIED = 0x0,
2268 TYPE_QUAL_CONST = 0x1,
2269 TYPE_QUAL_VOLATILE = 0x2,
2270 TYPE_QUAL_RESTRICT = 0x4
2271 };
a5b1863e 2272
bd1a81f7 2273/* Encode/decode the named memory support as part of the qualifier. If more
2274 than 8 qualifiers are added, these macros need to be adjusted. */
2275#define ENCODE_QUAL_ADDR_SPACE(NUM) ((NUM & 0xFF) << 8)
2276#define DECODE_QUAL_ADDR_SPACE(X) (((X) >> 8) & 0xFF)
2277
2278/* Return all qualifiers except for the address space qualifiers. */
2279#define CLEAR_QUAL_ADDR_SPACE(X) ((X) & ~0xFF00)
2280
2281/* Only keep the address space out of the qualifiers and discard the other
2282 qualifiers. */
2283#define KEEP_QUAL_ADDR_SPACE(X) ((X) & 0xFF00)
2284
a5b1863e 2285/* The set of type qualifiers for this type. */
716fc477 2286#define TYPE_QUALS(NODE) \
3637bb87 2287 ((int) ((TYPE_READONLY (NODE) * TYPE_QUAL_CONST) \
2288 | (TYPE_VOLATILE (NODE) * TYPE_QUAL_VOLATILE) \
2289 | (TYPE_RESTRICT (NODE) * TYPE_QUAL_RESTRICT) \
2290 | (ENCODE_QUAL_ADDR_SPACE (TYPE_ADDR_SPACE (NODE)))))
bd1a81f7 2291
2292/* The same as TYPE_QUALS without the address space qualifications. */
2293#define TYPE_QUALS_NO_ADDR_SPACE(NODE) \
3637bb87 2294 ((int) ((TYPE_READONLY (NODE) * TYPE_QUAL_CONST) \
2295 | (TYPE_VOLATILE (NODE) * TYPE_QUAL_VOLATILE) \
2296 | (TYPE_RESTRICT (NODE) * TYPE_QUAL_RESTRICT)))
a5b1863e 2297
bc3a4bfd 2298/* These flags are available for each language front end to use internally. */
8f2eb9e1 2299#define TYPE_LANG_FLAG_0(NODE) (TYPE_CHECK (NODE)->type_common.lang_flag_0)
2300#define TYPE_LANG_FLAG_1(NODE) (TYPE_CHECK (NODE)->type_common.lang_flag_1)
2301#define TYPE_LANG_FLAG_2(NODE) (TYPE_CHECK (NODE)->type_common.lang_flag_2)
2302#define TYPE_LANG_FLAG_3(NODE) (TYPE_CHECK (NODE)->type_common.lang_flag_3)
2303#define TYPE_LANG_FLAG_4(NODE) (TYPE_CHECK (NODE)->type_common.lang_flag_4)
2304#define TYPE_LANG_FLAG_5(NODE) (TYPE_CHECK (NODE)->type_common.lang_flag_5)
2305#define TYPE_LANG_FLAG_6(NODE) (TYPE_CHECK (NODE)->type_common.lang_flag_6)
d72a838e 2306
4ee9c684 2307/* Used to keep track of visited nodes in tree traversals. This is set to
2308 0 by copy_node and make_node. */
35cc02b5 2309#define TREE_VISITED(NODE) ((NODE)->base.visited)
4ee9c684 2310
b759e947 2311/* If set in an ARRAY_TYPE, indicates a string type (for languages
2312 that distinguish string from array of char).
e026e576 2313 If set in a INTEGER_TYPE, indicates a character type. */
8f2eb9e1 2314#define TYPE_STRING_FLAG(NODE) (TYPE_CHECK (NODE)->type_common.string_flag)
255218ff 2315
8a95ab85 2316/* For a VECTOR_TYPE, this is the number of sub-parts of the vector. */
56ba46a4 2317#define TYPE_VECTOR_SUBPARTS(VECTOR_TYPE) \
99d38b9e 2318 (((unsigned HOST_WIDE_INT) 1) \
8f2eb9e1 2319 << VECTOR_TYPE_CHECK (VECTOR_TYPE)->type_common.precision)
99d38b9e 2320
2321/* Set precision to n when we have 2^n sub-parts of the vector. */
2322#define SET_TYPE_VECTOR_SUBPARTS(VECTOR_TYPE, X) \
8f2eb9e1 2323 (VECTOR_TYPE_CHECK (VECTOR_TYPE)->type_common.precision = exact_log2 (X))
8a95ab85 2324
8b50765f 2325/* Nonzero in a VECTOR_TYPE if the frontends should not emit warnings
2326 about missing conversions to other vector types of the same size. */
8d125f7d 2327#define TYPE_VECTOR_OPAQUE(NODE) \
e0213ecc 2328 (VECTOR_TYPE_CHECK (NODE)->base.default_def_flag)
8d125f7d 2329
fcdd3ab3 2330/* Indicates that objects of this type must be initialized by calling a
be98dac3 2331 function when they are created. */
851dfbff 2332#define TYPE_NEEDS_CONSTRUCTING(NODE) \
8f2eb9e1 2333 (TYPE_CHECK (NODE)->type_common.needs_constructing_flag)
be98dac3 2334
8df5a43d 2335/* Indicates that a UNION_TYPE object should be passed the same way that
2336 the first union alternative would be passed, or that a RECORD_TYPE
2337 object should be passed the same way that the first (and only) member
2338 would be passed. */
2339#define TYPE_TRANSPARENT_AGGR(NODE) \
8f2eb9e1 2340 (RECORD_OR_UNION_CHECK (NODE)->type_common.transparent_aggr_flag)
851dfbff 2341
c67bf066 2342/* For an ARRAY_TYPE, indicates that it is not permitted to take the
2343 address of a component of the type. This is the counterpart of
2344 DECL_NONADDRESSABLE_P for arrays, see the definition of this flag. */
851dfbff 2345#define TYPE_NONALIASED_COMPONENT(NODE) \
8f2eb9e1 2346 (ARRAY_TYPE_CHECK (NODE)->type_common.transparent_aggr_flag)
fa602b3f 2347
ad87de1e 2348/* Indicated that objects of this type should be laid out in as
1a8ea5c4 2349 compact a way as possible. */
1646aa85 2350#define TYPE_PACKED(NODE) (TYPE_CHECK (NODE)->base.packed_flag)
1a8ea5c4 2351
2bd342e5 2352/* Used by type_contains_placeholder_p to avoid recomputation.
2353 Values are: 0 (unknown), 1 (false), 2 (true). Never access
2354 this field directly. */
2355#define TYPE_CONTAINS_PLACEHOLDER_INTERNAL(NODE) \
8f2eb9e1 2356 (TYPE_CHECK (NODE)->type_common.contains_placeholder_bits)
2bd342e5 2357
929d2a90 2358/* The debug output functions use the symtab union field to store
2359 information specific to the debugging format. The different debug
2360 output hooks store different types in the union field. These three
2361 macros are used to access different fields in the union. The debug
2362 hooks are responsible for consistently using only a specific
2363 macro. */
2364
2365/* Symtab field as an integer. Used by stabs generator in dbxout.c to
2366 hold the type's number in the generated stabs. */
8f2eb9e1 2367#define TYPE_SYMTAB_ADDRESS(NODE) \
2368 (TYPE_CHECK (NODE)->type_common.symtab.address)
929d2a90 2369
2370/* Symtab field as a string. Used by COFF generator in sdbout.c to
2371 hold struct/union type tag names. */
8f2eb9e1 2372#define TYPE_SYMTAB_POINTER(NODE) \
2373 (TYPE_CHECK (NODE)->type_common.symtab.pointer)
929d2a90 2374
2375/* Symtab field as a pointer to a DWARF DIE. Used by DWARF generator
2376 in dwarf2out.c to point to the DIE generated for the type. */
8f2eb9e1 2377#define TYPE_SYMTAB_DIE(NODE) \
2378 (TYPE_CHECK (NODE)->type_common.symtab.die)
929d2a90 2379
2380/* The garbage collector needs to know the interpretation of the
2381 symtab field. These constants represent the different types in the
2382 union. */
2383
2384#define TYPE_SYMTAB_IS_ADDRESS (0)
2385#define TYPE_SYMTAB_IS_POINTER (1)
2386#define TYPE_SYMTAB_IS_DIE (2)
2387
1f3233d1 2388struct die_struct;
2389
8f2eb9e1 2390struct GTY(()) tree_type_common {
851dfbff 2391 struct tree_common common;
6a3e3d6d 2392 tree size;
2393 tree size_unit;
2394 tree attributes;
108009b4 2395 unsigned int uid;
d72a838e 2396
33a0b99d 2397 unsigned int precision : 10;
d72a838e 2398 unsigned no_force_blk_flag : 1;
be98dac3 2399 unsigned needs_constructing_flag : 1;
8df5a43d 2400 unsigned transparent_aggr_flag : 1;
a5b1863e 2401 unsigned restrict_flag : 1;
2bd342e5 2402 unsigned contains_placeholder_bits : 2;
a5b1863e 2403
33a0b99d 2404 ENUM_BITFIELD(machine_mode) mode : 8;
2405
2406 unsigned string_flag : 1;
d72a838e 2407 unsigned lang_flag_0 : 1;
2408 unsigned lang_flag_1 : 1;
2409 unsigned lang_flag_2 : 1;
2410 unsigned lang_flag_3 : 1;
2411 unsigned lang_flag_4 : 1;
2412 unsigned lang_flag_5 : 1;
2413 unsigned lang_flag_6 : 1;
2414
c926ba81 2415 unsigned int align;
9fac1c66 2416 alias_set_type alias_set;
6a3e3d6d 2417 tree pointer_to;
2418 tree reference_to;
1f3233d1 2419 union tree_type_symtab {
929d2a90 2420 int GTY ((tag ("TYPE_SYMTAB_IS_ADDRESS"))) address;
2421 const char * GTY ((tag ("TYPE_SYMTAB_IS_POINTER"))) pointer;
2422 struct die_struct * GTY ((tag ("TYPE_SYMTAB_IS_DIE"))) die;
2423 } GTY ((desc ("debug_hooks->tree_type_symtab_field"))) symtab;
6a3e3d6d 2424 tree name;
6a3e3d6d 2425 tree next_variant;
2426 tree main_variant;
6a3e3d6d 2427 tree context;
6753bca0 2428 tree canonical;
8f2eb9e1 2429};
2430
2431#define TYPE_LANG_SPECIFIC(NODE) \
2432 (TYPE_CHECK (NODE)->type_with_lang_specific.lang_specific)
2433
2434struct GTY(()) tree_type_with_lang_specific {
2435 struct tree_type_common common;
d72a838e 2436 /* Points to a structure whose details depend on the language in use. */
2437 struct lang_type *lang_specific;
2438};
8f2eb9e1 2439
2440#define TYPE_VALUES(NODE) (ENUMERAL_TYPE_CHECK (NODE)->type_non_common.values)
2441#define TYPE_DOMAIN(NODE) (ARRAY_TYPE_CHECK (NODE)->type_non_common.values)
2442#define TYPE_FIELDS(NODE) \
2443 (RECORD_OR_UNION_CHECK (NODE)->type_non_common.values)
2444#define TYPE_CACHED_VALUES(NODE) (TYPE_CHECK(NODE)->type_non_common.values)
2445#define TYPE_ARG_TYPES(NODE) \
2446 (FUNC_OR_METHOD_CHECK (NODE)->type_non_common.values)
2447#define TYPE_VALUES_RAW(NODE) (TYPE_CHECK(NODE)->type_non_common.values)
2448
2449#define TYPE_METHODS(NODE) \
2450 (RECORD_OR_UNION_CHECK (NODE)->type_non_common.maxval)
2451#define TYPE_VFIELD(NODE) \
2452 (RECORD_OR_UNION_CHECK (NODE)->type_non_common.minval)
2453#define TYPE_METHOD_BASETYPE(NODE) \
2454 (FUNC_OR_METHOD_CHECK (NODE)->type_non_common.maxval)
2455#define TYPE_OFFSET_BASETYPE(NODE) \
2456 (OFFSET_TYPE_CHECK (NODE)->type_non_common.maxval)
2457#define TYPE_MAXVAL(NODE) (TYPE_CHECK (NODE)->type_non_common.maxval)
2458#define TYPE_MINVAL(NODE) (TYPE_CHECK (NODE)->type_non_common.minval)
2459#define TYPE_NEXT_PTR_TO(NODE) \
2460 (POINTER_TYPE_CHECK (NODE)->type_non_common.minval)
2461#define TYPE_NEXT_REF_TO(NODE) \
2462 (REFERENCE_TYPE_CHECK (NODE)->type_non_common.minval)
2463#define TYPE_MIN_VALUE(NODE) \
2464 (NUMERICAL_TYPE_CHECK (NODE)->type_non_common.minval)
2465#define TYPE_MAX_VALUE(NODE) \
2466 (NUMERICAL_TYPE_CHECK (NODE)->type_non_common.maxval)
2467
2468/* If non-NULL, this is an upper bound of the size (in bytes) of an
2469 object of the given ARRAY_TYPE_NON_COMMON. This allows temporaries to be
2470 allocated. */
2471#define TYPE_ARRAY_MAX_SIZE(ARRAY_TYPE) \
2472 (ARRAY_TYPE_CHECK (ARRAY_TYPE)->type_non_common.maxval)
2473
2474/* For record and union types, information about this type, as a base type
2475 for itself. */
2476#define TYPE_BINFO(NODE) (RECORD_OR_UNION_CHECK(NODE)->type_non_common.binfo)
2477
2478/* For non record and union types, used in a language-dependent way. */
2479#define TYPE_LANG_SLOT_1(NODE) \
2480 (NOT_RECORD_OR_UNION_CHECK(NODE)->type_non_common.binfo)
2481
2482struct GTY(()) tree_type_non_common {
2483 struct tree_type_with_lang_specific with_lang_specific;
2484 tree values;
2485 tree minval;
2486 tree maxval;
2487 tree binfo;
2488};
d72a838e 2489\f
2490/* Define accessor macros for information about type inheritance
2491 and basetypes.
2492
2493 A "basetype" means a particular usage of a data type for inheritance
2494 in another type. Each such basetype usage has its own "binfo"
2495 object to describe it. The binfo object is a TREE_VEC node.
2496
2497 Inheritance is represented by the binfo nodes allocated for a
2498 given type. For example, given types C and D, such that D is
2499 inherited by C, 3 binfo nodes will be allocated: one for describing
2500 the binfo properties of C, similarly one for D, and one for
2501 describing the binfo properties of D as a base type for C.
2502 Thus, given a pointer to class C, one can get a pointer to the binfo
2503 of D acting as a basetype for C by looking at C's binfo's basetypes. */
2504
57c28194 2505/* BINFO specific flags. */
2506
2507/* Nonzero means that the derivation chain is via a `virtual' declaration. */
35cc02b5 2508#define BINFO_VIRTUAL_P(NODE) (TREE_BINFO_CHECK (NODE)->base.static_flag)
57c28194 2509
2510/* Flags for language dependent use. */
2511#define BINFO_MARKED(NODE) TREE_LANG_FLAG_0(TREE_BINFO_CHECK(NODE))
2512#define BINFO_FLAG_1(NODE) TREE_LANG_FLAG_1(TREE_BINFO_CHECK(NODE))
2513#define BINFO_FLAG_2(NODE) TREE_LANG_FLAG_2(TREE_BINFO_CHECK(NODE))
2514#define BINFO_FLAG_3(NODE) TREE_LANG_FLAG_3(TREE_BINFO_CHECK(NODE))
2515#define BINFO_FLAG_4(NODE) TREE_LANG_FLAG_4(TREE_BINFO_CHECK(NODE))
2516#define BINFO_FLAG_5(NODE) TREE_LANG_FLAG_5(TREE_BINFO_CHECK(NODE))
2517#define BINFO_FLAG_6(NODE) TREE_LANG_FLAG_6(TREE_BINFO_CHECK(NODE))
2518
d72a838e 2519/* The actual data type node being inherited in this basetype. */
3cb98335 2520#define BINFO_TYPE(NODE) TREE_TYPE (TREE_BINFO_CHECK(NODE))
d72a838e 2521
2522/* The offset where this basetype appears in its containing type.
2523 BINFO_OFFSET slot holds the offset (in bytes)
2524 from the base of the complete object to the base of the part of the
2525 object that is allocated on behalf of this `type'.
2526 This is always 0 except when there is multiple inheritance. */
6c34d0c2 2527
3cb98335 2528#define BINFO_OFFSET(NODE) (TREE_BINFO_CHECK(NODE)->binfo.offset)
d6c9423f 2529#define BINFO_OFFSET_ZEROP(NODE) (integer_zerop (BINFO_OFFSET (NODE)))
d72a838e 2530
2531/* The virtual function table belonging to this basetype. Virtual
2532 function tables provide a mechanism for run-time method dispatching.
2533 The entries of a virtual function table are language-dependent. */
2534
3cb98335 2535#define BINFO_VTABLE(NODE) (TREE_BINFO_CHECK(NODE)->binfo.vtable)
d72a838e 2536
2537/* The virtual functions in the virtual function table. This is
2538 a TREE_LIST that is used as an initial approximation for building
2539 a virtual function table for this basetype. */
3cb98335 2540#define BINFO_VIRTUALS(NODE) (TREE_BINFO_CHECK(NODE)->binfo.virtuals)
d72a838e 2541
6ed1e0f8 2542/* A vector of binfos for the direct basetypes inherited by this
2543 basetype.
d72a838e 2544
6ed1e0f8 2545 If this basetype describes type D as inherited in C, and if the
2546 basetypes of D are E and F, then this vector contains binfos for
f6cc6a08 2547 inheritance of E and F by C. */
2548#define BINFO_BASE_BINFOS(NODE) (&TREE_BINFO_CHECK(NODE)->binfo.base_binfos)
d72a838e 2549
824507ab 2550/* The number of basetypes for NODE. */
f6cc6a08 2551#define BINFO_N_BASE_BINFOS(NODE) (VEC_length (tree, BINFO_BASE_BINFOS (NODE)))
824507ab 2552
2cfde4f3 2553/* Accessor macro to get to the Nth base binfo of this binfo. */
f6cc6a08 2554#define BINFO_BASE_BINFO(NODE,N) \
2555 (VEC_index (tree, BINFO_BASE_BINFOS (NODE), (N)))
2556#define BINFO_BASE_ITERATE(NODE,N,B) \
2557 (VEC_iterate (tree, BINFO_BASE_BINFOS (NODE), (N), (B)))
2558#define BINFO_BASE_APPEND(NODE,T) \
2559 (VEC_quick_push (tree, BINFO_BASE_BINFOS (NODE), (T)))
d6c9423f 2560
809d9739 2561/* For a BINFO record describing a virtual base class, i.e., one where
2562 TREE_VIA_VIRTUAL is set, this field assists in locating the virtual
4b922c0c 2563 base. The actual contents are language-dependent. In the C++
2564 front-end this field is an INTEGER_CST giving an offset into the
2565 vtable where the offset to the virtual base can be found. */
3cb98335 2566#define BINFO_VPTR_FIELD(NODE) (TREE_BINFO_CHECK(NODE)->binfo.vptr_field)
44882314 2567
95f3173a 2568/* Indicates the accesses this binfo has to its bases. The values are
2569 access_public_node, access_protected_node or access_private_node.
2570 If this array is not present, public access is implied. */
2cfde4f3 2571#define BINFO_BASE_ACCESSES(NODE) (TREE_BINFO_CHECK(NODE)->binfo.base_accesses)
db77fe17 2572
2573#define BINFO_BASE_ACCESS(NODE,N) \
2574 VEC_index (tree, BINFO_BASE_ACCESSES (NODE), (N))
2575#define BINFO_BASE_ACCESS_APPEND(NODE,T) \
2576 VEC_quick_push (tree, BINFO_BASE_ACCESSES (NODE), (T))
95f3173a 2577
f6cc6a08 2578/* The index in the VTT where this subobject's sub-VTT can be found.
2579 NULL_TREE if there is no sub-VTT. */
2580#define BINFO_SUBVTT_INDEX(NODE) (TREE_BINFO_CHECK(NODE)->binfo.vtt_subvtt)
95f3173a 2581
f6cc6a08 2582/* The index in the VTT where the vptr for this subobject can be
2583 found. NULL_TREE if there is no secondary vptr in the VTT. */
2584#define BINFO_VPTR_INDEX(NODE) (TREE_BINFO_CHECK(NODE)->binfo.vtt_vptr)
2585
2cfde4f3 2586/* The BINFO_INHERITANCE_CHAIN points at the binfo for the base
2587 inheriting this base for non-virtual bases. For virtual bases it
eea75c62 2588 points either to the binfo for which this is a primary binfo, or to
2589 the binfo of the most derived type. */
3cb98335 2590#define BINFO_INHERITANCE_CHAIN(NODE) \
2591 (TREE_BINFO_CHECK(NODE)->binfo.inheritance)
2592
fb1e4f4a 2593struct GTY (()) tree_binfo {
3cb98335 2594 struct tree_common common;
2595
2596 tree offset;
2597 tree vtable;
2598 tree virtuals;
3cb98335 2599 tree vptr_field;
046bfc77 2600 VEC(tree,gc) *base_accesses;
3cb98335 2601 tree inheritance;
2602
f6cc6a08 2603 tree vtt_subvtt;
2604 tree vtt_vptr;
f6cc6a08 2605
046bfc77 2606 VEC(tree,none) base_binfos;
3cb98335 2607};
3cb98335 2608
d72a838e 2609\f
2610/* Define fields and accessors for nodes representing declared names. */
2611
4ee9c684 2612/* Nonzero if DECL represents a variable for the SSA passes. */
437f5d6b 2613#define SSA_VAR_P(DECL) \
2614 (TREE_CODE (DECL) == VAR_DECL \
2615 || TREE_CODE (DECL) == PARM_DECL \
2616 || TREE_CODE (DECL) == RESULT_DECL \
437f5d6b 2617 || (TREE_CODE (DECL) == SSA_NAME \
2618 && (TREE_CODE (SSA_NAME_VAR (DECL)) == VAR_DECL \
2619 || TREE_CODE (SSA_NAME_VAR (DECL)) == PARM_DECL \
dd277d48 2620 || TREE_CODE (SSA_NAME_VAR (DECL)) == RESULT_DECL)))
4ee9c684 2621
56ba46a4 2622
56ba46a4 2623
56ba46a4 2624
5ded8c6f 2625/* Enumerate visibility settings. */
2626#ifndef SYMBOL_VISIBILITY_DEFINED
2627#define SYMBOL_VISIBILITY_DEFINED
2628enum symbol_visibility
2629{
2630 VISIBILITY_DEFAULT,
4a2849cb 2631 VISIBILITY_PROTECTED,
5ded8c6f 2632 VISIBILITY_HIDDEN,
4a2849cb 2633 VISIBILITY_INTERNAL
5ded8c6f 2634};
2635#endif
56ba46a4 2636
5ded8c6f 2637struct function;
6c34d0c2 2638
1767a056 2639#define DECL_CHAIN(NODE) (TREE_CHAIN (DECL_MINIMAL_CHECK (NODE)))
7e64c604 2640
5ded8c6f 2641/* This is the name of the object as written by the user.
2642 It is an IDENTIFIER_NODE. */
2643#define DECL_NAME(NODE) (DECL_MINIMAL_CHECK (NODE)->decl_minimal.name)
56ba46a4 2644
5ded8c6f 2645/* Every ..._DECL node gets a unique number. */
2646#define DECL_UID(NODE) (DECL_MINIMAL_CHECK (NODE)->decl_minimal.uid)
7e64c604 2647
688ff29b 2648/* DEBUG_EXPR_DECLs get negative UID numbers, to catch erroneous
2649 uses. */
2650#define DEBUG_TEMP_UID(NODE) (-DECL_UID (TREE_CHECK ((NODE), DEBUG_EXPR_DECL)))
2651
1a981e1a 2652/* Every ..._DECL node gets a unique number that stays the same even
2653 when the decl is copied by the inliner once it is set. */
eb65426a 2654#define DECL_PT_UID(NODE) \
2655 (DECL_COMMON_CHECK (NODE)->decl_common.pt_uid == -1u \
2656 ? (NODE)->decl_minimal.uid : (NODE)->decl_common.pt_uid)
1a981e1a 2657/* Initialize the ..._DECL node pt-uid to the decls uid. */
eb65426a 2658#define SET_DECL_PT_UID(NODE, UID) \
2659 (DECL_COMMON_CHECK (NODE)->decl_common.pt_uid = (UID))
1a981e1a 2660/* Whether the ..._DECL node pt-uid has been initialized and thus needs to
2661 be preserved when copyin the decl. */
eb65426a 2662#define DECL_PT_UID_SET_P(NODE) \
2663 (DECL_COMMON_CHECK (NODE)->decl_common.pt_uid != -1u)
1a981e1a 2664
5ded8c6f 2665/* These two fields describe where in the source code the declaration
2666 was. If the declaration appears in several places (as for a C
2667 function that is declared first and then defined later), this
2668 information should refer to the definition. */
eb65426a 2669#define DECL_SOURCE_LOCATION(NODE) \
2670 (DECL_MINIMAL_CHECK (NODE)->decl_minimal.locus)
5ded8c6f 2671#define DECL_SOURCE_FILE(NODE) LOCATION_FILE (DECL_SOURCE_LOCATION (NODE))
2672#define DECL_SOURCE_LINE(NODE) LOCATION_LINE (DECL_SOURCE_LOCATION (NODE))
5ded8c6f 2673#define DECL_IS_BUILTIN(DECL) \
2674 (DECL_SOURCE_LOCATION (DECL) <= BUILTINS_LOCATION)
56ba46a4 2675
40109983 2676/* For FIELD_DECLs, this is the RECORD_TYPE, UNION_TYPE, or
2677 QUAL_UNION_TYPE node that the field is a member of. For VAR_DECL,
34e5cced 2678 PARM_DECL, FUNCTION_DECL, LABEL_DECL, RESULT_DECL, and CONST_DECL
2679 nodes, this points to either the FUNCTION_DECL for the containing
2680 function, the RECORD_TYPE or UNION_TYPE for the containing type, or
40109983 2681 NULL_TREE or a TRANSLATION_UNIT_DECL if the given decl has "file
22bf03ad 2682 scope". In particular, for VAR_DECLs which are virtual table pointers
2683 (they have DECL_VIRTUAL set), we use DECL_CONTEXT to determine the type
2684 they belong to. */
5ded8c6f 2685#define DECL_CONTEXT(NODE) (DECL_MINIMAL_CHECK (NODE)->decl_minimal.context)
eb65426a 2686#define DECL_FIELD_CONTEXT(NODE) \
2687 (FIELD_DECL_CHECK (NODE)->decl_minimal.context)
84bfaaeb 2688
2689/* If nonzero, decl's name shouldn't be emitted into debug info. */
2690#define DECL_NAMELESS(NODE) (DECL_MINIMAL_CHECK (NODE)->base.nameless_flag)
2691
fb1e4f4a 2692struct GTY(()) tree_decl_minimal {
5ded8c6f 2693 struct tree_common common;
2694 location_t locus;
2695 unsigned int uid;
2696 tree name;
2697 tree context;
2698};
2699
4fb5e5ca 2700
5ded8c6f 2701/* For any sort of a ..._DECL node, this points to the original (abstract)
16e43d96 2702 decl node which this decl is an inlined/cloned instance of, or else it
2703 is NULL indicating that this decl is not an instance of some other decl.
2704
2705 The C front-end also uses this in a nested declaration of an inline
2706 function, to point back to the definition. */
eb65426a 2707#define DECL_ABSTRACT_ORIGIN(NODE) \
2708 (DECL_COMMON_CHECK (NODE)->decl_common.abstract_origin)
5ded8c6f 2709
2710/* Like DECL_ABSTRACT_ORIGIN, but returns NODE if there's no abstract
2711 origin. This is useful when setting the DECL_ABSTRACT_ORIGIN. */
2712#define DECL_ORIGIN(NODE) \
2713 (DECL_ABSTRACT_ORIGIN (NODE) ? DECL_ABSTRACT_ORIGIN (NODE) : (NODE))
2714
2715/* Nonzero for any sort of ..._DECL node means this decl node represents an
2716 inline instance of some original (abstract) decl from an inline function;
2717 suppress any warnings about shadowing some other variable. FUNCTION_DECL
2718 nodes can also have their abstract origin set to themselves. */
eb65426a 2719#define DECL_FROM_INLINE(NODE) \
2720 (DECL_ABSTRACT_ORIGIN (NODE) != NULL_TREE \
2721 && DECL_ABSTRACT_ORIGIN (NODE) != (NODE))
5ded8c6f 2722
e3c541f0 2723/* In a DECL this is the field where attributes are stored. */
eb65426a 2724#define DECL_ATTRIBUTES(NODE) \
2725 (DECL_COMMON_CHECK (NODE)->decl_common.attributes)
5ded8c6f 2726
d72a838e 2727/* For a FUNCTION_DECL, holds the tree of BINDINGs.
40109983 2728 For a TRANSLATION_UNIT_DECL, holds the namespace's BLOCK.
d72a838e 2729 For a VAR_DECL, holds the initial value.
4682b6fe 2730 For a PARM_DECL, used for DECL_ARG_TYPE--default
d72a838e 2731 values for parameters are encoded in the type of the function,
66d12a6c 2732 not in the PARM_DECL slot.
5ded8c6f 2733 For a FIELD_DECL, this is used for enumeration values and the C
7bd4091f 2734 frontend uses it for temporarily storing bitwidth of bitfields.
66d12a6c 2735
2736 ??? Need to figure out some way to check this isn't a PARM_DECL. */
5ded8c6f 2737#define DECL_INITIAL(NODE) (DECL_COMMON_CHECK (NODE)->decl_common.initial)
2738
b278476e 2739/* Holds the size of the datum, in bits, as a tree expression.
d72a838e 2740 Need not be constant. */
5ded8c6f 2741#define DECL_SIZE(NODE) (DECL_COMMON_CHECK (NODE)->decl_common.size)
b278476e 2742/* Likewise for the size in bytes. */
5ded8c6f 2743#define DECL_SIZE_UNIT(NODE) (DECL_COMMON_CHECK (NODE)->decl_common.size_unit)
c6713de4 2744/* Holds the alignment required for the datum, in bits. */
097b5c8b 2745#define DECL_ALIGN(NODE) (DECL_COMMON_CHECK (NODE)->decl_common.align)
c6713de4 2746/* The alignment of NODE, in bytes. */
2747#define DECL_ALIGN_UNIT(NODE) (DECL_ALIGN (NODE) / BITS_PER_UNIT)
6c96b31e 2748/* Set if the alignment of this DECL has been set by the user, for
2749 example with an 'aligned' attribute. */
eb65426a 2750#define DECL_USER_ALIGN(NODE) \
1646aa85 2751 (DECL_COMMON_CHECK (NODE)->base.user_align)
8fd3ce0b 2752/* Holds the machine mode corresponding to the declaration of a variable or
2753 field. Always equal to TYPE_MODE (TREE_TYPE (decl)) except for a
2754 FIELD_DECL. */
5ded8c6f 2755#define DECL_MODE(NODE) (DECL_COMMON_CHECK (NODE)->decl_common.mode)
56ba46a4 2756
fc0cc704 2757/* For FUNCTION_DECL, if it is built-in, this identifies which built-in
2758 operation it is. Note, however, that this field is overloaded, with
2759 DECL_BUILT_IN_CLASS as the discriminant, so the latter must always be
2760 checked before any access to the former. */
097b5c8b 2761#define DECL_FUNCTION_CODE(NODE) \
2762 (FUNCTION_DECL_CHECK (NODE)->function_decl.function_code)
9366434c 2763#define DECL_DEBUG_EXPR_IS_FROM(NODE) \
5ded8c6f 2764 (DECL_COMMON_CHECK (NODE)->decl_common.debug_expr_is_from)
d72a838e 2765
58d82cd0 2766#define DECL_FUNCTION_PERSONALITY(NODE) \
2767 (FUNCTION_DECL_CHECK (NODE)->function_decl.personality)
2768
5d4990a0 2769/* Nonzero for a given ..._DECL node means that the name of this node should
28fa603b 2770 be ignored for symbolic debug purposes. For a TYPE_DECL, this means that
2771 the associated type should be ignored. For a FUNCTION_DECL, the body of
2772 the function should also be ignored. */
eb65426a 2773#define DECL_IGNORED_P(NODE) \
2774 (DECL_COMMON_CHECK (NODE)->decl_common.ignored_flag)
d72a838e 2775
f7a75810 2776/* Nonzero for a given ..._DECL node means that this node represents an
2777 "abstract instance" of the given declaration (e.g. in the original
2778 declaration of an inline function). When generating symbolic debugging
c3418f42 2779 information, we mustn't try to generate any address information for nodes
f7a75810 2780 marked as "abstract instances" because we don't actually generate
2781 any code or allocate any data space for such instances. */
eb65426a 2782#define DECL_ABSTRACT(NODE) \
2783 (DECL_COMMON_CHECK (NODE)->decl_common.abstract_flag)
f7a772a7 2784
9ed1ded5 2785/* Language-specific decl information. */
eb65426a 2786#define DECL_LANG_SPECIFIC(NODE) \
2787 (DECL_COMMON_CHECK (NODE)->decl_common.lang_specific)
d72a838e 2788
5ded8c6f 2789/* In a VAR_DECL or FUNCTION_DECL, nonzero means external reference:
65661e93 2790 do not allocate storage, and refer to a definition elsewhere. Note that
2791 this does not necessarily imply the entity represented by NODE
2792 has no program source-level definition in this translation unit. For
2793 example, for a FUNCTION_DECL, DECL_SAVED_TREE may be non-NULL and
2794 DECL_EXTERNAL may be true simultaneously; that can be the case for
2795 a C99 "extern inline" function. */
33a0b99d 2796#define DECL_EXTERNAL(NODE) (DECL_COMMON_CHECK (NODE)->decl_common.decl_flag_1)
d72a838e 2797
d72a838e 2798/* Nonzero in a ..._DECL means this variable is ref'd from a nested function.
2799 For VAR_DECL nodes, PARM_DECL nodes, and FUNCTION_DECL nodes.
2800
2801 For LABEL_DECL nodes, nonzero if nonlocal gotos to the label are permitted.
2802
2803 Also set in some languages for variables, etc., outside the normal
2804 lexical scope, such as class instance variables. */
eb65426a 2805#define DECL_NONLOCAL(NODE) \
2806 (DECL_COMMON_CHECK (NODE)->decl_common.nonlocal_flag)
d72a838e 2807
5ded8c6f 2808/* Used in VAR_DECLs to indicate that the variable is a vtable.
2809 Used in FIELD_DECLs for vtable pointers.
2810 Used in FUNCTION_DECLs to indicate that the function is virtual. */
eb65426a 2811#define DECL_VIRTUAL_P(NODE) \
2812 (DECL_COMMON_CHECK (NODE)->decl_common.virtual_flag)
d72a838e 2813
5ded8c6f 2814/* Used to indicate that this DECL represents a compiler-generated entity. */
eb65426a 2815#define DECL_ARTIFICIAL(NODE) \
2816 (DECL_COMMON_CHECK (NODE)->decl_common.artificial_flag)
e2b04249 2817
5ded8c6f 2818/* Additional flags for language-specific uses. */
eb65426a 2819#define DECL_LANG_FLAG_0(NODE) \
2820 (DECL_COMMON_CHECK (NODE)->decl_common.lang_flag_0)
2821#define DECL_LANG_FLAG_1(NODE) \
2822 (DECL_COMMON_CHECK (NODE)->decl_common.lang_flag_1)
2823#define DECL_LANG_FLAG_2(NODE) \
2824 (DECL_COMMON_CHECK (NODE)->decl_common.lang_flag_2)
2825#define DECL_LANG_FLAG_3(NODE) \
2826 (DECL_COMMON_CHECK (NODE)->decl_common.lang_flag_3)
2827#define DECL_LANG_FLAG_4(NODE) \
2828 (DECL_COMMON_CHECK (NODE)->decl_common.lang_flag_4)
2829#define DECL_LANG_FLAG_5(NODE) \
2830 (DECL_COMMON_CHECK (NODE)->decl_common.lang_flag_5)
2831#define DECL_LANG_FLAG_6(NODE) \
2832 (DECL_COMMON_CHECK (NODE)->decl_common.lang_flag_6)
2833#define DECL_LANG_FLAG_7(NODE) \
2834 (DECL_COMMON_CHECK (NODE)->decl_common.lang_flag_7)
2835#define DECL_LANG_FLAG_8(NODE) \
2836 (DECL_COMMON_CHECK (NODE)->decl_common.lang_flag_8)
60f65a0a 2837
2108f7c0 2838/* Nonzero for a scope which is equal to file scope. */
2839#define SCOPE_FILE_SCOPE_P(EXP) \
2840 (! (EXP) || TREE_CODE (EXP) == TRANSLATION_UNIT_DECL)
5ded8c6f 2841/* Nonzero for a decl which is at file scope. */
2108f7c0 2842#define DECL_FILE_SCOPE_P(EXP) SCOPE_FILE_SCOPE_P (DECL_CONTEXT (EXP))
2843/* Nonzero for a type which is at file scope. */
2844#define TYPE_FILE_SCOPE_P(EXP) SCOPE_FILE_SCOPE_P (TYPE_CONTEXT (EXP))
b212f378 2845
5ded8c6f 2846/* Nonzero for a decl that is decorated using attribute used.
b636e057 2847 This indicates to compiler tools that this decl needs to be preserved. */
5ded8c6f 2848#define DECL_PRESERVE_P(DECL) \
2849 DECL_COMMON_CHECK (DECL)->decl_common.preserve_flag
7bd4091f 2850
8ea8de24 2851/* For function local variables of COMPLEX and VECTOR types,
2852 indicates that the variable is not aliased, and that all
2853 modifications to the variable have been adjusted so that
2854 they are killing assignments. Thus the variable may now
2855 be treated as a GIMPLE register, and use real instead of
2856 virtual ops in SSA form. */
2857#define DECL_GIMPLE_REG_P(DECL) \
5ded8c6f 2858 DECL_COMMON_CHECK (DECL)->decl_common.gimple_reg_flag
8f80e66d 2859
fb1e4f4a 2860struct GTY(()) tree_decl_common {
5ded8c6f 2861 struct tree_decl_minimal common;
2862 tree size;
1b53eb20 2863
5ded8c6f 2864 ENUM_BITFIELD(machine_mode) mode : 8;
2a6f0f81 2865
5ded8c6f 2866 unsigned nonlocal_flag : 1;
2867 unsigned virtual_flag : 1;
2868 unsigned ignored_flag : 1;
2869 unsigned abstract_flag : 1;
2870 unsigned artificial_flag : 1;
5ded8c6f 2871 unsigned preserve_flag: 1;
2872 unsigned debug_expr_is_from : 1;
2873
2874 unsigned lang_flag_0 : 1;
2875 unsigned lang_flag_1 : 1;
2876 unsigned lang_flag_2 : 1;
2877 unsigned lang_flag_3 : 1;
2878 unsigned lang_flag_4 : 1;
2879 unsigned lang_flag_5 : 1;
2880 unsigned lang_flag_6 : 1;
2881 unsigned lang_flag_7 : 1;
17814aca 2882 unsigned lang_flag_8 : 1;
7bd4091f 2883
5ded8c6f 2884 /* In LABEL_DECL, this is DECL_ERROR_ISSUED.
2885 In VAR_DECL and PARM_DECL, this is DECL_REGISTER. */
2886 unsigned decl_flag_0 : 1;
5ded8c6f 2887 /* In FIELD_DECL, this is DECL_BIT_FIELD
7bd4091f 2888 In VAR_DECL and FUNCTION_DECL, this is DECL_EXTERNAL.
33a0b99d 2889 In TYPE_DECL, this is TYPE_DECL_SUPPRESS_DEBUG. */
2890 unsigned decl_flag_1 : 1;
5ded8c6f 2891 /* In FIELD_DECL, this is DECL_NONADDRESSABLE_P
4d5b4e6a 2892 In VAR_DECL, PARM_DECL and RESULT_DECL, this is
2893 DECL_HAS_VALUE_EXPR_P. */
33a0b99d 2894 unsigned decl_flag_2 : 1;
7bd4091f 2895 /* Logically, these two would go in a theoretical base shared by var and
604eef2c 2896 parm decl. */
5ded8c6f 2897 unsigned gimple_reg_flag : 1;
7ac958de 2898 /* In VAR_DECL, PARM_DECL and RESULT_DECL, this is DECL_BY_REFERENCE. */
2899 unsigned decl_by_reference_flag : 1;
8bb76364 2900 /* In VAR_DECL, PARM_DECL and RESULT_DECL, this is DECL_RESTRICTED_P. */
2901 unsigned decl_restricted_flag : 1;
17814aca 2902
abc6c64f 2903 /* In VAR_DECL and PARM_DECL set when the decl has been used except for
2904 being set. */
2905 unsigned decl_read_flag : 1;
2906
c7c68014 2907 /* In VAR_DECL or RESULT_DECL set when significant code movement precludes
2908 attempting to share the stack slot with some other variable. */
2909 unsigned decl_nonshareable_flag : 1;
7bd4091f 2910
097b5c8b 2911 /* DECL_OFFSET_ALIGN, used only for FIELD_DECLs. */
2912 unsigned int off_align : 8;
5ded8c6f 2913
313b1a2e 2914 /* 24-bits unused. */
2915
2916 /* DECL_ALIGN. It should have the same size as TYPE_ALIGN. */
2917 unsigned int align;
2918
a44dc115 2919 /* UID for points-to sets, stable over copying from inlining. */
2920 unsigned int pt_uid;
2921
5ded8c6f 2922 tree size_unit;
2923 tree initial;
2924 tree attributes;
2925 tree abstract_origin;
7bd4091f 2926
5ded8c6f 2927 /* Points to a structure whose details depend on the language in use. */
2928 struct lang_decl *lang_specific;
2929};
1431bff6 2930
75fa4f82 2931extern tree decl_value_expr_lookup (tree);
2932extern void decl_value_expr_insert (tree, tree);
2933
afcf285e 2934/* In a VAR_DECL or PARM_DECL, the location at which the value may be found,
2935 if transformations have made this more complicated than evaluating the
2936 decl itself. This should only be used for debugging; once this field has
2937 been set, the decl itself may not legitimately appear in the function. */
75fa4f82 2938#define DECL_HAS_VALUE_EXPR_P(NODE) \
4d5b4e6a 2939 (TREE_CHECK3 (NODE, VAR_DECL, PARM_DECL, RESULT_DECL) \
2940 ->decl_common.decl_flag_2)
afcf285e 2941#define DECL_VALUE_EXPR(NODE) \
7bd4091f 2942 (decl_value_expr_lookup (DECL_WRTL_CHECK (NODE)))
eb65426a 2943#define SET_DECL_VALUE_EXPR(NODE, VAL) \
5ded8c6f 2944 (decl_value_expr_insert (DECL_WRTL_CHECK (NODE), VAL))
afcf285e 2945
5ded8c6f 2946/* Holds the RTL expression for the value of a variable or function.
2947 This value can be evaluated lazily for functions, variables with
2948 static storage duration, and labels. */
2949#define DECL_RTL(NODE) \
2950 (DECL_WRTL_CHECK (NODE)->decl_with_rtl.rtl \
2951 ? (NODE)->decl_with_rtl.rtl \
2952 : (make_decl_rtl (NODE), (NODE)->decl_with_rtl.rtl))
7259f3f8 2953
5ded8c6f 2954/* Set the DECL_RTL for NODE to RTL. */
2955#define SET_DECL_RTL(NODE, RTL) set_decl_rtl (NODE, RTL)
26d1c5ff 2956
5ded8c6f 2957/* Returns nonzero if NODE is a tree node that can contain RTL. */
2958#define HAS_RTL_P(NODE) (CODE_CONTAINS_STRUCT (TREE_CODE (NODE), TS_DECL_WRTL))
2959
2960/* Returns nonzero if the DECL_RTL for NODE has already been set. */
eb65426a 2961#define DECL_RTL_SET_P(NODE) \
2962 (HAS_RTL_P (NODE) && DECL_WRTL_CHECK (NODE)->decl_with_rtl.rtl != NULL)
5ded8c6f 2963
2964/* Copy the RTL from NODE1 to NODE2. If the RTL was not set for
2965 NODE1, it will not be set for NODE2; this is a lazy copy. */
2966#define COPY_DECL_RTL(NODE1, NODE2) \
eb65426a 2967 (DECL_WRTL_CHECK (NODE2)->decl_with_rtl.rtl \
2968 = DECL_WRTL_CHECK (NODE1)->decl_with_rtl.rtl)
5ded8c6f 2969
2970/* The DECL_RTL for NODE, if it is set, or NULL, if it is not set. */
2971#define DECL_RTL_IF_SET(NODE) (DECL_RTL_SET_P (NODE) ? DECL_RTL (NODE) : NULL)
2972
72fdb379 2973#if (GCC_VERSION >= 2007)
2974#define DECL_RTL_KNOWN_SET(decl) __extension__ \
2975({ tree const __d = (decl); \
2976 gcc_checking_assert (DECL_RTL_SET_P (__d)); \
2977 /* Dereference it so the compiler knows it can't be NULL even \
2978 without assertion checking. */ \
2979 &*DECL_RTL_IF_SET (__d); })
2980#else
2981#define DECL_RTL_KNOWN_SET(decl) (&*DECL_RTL_IF_SET (decl))
2982#endif
2983
5ded8c6f 2984/* In VAR_DECL and PARM_DECL nodes, nonzero means declared `register'. */
2985#define DECL_REGISTER(NODE) (DECL_WRTL_CHECK (NODE)->decl_common.decl_flag_0)
2986
fb1e4f4a 2987struct GTY(()) tree_decl_with_rtl {
5ded8c6f 2988 struct tree_decl_common common;
2989 rtx rtl;
2990};
2991
2992/* In a FIELD_DECL, this is the field position, counting in bytes, of the
9f35f9b2 2993 DECL_OFFSET_ALIGN-bit-sized word containing the bit closest to the beginning
2994 of the structure. */
5ded8c6f 2995#define DECL_FIELD_OFFSET(NODE) (FIELD_DECL_CHECK (NODE)->field_decl.offset)
2996
2997/* In a FIELD_DECL, this is the offset, in bits, of the first bit of the
9f35f9b2 2998 field from DECL_FIELD_OFFSET. This field may be nonzero even for fields
2999 that are not bit fields (since DECL_OFFSET_ALIGN may be larger than the
3000 natural alignment of the field's type). */
eb65426a 3001#define DECL_FIELD_BIT_OFFSET(NODE) \
3002 (FIELD_DECL_CHECK (NODE)->field_decl.bit_offset)
5ded8c6f 3003
3004/* In a FIELD_DECL, this indicates whether the field was a bit-field and
3005 if so, the type that was originally specified for it.
3006 TREE_TYPE may have been modified (in finish_struct). */
eb65426a 3007#define DECL_BIT_FIELD_TYPE(NODE) \
3008 (FIELD_DECL_CHECK (NODE)->field_decl.bit_field_type)
5ded8c6f 3009
8d8a34f9 3010/* In a FIELD_DECL of a RECORD_TYPE, this is a pointer to the storage
3011 representative FIELD_DECL. */
3012#define DECL_BIT_FIELD_REPRESENTATIVE(NODE) \
3013 (FIELD_DECL_CHECK (NODE)->field_decl.qualifier)
3014
5ded8c6f 3015/* For a FIELD_DECL in a QUAL_UNION_TYPE, records the expression, which
3016 if nonzero, indicates that the field occupies the type. */
3017#define DECL_QUALIFIER(NODE) (FIELD_DECL_CHECK (NODE)->field_decl.qualifier)
3018
3019/* For FIELD_DECLs, off_align holds the number of low-order bits of
3020 DECL_FIELD_OFFSET which are known to be always zero.
3021 DECL_OFFSET_ALIGN thus returns the alignment that DECL_FIELD_OFFSET
3022 has. */
3023#define DECL_OFFSET_ALIGN(NODE) \
097b5c8b 3024 (((unsigned HOST_WIDE_INT)1) << FIELD_DECL_CHECK (NODE)->decl_common.off_align)
5ded8c6f 3025
3026/* Specify that DECL_ALIGN(NODE) is a multiple of X. */
3027#define SET_DECL_OFFSET_ALIGN(NODE, X) \
7e8d812e 3028 (FIELD_DECL_CHECK (NODE)->decl_common.off_align = ffs_hwi (X) - 1)
5ded8c6f 3029
3030/* For FIELD_DECLS, DECL_FCONTEXT is the *first* baseclass in
3031 which this FIELD_DECL is defined. This information is needed when
3032 writing debugging information about vfield and vbase decls for C++. */
3033#define DECL_FCONTEXT(NODE) (FIELD_DECL_CHECK (NODE)->field_decl.fcontext)
3034
3035/* In a FIELD_DECL, indicates this field should be bit-packed. */
1646aa85 3036#define DECL_PACKED(NODE) (FIELD_DECL_CHECK (NODE)->base.packed_flag)
26dfc457 3037
d72a838e 3038/* Nonzero in a FIELD_DECL means it is a bit field, and must be accessed
3039 specially. */
33a0b99d 3040#define DECL_BIT_FIELD(NODE) (FIELD_DECL_CHECK (NODE)->decl_common.decl_flag_1)
56ba46a4 3041
5ded8c6f 3042/* Used in a FIELD_DECL to indicate that we cannot form the address of
c67bf066 3043 this component. This makes it possible for Type-Based Alias Analysis
3044 to disambiguate accesses to this field with indirect accesses using
3045 the field's type:
3046
3047 struct S { int i; } s;
3048 int *p;
3049
3050 If the flag is set on 'i', TBAA computes that s.i and *p never conflict.
3051
3052 From the implementation's viewpoint, the alias set of the type of the
3053 field 'i' (int) will not be recorded as a subset of that of the type of
3054 's' (struct S) in record_component_aliases. The counterpart is that
3055 accesses to s.i must not be given the alias set of the type of 'i'
3056 (int) but instead directly that of the type of 's' (struct S). */
5ded8c6f 3057#define DECL_NONADDRESSABLE_P(NODE) \
33a0b99d 3058 (FIELD_DECL_CHECK (NODE)->decl_common.decl_flag_2)
8305149e 3059
fb1e4f4a 3060struct GTY(()) tree_field_decl {
5ded8c6f 3061 struct tree_decl_common common;
3062
7bd4091f 3063 tree offset;
3064 tree bit_field_type;
5ded8c6f 3065 tree qualifier;
3066 tree bit_offset;
3067 tree fcontext;
5ded8c6f 3068};
d72a838e 3069
5ded8c6f 3070/* A numeric unique identifier for a LABEL_DECL. The UID allocation is
3071 dense, unique within any one function, and may be used to index arrays.
3072 If the value is -1, then no UID has been assigned. */
3073#define LABEL_DECL_UID(NODE) \
313b1a2e 3074 (LABEL_DECL_CHECK (NODE)->label_decl.label_decl_uid)
56ba46a4 3075
e38def9c 3076/* In a LABEL_DECL, the EH region number for which the label is the
3077 post_landing_pad. */
3078#define EH_LANDING_PAD_NR(NODE) \
3079 (LABEL_DECL_CHECK (NODE)->label_decl.eh_landing_pad_nr)
3080
5ded8c6f 3081/* In LABEL_DECL nodes, nonzero means that an error message about
3082 jumping into such a binding contour has been printed for this label. */
313b1a2e 3083#define DECL_ERROR_ISSUED(NODE) \
3084 (LABEL_DECL_CHECK (NODE)->decl_common.decl_flag_0)
00dd2e9e 3085
fb1e4f4a 3086struct GTY(()) tree_label_decl {
5ded8c6f 3087 struct tree_decl_with_rtl common;
313b1a2e 3088 int label_decl_uid;
e38def9c 3089 int eh_landing_pad_nr;
5ded8c6f 3090};
3091
8cee8dc0 3092struct var_ann_d;
fb1e4f4a 3093struct GTY(()) tree_result_decl {
5ded8c6f 3094 struct tree_decl_with_rtl common;
8cee8dc0 3095 struct var_ann_d *ann;
5ded8c6f 3096};
3097
fb1e4f4a 3098struct GTY(()) tree_const_decl {
544d4f58 3099 struct tree_decl_common common;
5ded8c6f 3100};
3101
3102/* For a PARM_DECL, records the data type used to pass the argument,
3103 which may be different from the type seen in the program. */
3104#define DECL_ARG_TYPE(NODE) (PARM_DECL_CHECK (NODE)->decl_common.initial)
3105
3106/* For PARM_DECL, holds an RTL for the stack slot or register
3107 where the data was actually passed. */
eb65426a 3108#define DECL_INCOMING_RTL(NODE) \
3109 (PARM_DECL_CHECK (NODE)->parm_decl.incoming_rtl)
2682e5d6 3110
fb1e4f4a 3111struct GTY(()) tree_parm_decl {
5ded8c6f 3112 struct tree_decl_with_rtl common;
7bd4091f 3113 rtx incoming_rtl;
8cee8dc0 3114 struct var_ann_d *ann;
5ded8c6f 3115};
02e7a332 3116
aa5ec236 3117
5ded8c6f 3118/* Nonzero for a given ..._DECL node means that no warnings should be
3119 generated just because this node is unused. */
3120#define DECL_IN_SYSTEM_HEADER(NODE) \
bdbc474b 3121 (in_system_header_at (DECL_SOURCE_LOCATION (NODE)))
5ded8c6f 3122
eb65426a 3123/* Used to indicate that the linkage status of this DECL is not yet known,
3124 so it should not be output now. */
3125#define DECL_DEFER_OUTPUT(NODE) \
3126 (DECL_WITH_VIS_CHECK (NODE)->decl_with_vis.defer_output)
3127
3128/* In a VAR_DECL that's static,
3129 nonzero if the space is in the text section. */
3130#define DECL_IN_TEXT_SECTION(NODE) \
3131 (VAR_DECL_CHECK (NODE)->decl_with_vis.in_text_section)
3132
ecba073f 3133/* In a VAR_DECL that's static,
3134 nonzero if it belongs to the global constant pool. */
3135#define DECL_IN_CONSTANT_POOL(NODE) \
3136 (VAR_DECL_CHECK (NODE)->decl_with_vis.in_constant_pool)
3137
eb65426a 3138/* Nonzero for a given ..._DECL node means that this node should be
3139 put in .common, if possible. If a DECL_INITIAL is given, and it
3140 is not error_mark_node, then the decl cannot be put in .common. */
3141#define DECL_COMMON(NODE) \
3142 (DECL_WITH_VIS_CHECK (NODE)->decl_with_vis.common_flag)
3143
3144/* In a VAR_DECL, nonzero if the decl is a register variable with
3145 an explicit asm specification. */
3146#define DECL_HARD_REGISTER(NODE) \
3147 (VAR_DECL_CHECK (NODE)->decl_with_vis.hard_register)
3148
5ded8c6f 3149 /* Used to indicate that this DECL has weak linkage. */
3150#define DECL_WEAK(NODE) (DECL_WITH_VIS_CHECK (NODE)->decl_with_vis.weak_flag)
3151
6c1e551f 3152/* Used to indicate that the DECL is a dllimport. */
eb65426a 3153#define DECL_DLLIMPORT_P(NODE) \
3154 (DECL_WITH_VIS_CHECK (NODE)->decl_with_vis.dllimport_flag)
9a0ce7db 3155
d1d06be2 3156/* Used in a DECL to indicate that, even if it TREE_PUBLIC, it need
3157 not be put out unless it is needed in this translation unit.
3158 Entities like this are shared across translation units (like weak
3159 entities), but are guaranteed to be generated by any translation
3160 unit that needs them, and therefore need not be put out anywhere
3161 where they are not needed. DECL_COMDAT is just a hint to the
3162 back-end; it is up to front-ends which set this flag to ensure
3163 that there will never be any harm, other than bloat, in putting out
3164 something which is DECL_COMDAT. */
eb65426a 3165#define DECL_COMDAT(NODE) \
3166 (DECL_WITH_VIS_CHECK (NODE)->decl_with_vis.comdat_flag)
d1d06be2 3167
eb65426a 3168#define DECL_COMDAT_GROUP(NODE) \
3169 (DECL_WITH_VIS_CHECK (NODE)->decl_with_vis.comdat_group)
3170
3171/* Used in TREE_PUBLIC decls to indicate that copies of this DECL in
3172 multiple translation units should be merged. */
3173#define DECL_ONE_ONLY(NODE) (DECL_COMDAT_GROUP (NODE) != NULL_TREE)
ecd88073 3174
5ded8c6f 3175/* The name of the object as the assembler will see it (but before any
3176 translations made by ASM_OUTPUT_LABELREF). Often this is the same
3177 as DECL_NAME. It is an IDENTIFIER_NODE. */
3178#define DECL_ASSEMBLER_NAME(NODE) decl_assembler_name (NODE)
abd28cef 3179
7bd4091f 3180/* Return true if NODE is a NODE that can contain a DECL_ASSEMBLER_NAME.
5ded8c6f 3181 This is true of all DECL nodes except FIELD_DECL. */
3182#define HAS_DECL_ASSEMBLER_NAME_P(NODE) \
3183 (CODE_CONTAINS_STRUCT (TREE_CODE (NODE), TS_DECL_WITH_VIS))
8f8ac140 3184
5ded8c6f 3185/* Returns nonzero if the DECL_ASSEMBLER_NAME for NODE has been set. If zero,
3186 the NODE might still have a DECL_ASSEMBLER_NAME -- it just hasn't been set
3187 yet. */
3188#define DECL_ASSEMBLER_NAME_SET_P(NODE) \
eb65426a 3189 (HAS_DECL_ASSEMBLER_NAME_P (NODE) \
3190 && DECL_WITH_VIS_CHECK (NODE)->decl_with_vis.assembler_name != NULL_TREE)
d72a838e 3191
5ded8c6f 3192/* Set the DECL_ASSEMBLER_NAME for NODE to NAME. */
3193#define SET_DECL_ASSEMBLER_NAME(NODE, NAME) \
3194 (DECL_WITH_VIS_CHECK (NODE)->decl_with_vis.assembler_name = (NAME))
c6f5e832 3195
5ded8c6f 3196/* Copy the DECL_ASSEMBLER_NAME from DECL1 to DECL2. Note that if DECL1's
3197 DECL_ASSEMBLER_NAME has not yet been set, using this macro will not cause
3198 the DECL_ASSEMBLER_NAME of either DECL to be set. In other words, the
3199 semantics of using this macro, are different than saying:
851dfbff 3200
5ded8c6f 3201 SET_DECL_ASSEMBLER_NAME(DECL2, DECL_ASSEMBLER_NAME (DECL1))
a5b1863e 3202
5ded8c6f 3203 which will try to set the DECL_ASSEMBLER_NAME for DECL1. */
4ee9c684 3204
5ded8c6f 3205#define COPY_DECL_ASSEMBLER_NAME(DECL1, DECL2) \
3206 (DECL_ASSEMBLER_NAME_SET_P (DECL1) \
3207 ? (void) SET_DECL_ASSEMBLER_NAME (DECL2, \
3208 DECL_ASSEMBLER_NAME (DECL1)) \
3209 : (void) 0)
4ee9c684 3210
5ded8c6f 3211/* Records the section name in a section attribute. Used to pass
3212 the name from decl_attributes to make_function_rtl and make_decl_rtl. */
eb65426a 3213#define DECL_SECTION_NAME(NODE) \
3214 (DECL_WITH_VIS_CHECK (NODE)->decl_with_vis.section_name)
3215
3216/* Nonzero in a decl means that the gimplifier has seen (or placed)
3217 this variable in a BIND_EXPR. */
3218#define DECL_SEEN_IN_BIND_EXPR_P(NODE) \
3219 (DECL_WITH_VIS_CHECK (NODE)->decl_with_vis.seen_in_bind_expr)
a5b1863e 3220
5ded8c6f 3221/* Value of the decls's visibility attribute */
eb65426a 3222#define DECL_VISIBILITY(NODE) \
3223 (DECL_WITH_VIS_CHECK (NODE)->decl_with_vis.visibility)
5ded8c6f 3224
3225/* Nonzero means that the decl had its visibility specified rather than
3226 being inferred. */
eb65426a 3227#define DECL_VISIBILITY_SPECIFIED(NODE) \
3228 (DECL_WITH_VIS_CHECK (NODE)->decl_with_vis.visibility_specified)
5ded8c6f 3229
eb65426a 3230/* In a VAR_DECL, the model to use if the data should be allocated from
3231 thread-local storage. */
3232#define DECL_TLS_MODEL(NODE) (VAR_DECL_CHECK (NODE)->decl_with_vis.tls_model)
3233
3234/* In a VAR_DECL, nonzero if the data should be allocated from
3235 thread-local storage. */
3236#define DECL_THREAD_LOCAL_P(NODE) \
3237 (VAR_DECL_CHECK (NODE)->decl_with_vis.tls_model >= TLS_MODEL_REAL)
3238
3239/* In a non-local VAR_DECL with static storage duration, true if the
3240 variable has an initialization priority. If false, the variable
3241 will be initialized at the DEFAULT_INIT_PRIORITY. */
3242#define DECL_HAS_INIT_PRIORITY_P(NODE) \
3243 (VAR_DECL_CHECK (NODE)->decl_with_vis.init_priority_p)
5ded8c6f 3244
3b73548b 3245/* Specify whether the section name was set by user or by
3246 compiler via -ffunction-sections. */
3247#define DECL_HAS_IMPLICIT_SECTION_NAME_P(NODE) \
3248 (DECL_WITH_VIS_CHECK (NODE)->decl_with_vis.implicit_section_name_p)
3249
fb1e4f4a 3250struct GTY(()) tree_decl_with_vis {
5ded8c6f 3251 struct tree_decl_with_rtl common;
3252 tree assembler_name;
3253 tree section_name;
ecd88073 3254 tree comdat_group;
7bd4091f 3255
5ded8c6f 3256 /* Belong to VAR_DECL exclusively. */
8115f0af 3257 unsigned defer_output : 1;
3258 unsigned hard_register : 1;
3259 unsigned thread_local : 1;
3260 unsigned common_flag : 1;
5ded8c6f 3261 unsigned in_text_section : 1;
ecba073f 3262 unsigned in_constant_pool : 1;
7bd4091f 3263 unsigned dllimport_flag : 1;
5ded8c6f 3264 /* Don't belong to VAR_DECL exclusively. */
8115f0af 3265 unsigned weak_flag : 1;
3266
5ded8c6f 3267 unsigned seen_in_bind_expr : 1;
3268 unsigned comdat_flag : 1;
3269 ENUM_BITFIELD(symbol_visibility) visibility : 2;
3270 unsigned visibility_specified : 1;
5ded8c6f 3271 /* Belongs to VAR_DECL exclusively. */
3272 ENUM_BITFIELD(tls_model) tls_model : 3;
8115f0af 3273
3274 /* Belong to FUNCTION_DECL exclusively. */
3275 unsigned init_priority_p : 1;
ecba073f 3276 /* Used by C++ only. Might become a generic decl flag. */
3277 unsigned shadowed_for_var_p : 1;
3b73548b 3278 /* When SECTION_NAME is implied by -ffunsection-section. */
3279 unsigned implicit_section_name_p : 1;
3280 /* 13 unused bits. */
5ded8c6f 3281};
3282
5ded8c6f 3283extern tree decl_debug_expr_lookup (tree);
3284extern void decl_debug_expr_insert (tree, tree);
3285/* For VAR_DECL, this is set to either an expression that it was split
3286 from (if DECL_DEBUG_EXPR_IS_FROM is true), otherwise a tree_list of
3287 subexpressions that it was split into. */
3288#define DECL_DEBUG_EXPR(NODE) \
3289 (decl_debug_expr_lookup (VAR_DECL_CHECK (NODE)))
3290
3291#define SET_DECL_DEBUG_EXPR(NODE, VAL) \
3292 (decl_debug_expr_insert (VAR_DECL_CHECK (NODE), VAL))
3293
f0b5f617 3294/* An initialization priority. */
9af7fd5b 3295typedef unsigned short priority_type;
5ded8c6f 3296
9af7fd5b 3297extern priority_type decl_init_priority_lookup (tree);
3298extern priority_type decl_fini_priority_lookup (tree);
3299extern void decl_init_priority_insert (tree, priority_type);
3300extern void decl_fini_priority_insert (tree, priority_type);
5ded8c6f 3301
2c56f72e 3302/* For a VAR_DECL or FUNCTION_DECL the initialization priority of
48e1416a 3303 NODE. */
5ded8c6f 3304#define DECL_INIT_PRIORITY(NODE) \
9af7fd5b 3305 (decl_init_priority_lookup (NODE))
3306/* Set the initialization priority for NODE to VAL. */
5ded8c6f 3307#define SET_DECL_INIT_PRIORITY(NODE, VAL) \
9af7fd5b 3308 (decl_init_priority_insert (NODE, VAL))
3309
2c56f72e 3310/* For a FUNCTION_DECL the finalization priority of NODE. */
9af7fd5b 3311#define DECL_FINI_PRIORITY(NODE) \
3312 (decl_fini_priority_lookup (NODE))
3313/* Set the finalization priority for NODE to VAL. */
3314#define SET_DECL_FINI_PRIORITY(NODE, VAL) \
3315 (decl_fini_priority_insert (NODE, VAL))
3316
3317/* The initialization priority for entities for which no explicit
3318 initialization priority has been specified. */
3319#define DEFAULT_INIT_PRIORITY 65535
3320
3321/* The maximum allowed initialization priority. */
3322#define MAX_INIT_PRIORITY 65535
3323
3324/* The largest priority value reserved for use by system runtime
3325 libraries. */
3326#define MAX_RESERVED_INIT_PRIORITY 100
5ded8c6f 3327
5084b2e4 3328#define VAR_DECL_IS_VIRTUAL_OPERAND(NODE) \
3329 (VAR_DECL_CHECK (NODE)->base.saturating_flag)
3330
8cee8dc0 3331#define DECL_VAR_ANN_PTR(NODE) \
3332 (TREE_CODE (NODE) == VAR_DECL ? &(NODE)->var_decl.ann \
3333 : TREE_CODE (NODE) == PARM_DECL ? &(NODE)->parm_decl.ann \
3334 : TREE_CODE (NODE) == RESULT_DECL ? &(NODE)->result_decl.ann \
3335 : NULL)
3336
fb1e4f4a 3337struct GTY(()) tree_var_decl {
5ded8c6f 3338 struct tree_decl_with_vis common;
8cee8dc0 3339 struct var_ann_d *ann;
5ded8c6f 3340};
3341
3342
3343/* This field is used to reference anything in decl.result and is meant only
3344 for use by the garbage collector. */
eb65426a 3345#define DECL_RESULT_FLD(NODE) \
3346 (DECL_NON_COMMON_CHECK (NODE)->decl_non_common.result)
5ded8c6f 3347
3348/* The DECL_VINDEX is used for FUNCTION_DECLS in two different ways.
3349 Before the struct containing the FUNCTION_DECL is laid out,
3350 DECL_VINDEX may point to a FUNCTION_DECL in a base class which
3351 is the FUNCTION_DECL which this FUNCTION_DECL will replace as a virtual
3352 function. When the class is laid out, this pointer is changed
3353 to an INTEGER_CST node which is suitable for use as an index
7bd4091f 3354 into the virtual function table.
5ded8c6f 3355 C++ also uses this field in namespaces, hence the DECL_NON_COMMON_CHECK. */
eb65426a 3356#define DECL_VINDEX(NODE) \
3357 (DECL_NON_COMMON_CHECK (NODE)->decl_non_common.vindex)
5ded8c6f 3358
fb1e4f4a 3359struct GTY(())
3360 tree_decl_non_common {
5ded8c6f 3361 struct tree_decl_with_vis common;
3362 /* C++ uses this in namespaces. */
3363 tree saved_tree;
3364 /* C++ uses this in templates. */
7bd4091f 3365 tree arguments;
5ded8c6f 3366 /* Almost all FE's use this. */
7bd4091f 3367 tree result;
9ccd0eb4 3368 /* C++ uses this in namespaces and function_decls. */
5ded8c6f 3369 tree vindex;
3370};
3371
3372/* In FUNCTION_DECL, holds the decl for the return value. */
3373#define DECL_RESULT(NODE) (FUNCTION_DECL_CHECK (NODE)->decl_non_common.result)
3374
3375/* In a FUNCTION_DECL, nonzero if the function cannot be inlined. */
eb65426a 3376#define DECL_UNINLINABLE(NODE) \
3377 (FUNCTION_DECL_CHECK (NODE)->function_decl.uninlinable)
5ded8c6f 3378
3379/* In a FUNCTION_DECL, the saved representation of the body of the
3380 entire function. */
eb65426a 3381#define DECL_SAVED_TREE(NODE) \
3382 (FUNCTION_DECL_CHECK (NODE)->decl_non_common.saved_tree)
5ded8c6f 3383
3384/* Nonzero in a FUNCTION_DECL means this function should be treated
3385 as if it were a malloc, meaning it returns a pointer that is
3386 not an alias. */
eb65426a 3387#define DECL_IS_MALLOC(NODE) \
3388 (FUNCTION_DECL_CHECK (NODE)->function_decl.malloc_flag)
5ded8c6f 3389
68d6de5b 3390/* Nonzero in a FUNCTION_DECL means this function should be treated as
3391 C++ operator new, meaning that it returns a pointer for which we
3392 should not use type based aliasing. */
3393#define DECL_IS_OPERATOR_NEW(NODE) \
3394 (FUNCTION_DECL_CHECK (NODE)->function_decl.operator_new_flag)
3395
5ded8c6f 3396/* Nonzero in a FUNCTION_DECL means this function may return more
3397 than once. */
3398#define DECL_IS_RETURNS_TWICE(NODE) \
3399 (FUNCTION_DECL_CHECK (NODE)->function_decl.returns_twice_flag)
3400
3401/* Nonzero in a FUNCTION_DECL means this function should be treated
3402 as "pure" function (like const function, but may read global memory). */
9c2a0c05 3403#define DECL_PURE_P(NODE) (FUNCTION_DECL_CHECK (NODE)->function_decl.pure_flag)
3404
3405/* Nonzero only if one of TREE_READONLY or DECL_PURE_P is nonzero AND
3406 the const or pure function may not terminate. When this is nonzero
3407 for a const or pure function, it can be dealt with by cse passes
3408 but cannot be removed by dce passes since you are not allowed to
3409 change an infinite looping program into one that terminates without
3410 error. */
3411#define DECL_LOOPING_CONST_OR_PURE_P(NODE) \
3412 (FUNCTION_DECL_CHECK (NODE)->function_decl.looping_const_or_pure_flag)
5ded8c6f 3413
3414/* Nonzero in a FUNCTION_DECL means this function should be treated
3415 as "novops" function (function that does not read global memory,
3416 but may have arbitrary side effects). */
eb65426a 3417#define DECL_IS_NOVOPS(NODE) \
3418 (FUNCTION_DECL_CHECK (NODE)->function_decl.novops_flag)
5ded8c6f 3419
3420/* Used in FUNCTION_DECLs to indicate that they should be run automatically
3421 at the beginning or end of execution. */
3422#define DECL_STATIC_CONSTRUCTOR(NODE) \
3423 (FUNCTION_DECL_CHECK (NODE)->function_decl.static_ctor_flag)
3424
3425#define DECL_STATIC_DESTRUCTOR(NODE) \
3426(FUNCTION_DECL_CHECK (NODE)->function_decl.static_dtor_flag)
3427
3428/* Used in FUNCTION_DECLs to indicate that function entry and exit should
3429 be instrumented with calls to support routines. */
3430#define DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT(NODE) \
3431 (FUNCTION_DECL_CHECK (NODE)->function_decl.no_instrument_function_entry_exit)
3432
3433/* Used in FUNCTION_DECLs to indicate that limit-stack-* should be
3434 disabled in this function. */
3435#define DECL_NO_LIMIT_STACK(NODE) \
3436 (FUNCTION_DECL_CHECK (NODE)->function_decl.no_limit_stack)
3437
3bb63aeb 3438/* In a FUNCTION_DECL indicates that a static chain is needed. */
3439#define DECL_STATIC_CHAIN(NODE) \
5ded8c6f 3440 (FUNCTION_DECL_CHECK (NODE)->function_decl.regdecl_flag)
3a2bf8d3 3441
e1232ce2 3442/* Nonzero for a decl that cgraph has decided should be inlined into
3443 at least one call site. It is not meaningful to look at this
3444 directly; always use cgraph_function_possibly_inlined_p. */
3445#define DECL_POSSIBLY_INLINED(DECL) \
5ded8c6f 3446 FUNCTION_DECL_CHECK (DECL)->function_decl.possibly_inlined
e1232ce2 3447
5ded8c6f 3448/* Nonzero in a FUNCTION_DECL means that this function was declared inline,
3449 such as via the `inline' keyword in C/C++. This flag controls the linkage
73b5e722 3450 semantics of 'inline' */
5ded8c6f 3451#define DECL_DECLARED_INLINE_P(NODE) \
3452 (FUNCTION_DECL_CHECK (NODE)->function_decl.declared_inline_flag)
d471893d 3453
73b5e722 3454/* Nonzero in a FUNCTION_DECL means this function should not get
3455 -Winline warnings. */
3456#define DECL_NO_INLINE_WARNING_P(NODE) \
3457 (FUNCTION_DECL_CHECK (NODE)->function_decl.no_inline_warning_flag)
3458
4c0315d0 3459/* Nonzero if a FUNCTION_CODE is a TM load/store. */
3460#define BUILTIN_TM_LOAD_STORE_P(FN) \
3461 ((FN) >= BUILT_IN_TM_STORE_1 && (FN) <= BUILT_IN_TM_LOAD_RFW_LDOUBLE)
3462
3463/* Nonzero if a FUNCTION_CODE is a TM load. */
3464#define BUILTIN_TM_LOAD_P(FN) \
3465 ((FN) >= BUILT_IN_TM_LOAD_1 && (FN) <= BUILT_IN_TM_LOAD_RFW_LDOUBLE)
3466
3467/* Nonzero if a FUNCTION_CODE is a TM store. */
3468#define BUILTIN_TM_STORE_P(FN) \
3469 ((FN) >= BUILT_IN_TM_STORE_1 && (FN) <= BUILT_IN_TM_STORE_WAW_LDOUBLE)
3470
3471#define CASE_BUILT_IN_TM_LOAD(FN) \
3472 case BUILT_IN_TM_LOAD_##FN: \
3473 case BUILT_IN_TM_LOAD_RAR_##FN: \
3474 case BUILT_IN_TM_LOAD_RAW_##FN: \
3475 case BUILT_IN_TM_LOAD_RFW_##FN
3476
3477#define CASE_BUILT_IN_TM_STORE(FN) \
3478 case BUILT_IN_TM_STORE_##FN: \
3479 case BUILT_IN_TM_STORE_WAR_##FN: \
3480 case BUILT_IN_TM_STORE_WAW_##FN
3481
ebb7d626 3482/* Nonzero in a FUNCTION_DECL that should be always inlined by the inliner
3483 disregarding size and cost heuristics. This is equivalent to using
3484 the always_inline attribute without the required diagnostics if the
3485 function cannot be inlined. */
3486#define DECL_DISREGARD_INLINE_LIMITS(NODE) \
3487 (FUNCTION_DECL_CHECK (NODE)->function_decl.disregard_inline_limits)
3488
841424cc 3489extern VEC(tree, gc) **decl_debug_args_lookup (tree);
3490extern VEC(tree, gc) **decl_debug_args_insert (tree);
3491
3492/* Nonzero if a FUNCTION_DECL has DEBUG arguments attached to it. */
3493#define DECL_HAS_DEBUG_ARGS_P(NODE) \
3494 (FUNCTION_DECL_CHECK (NODE)->function_decl.has_debug_args_flag)
3495
5ded8c6f 3496/* For FUNCTION_DECL, this holds a pointer to a structure ("struct function")
3497 that describes the status of this function. */
eb65426a 3498#define DECL_STRUCT_FUNCTION(NODE) \
3499 (FUNCTION_DECL_CHECK (NODE)->function_decl.f)
50c96bdc 3500
5ded8c6f 3501/* In a FUNCTION_DECL, nonzero means a built in function. */
3502#define DECL_BUILT_IN(NODE) (DECL_BUILT_IN_CLASS (NODE) != NOT_BUILT_IN)
9c40570a 3503
5ded8c6f 3504/* For a builtin function, identify which part of the compiler defined it. */
3505#define DECL_BUILT_IN_CLASS(NODE) \
3506 (FUNCTION_DECL_CHECK (NODE)->function_decl.built_in_class)
1b53eb20 3507
5ded8c6f 3508/* In FUNCTION_DECL, a chain of ..._DECL nodes.
3509 VAR_DECL and PARM_DECL reserve the arguments slot for language-specific
3510 uses. */
eb65426a 3511#define DECL_ARGUMENTS(NODE) \
3512 (FUNCTION_DECL_CHECK (NODE)->decl_non_common.arguments)
3513#define DECL_ARGUMENT_FLD(NODE) \
3514 (DECL_NON_COMMON_CHECK (NODE)->decl_non_common.arguments)
d72a838e 3515
46f8e3b0 3516/* In FUNCTION_DECL, the function specific target options to use when compiling
3517 this function. */
3518#define DECL_FUNCTION_SPECIFIC_TARGET(NODE) \
3519 (FUNCTION_DECL_CHECK (NODE)->function_decl.function_specific_target)
3520
3521/* In FUNCTION_DECL, the function specific optimization options to use when
3522 compiling this function. */
3523#define DECL_FUNCTION_SPECIFIC_OPTIMIZATION(NODE) \
3524 (FUNCTION_DECL_CHECK (NODE)->function_decl.function_specific_optimization)
3525
5ded8c6f 3526/* FUNCTION_DECL inherits from DECL_NON_COMMON because of the use of the
3527 arguments/result/saved_tree fields by front ends. It was either inherit
3528 FUNCTION_DECL from non_common, or inherit non_common from FUNCTION_DECL,
3529 which seemed a bit strange. */
d72a838e 3530
fb1e4f4a 3531struct GTY(()) tree_function_decl {
5ded8c6f 3532 struct tree_decl_non_common common;
7bd4091f 3533
ebb7d626 3534 struct function *f;
3535
58d82cd0 3536 /* The personality function. Used for stack unwinding. */
3537 tree personality;
3538
46f8e3b0 3539 /* Function specific options that are used by this function. */
3540 tree function_specific_target; /* target options */
3541 tree function_specific_optimization; /* optimization options */
3542
097b5c8b 3543 /* In a FUNCTION_DECL for which DECL_BUILT_IN holds, this is
ebb7d626 3544 DECL_FUNCTION_CODE. Otherwise unused.
3545 ??? The bitfield needs to be able to hold all target function
3546 codes as well. */
8f81a001 3547 ENUM_BITFIELD(built_in_function) function_code : 11;
ebb7d626 3548 ENUM_BITFIELD(built_in_class) built_in_class : 2;
097b5c8b 3549
aa5ec236 3550 unsigned static_ctor_flag : 1;
3551 unsigned static_dtor_flag : 1;
5ded8c6f 3552 unsigned uninlinable : 1;
ebb7d626 3553
8f81a001 3554 unsigned possibly_inlined : 1;
5ded8c6f 3555 unsigned novops_flag : 1;
3556 unsigned returns_twice_flag : 1;
ab7943b9 3557 unsigned malloc_flag : 1;
68d6de5b 3558 unsigned operator_new_flag : 1;
746149b7 3559 unsigned declared_inline_flag : 1;
5ded8c6f 3560 unsigned regdecl_flag : 1;
73b5e722 3561 unsigned no_inline_warning_flag : 1;
841424cc 3562
8f81a001 3563 unsigned no_instrument_function_entry_exit : 1;
5ded8c6f 3564 unsigned no_limit_stack : 1;
ebb7d626 3565 unsigned disregard_inline_limits : 1;
9c2a0c05 3566 unsigned pure_flag : 1;
3567 unsigned looping_const_or_pure_flag : 1;
841424cc 3568 unsigned has_debug_args_flag : 1;
4c0315d0 3569 unsigned tm_clone_flag : 1;
9c2a0c05 3570
4c0315d0 3571 /* 1 bit left */
5ded8c6f 3572};
d72a838e 3573
23bdc9ca 3574/* The source language of the translation-unit. */
3575#define TRANSLATION_UNIT_LANGUAGE(NODE) \
3576 (TRANSLATION_UNIT_DECL_CHECK (NODE)->translation_unit_decl.language)
3577
3578/* TRANSLATION_UNIT_DECL inherits from DECL_MINIMAL. */
3579
3580struct GTY(()) tree_translation_unit_decl {
3581 struct tree_decl_common common;
3582 /* Source language of this translation unit. Used for DWARF output. */
3583 const char * GTY((skip(""))) language;
3584 /* TODO: Non-optimization used to build this translation unit. */
3585 /* TODO: Root of a partial DWARF tree for global types and decls. */
3586};
3587
3588/* A vector of all translation-units. */
3589extern GTY (()) VEC(tree,gc) *all_translation_units;
3590
5ded8c6f 3591/* For a TYPE_DECL, holds the "original" type. (TREE_TYPE has the copy.) */
eb65426a 3592#define DECL_ORIGINAL_TYPE(NODE) \
3593 (TYPE_DECL_CHECK (NODE)->decl_non_common.result)
1b53eb20 3594
5ded8c6f 3595/* In a TYPE_DECL nonzero means the detail info about this type is not dumped
3596 into stabs. Instead it will generate cross reference ('x') of names.
3597 This uses the same flag as DECL_EXTERNAL. */
3598#define TYPE_DECL_SUPPRESS_DEBUG(NODE) \
33a0b99d 3599 (TYPE_DECL_CHECK (NODE)->decl_common.decl_flag_1)
4ee9c684 3600
5d8a39b7 3601/* Getter of the imported declaration associated to the
3602 IMPORTED_DECL node. */
3603#define IMPORTED_DECL_ASSOCIATED_DECL(NODE) \
3604(DECL_INITIAL (IMPORTED_DECL_CHECK (NODE)))
3605
fb1e4f4a 3606struct GTY(()) tree_type_decl {
5ded8c6f 3607 struct tree_decl_non_common common;
9a7aa5df 3608
d72a838e 3609};
4ee9c684 3610\f
3611/* A STATEMENT_LIST chains statements together in GENERIC and GIMPLE.
3612 To reduce overhead, the nodes containing the statements are not trees.
3613 This avoids the overhead of tree_common on all linked list elements.
3614
3615 Use the interface in tree-iterator.h to access this node. */
3616
3617#define STATEMENT_LIST_HEAD(NODE) \
3618 (STATEMENT_LIST_CHECK (NODE)->stmt_list.head)
3619#define STATEMENT_LIST_TAIL(NODE) \
3620 (STATEMENT_LIST_CHECK (NODE)->stmt_list.tail)
3621
fb1e4f4a 3622struct GTY ((chain_next ("%h.next"), chain_prev ("%h.prev"))) tree_statement_list_node
3623 {
4ee9c684 3624 struct tree_statement_list_node *prev;
3625 struct tree_statement_list_node *next;
3626 tree stmt;
3627};
3628
fb1e4f4a 3629struct GTY(()) tree_statement_list
3630 {
cacfdc02 3631 struct tree_typed typed;
4ee9c684 3632 struct tree_statement_list_node *head;
3633 struct tree_statement_list_node *tail;
3634};
6354ec2d 3635
46f8e3b0 3636
3637/* Optimization options used by a function. */
3638
fb1e4f4a 3639struct GTY(()) tree_optimization_option {
46f8e3b0 3640 struct tree_common common;
3641
3642 /* The optimization options used by the user. */
3643 struct cl_optimization opts;
3644};
3645
3646#define TREE_OPTIMIZATION(NODE) \
3647 (&OPTIMIZATION_NODE_CHECK (NODE)->optimization.opts)
3648
3649/* Return a tree node that encapsulates the current optimization options. */
3650extern tree build_optimization_node (void);
3651
3652/* Target options used by a function. */
3653
fb1e4f4a 3654struct GTY(()) tree_target_option {
46f8e3b0 3655 struct tree_common common;
3656
3657 /* The optimization options used by the user. */
3658 struct cl_target_option opts;
3659};
3660
3661#define TREE_TARGET_OPTION(NODE) \
3662 (&TARGET_OPTION_NODE_CHECK (NODE)->target_option.opts)
3663
3664/* Return a tree node that encapsulates the current target options. */
3665extern tree build_target_option_node (void);
3666
d72a838e 3667\f
3668/* Define the overall contents of a tree node.
3669 It may be any of the structures declared above
3670 for various types of node. */
3671
fb1e4f4a 3672union GTY ((ptr_alias (union lang_tree_node),
ba72912a 3673 desc ("tree_node_structure (&%h)"), variable_size)) tree_node {
35cc02b5 3674 struct tree_base GTY ((tag ("TS_BASE"))) base;
1646aa85 3675 struct tree_typed GTY ((tag ("TS_TYPED"))) typed;
1f3233d1 3676 struct tree_common GTY ((tag ("TS_COMMON"))) common;
3677 struct tree_int_cst GTY ((tag ("TS_INT_CST"))) int_cst;
3678 struct tree_real_cst GTY ((tag ("TS_REAL_CST"))) real_cst;
06f0b99c 3679 struct tree_fixed_cst GTY ((tag ("TS_FIXED_CST"))) fixed_cst;
1f3233d1 3680 struct tree_vector GTY ((tag ("TS_VECTOR"))) vector;
3681 struct tree_string GTY ((tag ("TS_STRING"))) string;
3682 struct tree_complex GTY ((tag ("TS_COMPLEX"))) complex;
3683 struct tree_identifier GTY ((tag ("TS_IDENTIFIER"))) identifier;
5ded8c6f 3684 struct tree_decl_minimal GTY((tag ("TS_DECL_MINIMAL"))) decl_minimal;
3685 struct tree_decl_common GTY ((tag ("TS_DECL_COMMON"))) decl_common;
3686 struct tree_decl_with_rtl GTY ((tag ("TS_DECL_WRTL"))) decl_with_rtl;
3687 struct tree_decl_non_common GTY ((tag ("TS_DECL_NON_COMMON"))) decl_non_common;
3688 struct tree_parm_decl GTY ((tag ("TS_PARM_DECL"))) parm_decl;
3689 struct tree_decl_with_vis GTY ((tag ("TS_DECL_WITH_VIS"))) decl_with_vis;
3690 struct tree_var_decl GTY ((tag ("TS_VAR_DECL"))) var_decl;
3691 struct tree_field_decl GTY ((tag ("TS_FIELD_DECL"))) field_decl;
3692 struct tree_label_decl GTY ((tag ("TS_LABEL_DECL"))) label_decl;
3693 struct tree_result_decl GTY ((tag ("TS_RESULT_DECL"))) result_decl;
3694 struct tree_const_decl GTY ((tag ("TS_CONST_DECL"))) const_decl;
3695 struct tree_type_decl GTY ((tag ("TS_TYPE_DECL"))) type_decl;
3696 struct tree_function_decl GTY ((tag ("TS_FUNCTION_DECL"))) function_decl;
23bdc9ca 3697 struct tree_translation_unit_decl GTY ((tag ("TS_TRANSLATION_UNIT_DECL")))
3698 translation_unit_decl;
8f2eb9e1 3699 struct tree_type_common GTY ((tag ("TS_TYPE_COMMON"))) type_common;
3700 struct tree_type_with_lang_specific GTY ((tag ("TS_TYPE_WITH_LANG_SPECIFIC")))
3701 type_with_lang_specific;
3702 struct tree_type_non_common GTY ((tag ("TS_TYPE_NON_COMMON")))
3703 type_non_common;
1f3233d1 3704 struct tree_list GTY ((tag ("TS_LIST"))) list;
3705 struct tree_vec GTY ((tag ("TS_VEC"))) vec;
3706 struct tree_exp GTY ((tag ("TS_EXP"))) exp;
4ee9c684 3707 struct tree_ssa_name GTY ((tag ("TS_SSA_NAME"))) ssa_name;
1f3233d1 3708 struct tree_block GTY ((tag ("TS_BLOCK"))) block;
3cb98335 3709 struct tree_binfo GTY ((tag ("TS_BINFO"))) binfo;
4ee9c684 3710 struct tree_statement_list GTY ((tag ("TS_STATEMENT_LIST"))) stmt_list;
c75b4594 3711 struct tree_constructor GTY ((tag ("TS_CONSTRUCTOR"))) constructor;
55d6e7cd 3712 struct tree_omp_clause GTY ((tag ("TS_OMP_CLAUSE"))) omp_clause;
46f8e3b0 3713 struct tree_optimization_option GTY ((tag ("TS_OPTIMIZATION"))) optimization;
3714 struct tree_target_option GTY ((tag ("TS_TARGET_OPTION"))) target_option;
4ee9c684 3715};
5059aa85 3716\f
775e7cc0 3717/* Standard named or nameless data types of the C compiler. */
3718
3719enum tree_index
3720{
3721 TI_ERROR_MARK,
3722 TI_INTQI_TYPE,
3723 TI_INTHI_TYPE,
3724 TI_INTSI_TYPE,
3725 TI_INTDI_TYPE,
3726 TI_INTTI_TYPE,
3727
3728 TI_UINTQI_TYPE,
3729 TI_UINTHI_TYPE,
3730 TI_UINTSI_TYPE,
3731 TI_UINTDI_TYPE,
3732 TI_UINTTI_TYPE,
6c34d0c2 3733
74bdbe96 3734 TI_UINT16_TYPE,
42791117 3735 TI_UINT32_TYPE,
3736 TI_UINT64_TYPE,
3737
775e7cc0 3738 TI_INTEGER_ZERO,
3739 TI_INTEGER_ONE,
2512209b 3740 TI_INTEGER_THREE,
c87787ad 3741 TI_INTEGER_MINUS_ONE,
775e7cc0 3742 TI_NULL_POINTER,
3743
3744 TI_SIZE_ZERO,
3745 TI_SIZE_ONE,
02e7a332 3746
3747 TI_BITSIZE_ZERO,
3748 TI_BITSIZE_ONE,
3749 TI_BITSIZE_UNIT,
3750
2c584053 3751 TI_PUBLIC,
3752 TI_PROTECTED,
3753 TI_PRIVATE,
3754
3c2239cf 3755 TI_BOOLEAN_FALSE,
3756 TI_BOOLEAN_TRUE,
3757
775e7cc0 3758 TI_COMPLEX_INTEGER_TYPE,
3759 TI_COMPLEX_FLOAT_TYPE,
3760 TI_COMPLEX_DOUBLE_TYPE,
3761 TI_COMPLEX_LONG_DOUBLE_TYPE,
3762
3763 TI_FLOAT_TYPE,
3764 TI_DOUBLE_TYPE,
3765 TI_LONG_DOUBLE_TYPE,
3766
4070bd43 3767 TI_FLOAT_PTR_TYPE,
3768 TI_DOUBLE_PTR_TYPE,
3769 TI_LONG_DOUBLE_PTR_TYPE,
3770 TI_INTEGER_PTR_TYPE,
3771
775e7cc0 3772 TI_VOID_TYPE,
3773 TI_PTR_TYPE,
3774 TI_CONST_PTR_TYPE,
654ef926 3775 TI_SIZE_TYPE,
73673831 3776 TI_PID_TYPE,
775e7cc0 3777 TI_PTRDIFF_TYPE,
3778 TI_VA_LIST_TYPE,
a6c787e5 3779 TI_VA_LIST_GPR_COUNTER_FIELD,
3780 TI_VA_LIST_FPR_COUNTER_FIELD,
3c2239cf 3781 TI_BOOLEAN_TYPE,
e256d445 3782 TI_FILEPTR_TYPE,
775e7cc0 3783
c4503c0a 3784 TI_DFLOAT32_TYPE,
3785 TI_DFLOAT64_TYPE,
3786 TI_DFLOAT128_TYPE,
3787 TI_DFLOAT32_PTR_TYPE,
3788 TI_DFLOAT64_PTR_TYPE,
3789 TI_DFLOAT128_PTR_TYPE,
3790
83f69b41 3791 TI_VOID_LIST_NODE,
3792
5c62f199 3793 TI_MAIN_IDENTIFIER,
3794
06f0b99c 3795 TI_SAT_SFRACT_TYPE,
3796 TI_SAT_FRACT_TYPE,
3797 TI_SAT_LFRACT_TYPE,
3798 TI_SAT_LLFRACT_TYPE,
3799 TI_SAT_USFRACT_TYPE,
3800 TI_SAT_UFRACT_TYPE,
3801 TI_SAT_ULFRACT_TYPE,
3802 TI_SAT_ULLFRACT_TYPE,
3803 TI_SFRACT_TYPE,
3804 TI_FRACT_TYPE,
3805 TI_LFRACT_TYPE,
3806 TI_LLFRACT_TYPE,
3807 TI_USFRACT_TYPE,
3808 TI_UFRACT_TYPE,
3809 TI_ULFRACT_TYPE,
3810 TI_ULLFRACT_TYPE,
3811 TI_SAT_SACCUM_TYPE,
3812 TI_SAT_ACCUM_TYPE,
3813 TI_SAT_LACCUM_TYPE,
3814 TI_SAT_LLACCUM_TYPE,
3815 TI_SAT_USACCUM_TYPE,
3816 TI_SAT_UACCUM_TYPE,
3817 TI_SAT_ULACCUM_TYPE,
3818 TI_SAT_ULLACCUM_TYPE,
3819 TI_SACCUM_TYPE,
3820 TI_ACCUM_TYPE,
3821 TI_LACCUM_TYPE,
3822 TI_LLACCUM_TYPE,
3823 TI_USACCUM_TYPE,
3824 TI_UACCUM_TYPE,
3825 TI_ULACCUM_TYPE,
3826 TI_ULLACCUM_TYPE,
3827 TI_QQ_TYPE,
3828 TI_HQ_TYPE,
3829 TI_SQ_TYPE,
3830 TI_DQ_TYPE,
3831 TI_TQ_TYPE,
3832 TI_UQQ_TYPE,
3833 TI_UHQ_TYPE,
3834 TI_USQ_TYPE,
3835 TI_UDQ_TYPE,
3836 TI_UTQ_TYPE,
3837 TI_SAT_QQ_TYPE,
3838 TI_SAT_HQ_TYPE,
3839 TI_SAT_SQ_TYPE,
3840 TI_SAT_DQ_TYPE,
3841 TI_SAT_TQ_TYPE,
3842 TI_SAT_UQQ_TYPE,
3843 TI_SAT_UHQ_TYPE,
3844 TI_SAT_USQ_TYPE,
3845 TI_SAT_UDQ_TYPE,
3846 TI_SAT_UTQ_TYPE,
3847 TI_HA_TYPE,
3848 TI_SA_TYPE,
3849 TI_DA_TYPE,
3850 TI_TA_TYPE,
3851 TI_UHA_TYPE,
3852 TI_USA_TYPE,
3853 TI_UDA_TYPE,
3854 TI_UTA_TYPE,
3855 TI_SAT_HA_TYPE,
3856 TI_SAT_SA_TYPE,
3857 TI_SAT_DA_TYPE,
3858 TI_SAT_TA_TYPE,
3859 TI_SAT_UHA_TYPE,
3860 TI_SAT_USA_TYPE,
3861 TI_SAT_UDA_TYPE,
3862 TI_SAT_UTA_TYPE,
3863
46f8e3b0 3864 TI_OPTIMIZATION_DEFAULT,
3865 TI_OPTIMIZATION_CURRENT,
46f8e3b0 3866 TI_TARGET_OPTION_DEFAULT,
3867 TI_TARGET_OPTION_CURRENT,
24470055 3868 TI_CURRENT_TARGET_PRAGMA,
46f8e3b0 3869 TI_CURRENT_OPTIMIZE_PRAGMA,
3870
775e7cc0 3871 TI_MAX
3872};
3873
1f3233d1 3874extern GTY(()) tree global_trees[TI_MAX];
775e7cc0 3875
3876#define error_mark_node global_trees[TI_ERROR_MARK]
6c34d0c2 3877
775e7cc0 3878#define intQI_type_node global_trees[TI_INTQI_TYPE]
3879#define intHI_type_node global_trees[TI_INTHI_TYPE]
3880#define intSI_type_node global_trees[TI_INTSI_TYPE]
3881#define intDI_type_node global_trees[TI_INTDI_TYPE]
3882#define intTI_type_node global_trees[TI_INTTI_TYPE]
3883
3884#define unsigned_intQI_type_node global_trees[TI_UINTQI_TYPE]
3885#define unsigned_intHI_type_node global_trees[TI_UINTHI_TYPE]
3886#define unsigned_intSI_type_node global_trees[TI_UINTSI_TYPE]
3887#define unsigned_intDI_type_node global_trees[TI_UINTDI_TYPE]
3888#define unsigned_intTI_type_node global_trees[TI_UINTTI_TYPE]
3889
74bdbe96 3890#define uint16_type_node global_trees[TI_UINT16_TYPE]
42791117 3891#define uint32_type_node global_trees[TI_UINT32_TYPE]
3892#define uint64_type_node global_trees[TI_UINT64_TYPE]
3893
775e7cc0 3894#define integer_zero_node global_trees[TI_INTEGER_ZERO]
3895#define integer_one_node global_trees[TI_INTEGER_ONE]
2512209b 3896#define integer_three_node global_trees[TI_INTEGER_THREE]
c87787ad 3897#define integer_minus_one_node global_trees[TI_INTEGER_MINUS_ONE]
775e7cc0 3898#define size_zero_node global_trees[TI_SIZE_ZERO]
3899#define size_one_node global_trees[TI_SIZE_ONE]
02e7a332 3900#define bitsize_zero_node global_trees[TI_BITSIZE_ZERO]
3901#define bitsize_one_node global_trees[TI_BITSIZE_ONE]
3902#define bitsize_unit_node global_trees[TI_BITSIZE_UNIT]
3903
95f3173a 3904/* Base access nodes. */
2c584053 3905#define access_public_node global_trees[TI_PUBLIC]
3906#define access_protected_node global_trees[TI_PROTECTED]
3907#define access_private_node global_trees[TI_PRIVATE]
95f3173a 3908
775e7cc0 3909#define null_pointer_node global_trees[TI_NULL_POINTER]
3910
3911#define float_type_node global_trees[TI_FLOAT_TYPE]
3912#define double_type_node global_trees[TI_DOUBLE_TYPE]
3913#define long_double_type_node global_trees[TI_LONG_DOUBLE_TYPE]
3914
4070bd43 3915#define float_ptr_type_node global_trees[TI_FLOAT_PTR_TYPE]
3916#define double_ptr_type_node global_trees[TI_DOUBLE_PTR_TYPE]
3917#define long_double_ptr_type_node global_trees[TI_LONG_DOUBLE_PTR_TYPE]
3918#define integer_ptr_type_node global_trees[TI_INTEGER_PTR_TYPE]
3919
775e7cc0 3920#define complex_integer_type_node global_trees[TI_COMPLEX_INTEGER_TYPE]
3921#define complex_float_type_node global_trees[TI_COMPLEX_FLOAT_TYPE]
3922#define complex_double_type_node global_trees[TI_COMPLEX_DOUBLE_TYPE]
3923#define complex_long_double_type_node global_trees[TI_COMPLEX_LONG_DOUBLE_TYPE]
3924
3925#define void_type_node global_trees[TI_VOID_TYPE]
39b6af4b 3926/* The C type `void *'. */
775e7cc0 3927#define ptr_type_node global_trees[TI_PTR_TYPE]
39b6af4b 3928/* The C type `const void *'. */
775e7cc0 3929#define const_ptr_type_node global_trees[TI_CONST_PTR_TYPE]
654ef926 3930/* The C type `size_t'. */
3931#define size_type_node global_trees[TI_SIZE_TYPE]
73673831 3932#define pid_type_node global_trees[TI_PID_TYPE]
775e7cc0 3933#define ptrdiff_type_node global_trees[TI_PTRDIFF_TYPE]
3934#define va_list_type_node global_trees[TI_VA_LIST_TYPE]
a6c787e5 3935#define va_list_gpr_counter_field global_trees[TI_VA_LIST_GPR_COUNTER_FIELD]
3936#define va_list_fpr_counter_field global_trees[TI_VA_LIST_FPR_COUNTER_FIELD]
e256d445 3937/* The C type `FILE *'. */
3938#define fileptr_type_node global_trees[TI_FILEPTR_TYPE]
b06898ca 3939
3c2239cf 3940#define boolean_type_node global_trees[TI_BOOLEAN_TYPE]
3941#define boolean_false_node global_trees[TI_BOOLEAN_FALSE]
3942#define boolean_true_node global_trees[TI_BOOLEAN_TRUE]
3943
c4503c0a 3944/* The decimal floating point types. */
3945#define dfloat32_type_node global_trees[TI_DFLOAT32_TYPE]
3946#define dfloat64_type_node global_trees[TI_DFLOAT64_TYPE]
3947#define dfloat128_type_node global_trees[TI_DFLOAT128_TYPE]
3948#define dfloat32_ptr_type_node global_trees[TI_DFLOAT32_PTR_TYPE]
3949#define dfloat64_ptr_type_node global_trees[TI_DFLOAT64_PTR_TYPE]
3950#define dfloat128_ptr_type_node global_trees[TI_DFLOAT128_PTR_TYPE]
3951
06f0b99c 3952/* The fixed-point types. */
3953#define sat_short_fract_type_node global_trees[TI_SAT_SFRACT_TYPE]
3954#define sat_fract_type_node global_trees[TI_SAT_FRACT_TYPE]
3955#define sat_long_fract_type_node global_trees[TI_SAT_LFRACT_TYPE]
3956#define sat_long_long_fract_type_node global_trees[TI_SAT_LLFRACT_TYPE]
3957#define sat_unsigned_short_fract_type_node \
3958 global_trees[TI_SAT_USFRACT_TYPE]
3959#define sat_unsigned_fract_type_node global_trees[TI_SAT_UFRACT_TYPE]
3960#define sat_unsigned_long_fract_type_node \
3961 global_trees[TI_SAT_ULFRACT_TYPE]
3962#define sat_unsigned_long_long_fract_type_node \
3963 global_trees[TI_SAT_ULLFRACT_TYPE]
3964#define short_fract_type_node global_trees[TI_SFRACT_TYPE]
3965#define fract_type_node global_trees[TI_FRACT_TYPE]
3966#define long_fract_type_node global_trees[TI_LFRACT_TYPE]
3967#define long_long_fract_type_node global_trees[TI_LLFRACT_TYPE]
3968#define unsigned_short_fract_type_node global_trees[TI_USFRACT_TYPE]
3969#define unsigned_fract_type_node global_trees[TI_UFRACT_TYPE]
3970#define unsigned_long_fract_type_node global_trees[TI_ULFRACT_TYPE]
3971#define unsigned_long_long_fract_type_node \
3972 global_trees[TI_ULLFRACT_TYPE]
3973#define sat_short_accum_type_node global_trees[TI_SAT_SACCUM_TYPE]
3974#define sat_accum_type_node global_trees[TI_SAT_ACCUM_TYPE]
3975#define sat_long_accum_type_node global_trees[TI_SAT_LACCUM_TYPE]
3976#define sat_long_long_accum_type_node global_trees[TI_SAT_LLACCUM_TYPE]
3977#define sat_unsigned_short_accum_type_node \
3978 global_trees[TI_SAT_USACCUM_TYPE]
3979#define sat_unsigned_accum_type_node global_trees[TI_SAT_UACCUM_TYPE]
3980#define sat_unsigned_long_accum_type_node \
3981 global_trees[TI_SAT_ULACCUM_TYPE]
3982#define sat_unsigned_long_long_accum_type_node \
3983 global_trees[TI_SAT_ULLACCUM_TYPE]
3984#define short_accum_type_node global_trees[TI_SACCUM_TYPE]
3985#define accum_type_node global_trees[TI_ACCUM_TYPE]
3986#define long_accum_type_node global_trees[TI_LACCUM_TYPE]
3987#define long_long_accum_type_node global_trees[TI_LLACCUM_TYPE]
3988#define unsigned_short_accum_type_node global_trees[TI_USACCUM_TYPE]
3989#define unsigned_accum_type_node global_trees[TI_UACCUM_TYPE]
3990#define unsigned_long_accum_type_node global_trees[TI_ULACCUM_TYPE]
3991#define unsigned_long_long_accum_type_node \
3992 global_trees[TI_ULLACCUM_TYPE]
3993#define qq_type_node global_trees[TI_QQ_TYPE]
3994#define hq_type_node global_trees[TI_HQ_TYPE]
3995#define sq_type_node global_trees[TI_SQ_TYPE]
3996#define dq_type_node global_trees[TI_DQ_TYPE]
3997#define tq_type_node global_trees[TI_TQ_TYPE]
3998#define uqq_type_node global_trees[TI_UQQ_TYPE]
3999#define uhq_type_node global_trees[TI_UHQ_TYPE]
4000#define usq_type_node global_trees[TI_USQ_TYPE]
4001#define udq_type_node global_trees[TI_UDQ_TYPE]
4002#define utq_type_node global_trees[TI_UTQ_TYPE]
4003#define sat_qq_type_node global_trees[TI_SAT_QQ_TYPE]
4004#define sat_hq_type_node global_trees[TI_SAT_HQ_TYPE]
4005#define sat_sq_type_node global_trees[TI_SAT_SQ_TYPE]
4006#define sat_dq_type_node global_trees[TI_SAT_DQ_TYPE]
4007#define sat_tq_type_node global_trees[TI_SAT_TQ_TYPE]
4008#define sat_uqq_type_node global_trees[TI_SAT_UQQ_TYPE]
4009#define sat_uhq_type_node global_trees[TI_SAT_UHQ_TYPE]
4010#define sat_usq_type_node global_trees[TI_SAT_USQ_TYPE]
4011#define sat_udq_type_node global_trees[TI_SAT_UDQ_TYPE]
4012#define sat_utq_type_node global_trees[TI_SAT_UTQ_TYPE]
4013#define ha_type_node global_trees[TI_HA_TYPE]
4014#define sa_type_node global_trees[TI_SA_TYPE]
4015#define da_type_node global_trees[TI_DA_TYPE]
4016#define ta_type_node global_trees[TI_TA_TYPE]
4017#define uha_type_node global_trees[TI_UHA_TYPE]
4018#define usa_type_node global_trees[TI_USA_TYPE]
4019#define uda_type_node global_trees[TI_UDA_TYPE]
4020#define uta_type_node global_trees[TI_UTA_TYPE]
4021#define sat_ha_type_node global_trees[TI_SAT_HA_TYPE]
4022#define sat_sa_type_node global_trees[TI_SAT_SA_TYPE]
4023#define sat_da_type_node global_trees[TI_SAT_DA_TYPE]
4024#define sat_ta_type_node global_trees[TI_SAT_TA_TYPE]
4025#define sat_uha_type_node global_trees[TI_SAT_UHA_TYPE]
4026#define sat_usa_type_node global_trees[TI_SAT_USA_TYPE]
4027#define sat_uda_type_node global_trees[TI_SAT_UDA_TYPE]
4028#define sat_uta_type_node global_trees[TI_SAT_UTA_TYPE]
4029
83f69b41 4030/* The node that should be placed at the end of a parameter list to
4031 indicate that the function does not take a variable number of
4032 arguments. The TREE_VALUE will be void_type_node and there will be
4033 no TREE_CHAIN. Language-independent code should not assume
4034 anything else about this node. */
4035#define void_list_node global_trees[TI_VOID_LIST_NODE]
4036
5c62f199 4037#define main_identifier_node global_trees[TI_MAIN_IDENTIFIER]
eb65426a 4038#define MAIN_NAME_P(NODE) \
4039 (IDENTIFIER_NODE_CHECK (NODE) == main_identifier_node)
5c62f199 4040
24470055 4041/* Optimization options (OPTIMIZATION_NODE) to use for default and current
4042 functions. */
46f8e3b0 4043#define optimization_default_node global_trees[TI_OPTIMIZATION_DEFAULT]
4044#define optimization_current_node global_trees[TI_OPTIMIZATION_CURRENT]
46f8e3b0 4045
4046/* Default/current target options (TARGET_OPTION_NODE). */
4047#define target_option_default_node global_trees[TI_TARGET_OPTION_DEFAULT]
4048#define target_option_current_node global_trees[TI_TARGET_OPTION_CURRENT]
4049
4050/* Default tree list option(), optimize() pragmas to be linked into the
4051 attribute list. */
24470055 4052#define current_target_pragma global_trees[TI_CURRENT_TARGET_PRAGMA]
46f8e3b0 4053#define current_optimize_pragma global_trees[TI_CURRENT_OPTIMIZE_PRAGMA]
4054
b06898ca 4055/* An enumeration of the standard C integer types. These must be
f5ec8cb5 4056 ordered so that shorter types appear before longer ones, and so
4057 that signed types appear before unsigned ones, for the correct
4058 functioning of interpret_integer() in c-lex.c. */
6c34d0c2 4059enum integer_type_kind
b06898ca 4060{
4061 itk_char,
4062 itk_signed_char,
4063 itk_unsigned_char,
4064 itk_short,
4065 itk_unsigned_short,
4066 itk_int,
4067 itk_unsigned_int,
4068 itk_long,
4069 itk_unsigned_long,
4070 itk_long_long,
4071 itk_unsigned_long_long,
6388cfe2 4072 itk_int128,
4073 itk_unsigned_int128,
b06898ca 4074 itk_none
4075};
4076
4077typedef enum integer_type_kind integer_type_kind;
4078
4079/* The standard C integer types. Use integer_type_kind to index into
4080 this array. */
1f3233d1 4081extern GTY(()) tree integer_types[itk_none];
b06898ca 4082
4083#define char_type_node integer_types[itk_char]
4084#define signed_char_type_node integer_types[itk_signed_char]
4085#define unsigned_char_type_node integer_types[itk_unsigned_char]
4086#define short_integer_type_node integer_types[itk_short]
4087#define short_unsigned_type_node integer_types[itk_unsigned_short]
4088#define integer_type_node integer_types[itk_int]
4089#define unsigned_type_node integer_types[itk_unsigned_int]
4090#define long_integer_type_node integer_types[itk_long]
4091#define long_unsigned_type_node integer_types[itk_unsigned_long]
4092#define long_long_integer_type_node integer_types[itk_long_long]
4093#define long_long_unsigned_type_node integer_types[itk_unsigned_long_long]
6388cfe2 4094#define int128_integer_type_node integer_types[itk_int128]
4095#define int128_unsigned_type_node integer_types[itk_unsigned_int128]
775e7cc0 4096\f
fc5cb4c0 4097/* A pointer-to-function member type looks like:
4098
4099 struct {
4100 __P __pfn;
4101 ptrdiff_t __delta;
4102 };
4103
4104 If __pfn is NULL, it is a NULL pointer-to-member-function.
4105
4106 (Because the vtable is always the first thing in the object, we
4107 don't need its offset.) If the function is virtual, then PFN is
4108 one plus twice the index into the vtable; otherwise, it is just a
4109 pointer to the function.
4110
4111 Unfortunately, using the lowest bit of PFN doesn't work in
4112 architectures that don't impose alignment requirements on function
4113 addresses, or that use the lowest bit to tell one ISA from another,
4114 for example. For such architectures, we use the lowest bit of
4115 DELTA instead of the lowest bit of the PFN, and DELTA will be
4116 multiplied by 2. */
4117
4118enum ptrmemfunc_vbit_where_t
4119{
4120 ptrmemfunc_vbit_in_pfn,
4121 ptrmemfunc_vbit_in_delta
4122};
4123\f
fb084c16 4124#define NULL_TREE (tree) NULL
4125
da579dbb 4126/* True if NODE is an erroneous expression. */
4127
4128#define error_operand_p(NODE) \
4129 ((NODE) == error_mark_node \
4130 || ((NODE) && TREE_TYPE ((NODE)) == error_mark_node))
4131
60b8c5b3 4132extern tree decl_assembler_name (tree);
28485874 4133extern bool decl_assembler_name_equal (tree decl, const_tree asmname);
4134extern hashval_t decl_assembler_name_hash (const_tree asmname);
d72a838e 4135
6663ac46 4136/* Compute the number of bytes occupied by 'node'. This routine only
4137 looks at TREE_CODE and, if the code is TREE_VEC, TREE_VEC_LENGTH. */
4138
720082dc 4139extern size_t tree_size (const_tree);
6663ac46 4140
51d121a0 4141/* Compute the number of bytes occupied by a tree with code CODE. This
75a70cf9 4142 function cannot be used for TREE_VEC codes, which are of variable
4143 length. */
51d121a0 4144extern size_t tree_code_size (enum tree_code);
4145
e44576dd 4146/* Allocate and return a new UID from the DECL_UID namespace. */
4147extern int allocate_decl_uid (void);
4148
d72a838e 4149/* Lowest level primitive for allocating a node.
4150 The TREE_CODE is the only argument. Contents are initialized
4151 to zero except for a few of the common fields. */
4152
674b05f5 4153extern tree make_node_stat (enum tree_code MEM_STAT_DECL);
4154#define make_node(t) make_node_stat (t MEM_STAT_INFO)
d72a838e 4155
ff6d0dd9 4156/* Make a copy of a node, with all the same contents. */
d72a838e 4157
674b05f5 4158extern tree copy_node_stat (tree MEM_STAT_DECL);
4159#define copy_node(t) copy_node_stat (t MEM_STAT_INFO)
d72a838e 4160
4161/* Make a copy of a chain of TREE_LIST nodes. */
4162
60b8c5b3 4163extern tree copy_list (tree);
d72a838e 4164
b6e3dd65 4165/* Make a CASE_LABEL_EXPR. */
4166
4167extern tree build_case_label (tree, tree, tree);
4168
3cb98335 4169/* Make a BINFO. */
4170extern tree make_tree_binfo_stat (unsigned MEM_STAT_DECL);
4171#define make_tree_binfo(t) make_tree_binfo_stat (t MEM_STAT_INFO)
4172
d72a838e 4173/* Make a TREE_VEC. */
4174
674b05f5 4175extern tree make_tree_vec_stat (int MEM_STAT_DECL);
4176#define make_tree_vec(t) make_tree_vec_stat (t MEM_STAT_INFO)
d72a838e 4177
4178/* Return the (unique) IDENTIFIER_NODE node for a given name.
4179 The name is supplied as a char *. */
4180
60b8c5b3 4181extern tree get_identifier (const char *);
d72a838e 4182
69642df2 4183#if GCC_VERSION >= 3000
4184#define get_identifier(str) \
4185 (__builtin_constant_p (str) \
4186 ? get_identifier_with_length ((str), strlen (str)) \
4187 : get_identifier (str))
4188#endif
4189
4190
82863d5e 4191/* Identical to get_identifier, except that the length is assumed
4192 known. */
4193
69642df2 4194extern tree get_identifier_with_length (const char *, size_t);
82863d5e 4195
06fcb3a0 4196/* If an identifier with the name TEXT (a null-terminated string) has
4197 previously been referred to, return that node; otherwise return
4198 NULL_TREE. */
4199
60b8c5b3 4200extern tree maybe_get_identifier (const char *);
06fcb3a0 4201
d72a838e 4202/* Construct various types of nodes. */
4203
60b8c5b3 4204extern tree build_nt (enum tree_code, ...);
f352a3fb 4205extern tree build_nt_call_vec (tree, VEC(tree,gc) *);
60b8c5b3 4206
674b05f5 4207extern tree build0_stat (enum tree_code, tree MEM_STAT_DECL);
4208#define build0(c,t) build0_stat (c,t MEM_STAT_INFO)
4209extern tree build1_stat (enum tree_code, tree, tree MEM_STAT_DECL);
4210#define build1(c,t1,t2) build1_stat (c,t1,t2 MEM_STAT_INFO)
4211extern tree build2_stat (enum tree_code, tree, tree, tree MEM_STAT_DECL);
4212#define build2(c,t1,t2,t3) build2_stat (c,t1,t2,t3 MEM_STAT_INFO)
4213extern tree build3_stat (enum tree_code, tree, tree, tree, tree MEM_STAT_DECL);
4214#define build3(c,t1,t2,t3,t4) build3_stat (c,t1,t2,t3,t4 MEM_STAT_INFO)
4215extern tree build4_stat (enum tree_code, tree, tree, tree, tree,
4216 tree MEM_STAT_DECL);
4217#define build4(c,t1,t2,t3,t4,t5) build4_stat (c,t1,t2,t3,t4,t5 MEM_STAT_INFO)
1e8e9920 4218extern tree build5_stat (enum tree_code, tree, tree, tree, tree, tree,
4219 tree MEM_STAT_DECL);
4220#define build5(c,t1,t2,t3,t4,t5,t6) build5_stat (c,t1,t2,t3,t4,t5,t6 MEM_STAT_INFO)
dd277d48 4221extern tree build6_stat (enum tree_code, tree, tree, tree, tree, tree,
4222 tree, tree MEM_STAT_DECL);
4223#define build6(c,t1,t2,t3,t4,t5,t6,t7) \
4224 build6_stat (c,t1,t2,t3,t4,t5,t6,t7 MEM_STAT_INFO)
413a7abf 4225
2d60d82b 4226/* _loc versions of build[1-6]. */
4227
4228static inline tree
4229build1_stat_loc (location_t loc, enum tree_code code, tree type,
4230 tree arg1 MEM_STAT_DECL)
4231{
4232 tree t = build1_stat (code, type, arg1 PASS_MEM_STAT);
4233 if (CAN_HAVE_LOCATION_P (t))
4234 SET_EXPR_LOCATION (t, loc);
4235 return t;
4236}
4237#define build1_loc(l,c,t1,t2) build1_stat_loc (l,c,t1,t2 MEM_STAT_INFO)
4238
4239static inline tree
4240build2_stat_loc (location_t loc, enum tree_code code, tree type, tree arg0,
4241 tree arg1 MEM_STAT_DECL)
4242{
4243 tree t = build2_stat (code, type, arg0, arg1 PASS_MEM_STAT);
4244 if (CAN_HAVE_LOCATION_P (t))
4245 SET_EXPR_LOCATION (t, loc);
4246 return t;
4247}
4248#define build2_loc(l,c,t1,t2,t3) build2_stat_loc (l,c,t1,t2,t3 MEM_STAT_INFO)
4249
4250static inline tree
4251build3_stat_loc (location_t loc, enum tree_code code, tree type, tree arg0,
4252 tree arg1, tree arg2 MEM_STAT_DECL)
4253{
4254 tree t = build3_stat (code, type, arg0, arg1, arg2 PASS_MEM_STAT);
4255 if (CAN_HAVE_LOCATION_P (t))
4256 SET_EXPR_LOCATION (t, loc);
4257 return t;
4258}
4259#define build3_loc(l,c,t1,t2,t3,t4) \
4260 build3_stat_loc (l,c,t1,t2,t3,t4 MEM_STAT_INFO)
4261
4262static inline tree
4263build4_stat_loc (location_t loc, enum tree_code code, tree type, tree arg0,
4264 tree arg1, tree arg2, tree arg3 MEM_STAT_DECL)
4265{
4266 tree t = build4_stat (code, type, arg0, arg1, arg2, arg3 PASS_MEM_STAT);
4267 if (CAN_HAVE_LOCATION_P (t))
4268 SET_EXPR_LOCATION (t, loc);
4269 return t;
4270}
4271#define build4_loc(l,c,t1,t2,t3,t4,t5) \
4272 build4_stat_loc (l,c,t1,t2,t3,t4,t5 MEM_STAT_INFO)
4273
4274static inline tree
4275build5_stat_loc (location_t loc, enum tree_code code, tree type, tree arg0,
4276 tree arg1, tree arg2, tree arg3, tree arg4 MEM_STAT_DECL)
4277{
4278 tree t = build5_stat (code, type, arg0, arg1, arg2, arg3,
4279 arg4 PASS_MEM_STAT);
4280 if (CAN_HAVE_LOCATION_P (t))
4281 SET_EXPR_LOCATION (t, loc);
4282 return t;
4283}
4284#define build5_loc(l,c,t1,t2,t3,t4,t5,t6) \
4285 build5_stat_loc (l,c,t1,t2,t3,t4,t5,t6 MEM_STAT_INFO)
4286
4287static inline tree
4288build6_stat_loc (location_t loc, enum tree_code code, tree type, tree arg0,
4289 tree arg1, tree arg2, tree arg3, tree arg4,
4290 tree arg5 MEM_STAT_DECL)
4291{
4292 tree t = build6_stat (code, type, arg0, arg1, arg2, arg3, arg4,
4293 arg5 PASS_MEM_STAT);
4294 if (CAN_HAVE_LOCATION_P (t))
4295 SET_EXPR_LOCATION (t, loc);
4296 return t;
4297}
4298#define build6_loc(l,c,t1,t2,t3,t4,t5,t6,t7) \
4299 build6_stat_loc (l,c,t1,t2,t3,t4,t5,t6,t7 MEM_STAT_INFO)
4300
9845d120 4301extern tree build_var_debug_value_stat (tree, tree MEM_STAT_DECL);
4302#define build_var_debug_value(t1,t2) \
4303 build_var_debug_value_stat (t1,t2 MEM_STAT_INFO)
4304
b79dc18a 4305/* Constructs double_int from tree CST. */
4306
4307static inline double_int
4308tree_to_double_int (const_tree cst)
4309{
4310 return TREE_INT_CST (cst);
4311}
4312
4313extern tree double_int_to_tree (tree, double_int);
4314extern bool double_int_fits_to_tree_p (const_tree, double_int);
d3237426 4315extern tree force_fit_type_double (tree, double_int, int, bool);
b79dc18a 4316
d3bd87c3 4317/* Create an INT_CST node with a CST value zero extended. */
4318
4319static inline tree
4320build_int_cstu (tree type, unsigned HOST_WIDE_INT cst)
4321{
4322 return double_int_to_tree (type, uhwi_to_double_int (cst));
4323}
4324
7016c612 4325extern tree build_int_cst (tree, HOST_WIDE_INT);
dec41e98 4326extern tree build_int_cst_type (tree, HOST_WIDE_INT);
7016c612 4327extern tree build_int_cst_wide (tree, unsigned HOST_WIDE_INT, HOST_WIDE_INT);
c7a1d251 4328extern tree make_vector_stat (unsigned MEM_STAT_DECL);
4329#define make_vector(n) make_vector_stat (n MEM_STAT_INFO)
fadf62f4 4330extern tree build_vector_stat (tree, tree * MEM_STAT_DECL);
4331#define build_vector(t,v) build_vector_stat (t, v MEM_STAT_INFO)
c75b4594 4332extern tree build_vector_from_ctor (tree, VEC(constructor_elt,gc) *);
191b2c61 4333extern tree build_vector_from_val (tree, tree);
c75b4594 4334extern tree build_constructor (tree, VEC(constructor_elt,gc) *);
4335extern tree build_constructor_single (tree, tree, tree);
4336extern tree build_constructor_from_list (tree, tree);
720082dc 4337extern tree build_real_from_int_cst (tree, const_tree);
60b8c5b3 4338extern tree build_complex (tree, tree, tree);
ba56cb50 4339extern tree build_one_cst (tree);
98d92e3c 4340extern tree build_zero_cst (tree);
60b8c5b3 4341extern tree build_string (int, const char *);
674b05f5 4342extern tree build_tree_list_stat (tree, tree MEM_STAT_DECL);
4343#define build_tree_list(t,q) build_tree_list_stat(t,q MEM_STAT_INFO)
f352a3fb 4344extern tree build_tree_list_vec_stat (const VEC(tree,gc) * MEM_STAT_DECL);
4345#define build_tree_list_vec(v) build_tree_list_vec_stat (v MEM_STAT_INFO)
e60a6f7b 4346extern tree build_decl_stat (location_t, enum tree_code,
4347 tree, tree MEM_STAT_DECL);
7bd4091f 4348extern tree build_fn_decl (const char *, tree);
e60a6f7b 4349#define build_decl(l,c,t,q) build_decl_stat (l,c,t,q MEM_STAT_INFO)
23bdc9ca 4350extern tree build_translation_unit_decl (tree);
0a4b7550 4351extern tree build_block (tree, tree, tree, tree);
e60a6f7b 4352extern tree build_empty_stmt (location_t);
4353extern tree build_omp_clause (location_t, enum omp_clause_code);
d72a838e 4354
c2f47e15 4355extern tree build_vl_exp_stat (enum tree_code, int MEM_STAT_DECL);
4356#define build_vl_exp(c,n) build_vl_exp_stat (c,n MEM_STAT_INFO)
4357
c2f47e15 4358extern tree build_call_nary (tree, tree, int, ...);
4359extern tree build_call_valist (tree, tree, int, va_list);
389dd41b 4360#define build_call_array(T1,T2,N,T3)\
4361 build_call_array_loc (UNKNOWN_LOCATION, T1, T2, N, T3)
4362extern tree build_call_array_loc (location_t, tree, tree, int, const tree *);
f352a3fb 4363extern tree build_call_vec (tree, tree, VEC(tree,gc) *);
c2f47e15 4364
d72a838e 4365/* Construct various nodes representing data types. */
4366
60b8c5b3 4367extern tree make_signed_type (int);
4368extern tree make_unsigned_type (int);
11773141 4369extern tree signed_or_unsigned_type_for (int, tree);
dbc64c75 4370extern tree signed_type_for (tree);
dec41e98 4371extern tree unsigned_type_for (tree);
ad086ed4 4372extern void initialize_sizetypes (void);
60b8c5b3 4373extern void fixup_unsigned_type (tree);
b24423db 4374extern tree build_pointer_type_for_mode (tree, enum machine_mode, bool);
60b8c5b3 4375extern tree build_pointer_type (tree);
b24423db 4376extern tree build_reference_type_for_mode (tree, enum machine_mode, bool);
60b8c5b3 4377extern tree build_reference_type (tree);
4917c376 4378extern tree build_vector_type_for_mode (tree, enum machine_mode);
4379extern tree build_vector_type (tree innertype, int nunits);
8d125f7d 4380extern tree build_opaque_vector_type (tree innertype, int nunits);
60b8c5b3 4381extern tree build_type_no_quals (tree);
4382extern tree build_index_type (tree);
60b8c5b3 4383extern tree build_array_type (tree, tree);
47c154d9 4384extern tree build_nonshared_array_type (tree, tree);
94b7b4dd 4385extern tree build_array_type_nelts (tree, unsigned HOST_WIDE_INT);
60b8c5b3 4386extern tree build_function_type (tree, tree);
4387extern tree build_function_type_list (tree, ...);
7a3ec978 4388extern tree build_function_decl_skip_args (tree, bitmap, bool);
1c73f824 4389extern tree build_varargs_function_type_list (tree, ...);
5edc3af9 4390extern tree build_function_type_array (tree, int, tree *);
4391extern tree build_varargs_function_type_array (tree, int, tree *);
4392#define build_function_type_vec(RET, V) \
4393 build_function_type_array (RET, VEC_length (tree, V), VEC_address (tree, V))
4394#define build_varargs_function_type_vec(RET, V) \
4395 build_varargs_function_type_array (RET, VEC_length (tree, V), \
4396 VEC_address (tree, V))
5bfb0742 4397extern tree build_method_type_directly (tree, tree, tree);
60b8c5b3 4398extern tree build_method_type (tree, tree);
4399extern tree build_offset_type (tree, tree);
4400extern tree build_complex_type (tree);
720082dc 4401extern tree array_type_nelts (const_tree);
7d23383d 4402extern bool in_array_bounds_p (tree);
2100c228 4403extern bool range_in_array_bounds_p (tree);
60b8c5b3 4404
4405extern tree value_member (tree, tree);
720082dc 4406extern tree purpose_member (const_tree, tree);
1df3c246 4407extern bool vec_member (const_tree, VEC(tree,gc) *);
7616de93 4408extern tree chain_index (int, tree);
908e5f41 4409
5493cb9a 4410extern int attribute_list_equal (const_tree, const_tree);
4411extern int attribute_list_contained (const_tree, const_tree);
720082dc 4412extern int tree_int_cst_equal (const_tree, const_tree);
4413extern int tree_int_cst_lt (const_tree, const_tree);
4414extern int tree_int_cst_compare (const_tree, const_tree);
d6635d5c 4415extern int host_integerp (const_tree, int)
4416#ifndef ENABLE_TREE_CHECKING
4417 ATTRIBUTE_PURE /* host_integerp is pure only when checking is disabled. */
4418#endif
4419 ;
720082dc 4420extern HOST_WIDE_INT tree_low_cst (const_tree, int);
d6635d5c 4421#if !defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 4003)
4422extern inline __attribute__ ((__gnu_inline__)) HOST_WIDE_INT
4423tree_low_cst (const_tree t, int pos)
4424{
4425 gcc_assert (host_integerp (t, pos));
4426 return TREE_INT_CST_LOW (t);
4427}
4428#endif
a6c23958 4429extern HOST_WIDE_INT size_low_cst (const_tree);
720082dc 4430extern int tree_int_cst_sgn (const_tree);
b7bf20db 4431extern int tree_int_cst_sign_bit (const_tree);
5485b959 4432extern unsigned int tree_int_cst_min_precision (tree, bool);
cd29ee4b 4433extern bool tree_expr_nonnegative_p (tree);
add6ee5e 4434extern bool tree_expr_nonnegative_warnv_p (tree, bool *);
b7bf20db 4435extern bool may_negate_without_overflow_p (const_tree);
eec9c06d 4436extern tree strip_array_types (tree);
c6418a4e 4437extern tree excess_precision_type (tree);
85d86b55 4438extern bool valid_constant_size_p (const_tree);
296a500c 4439
06f0b99c 4440/* Construct various nodes representing fract or accum data types. */
4441
4442extern tree make_fract_type (int, int, int);
4443extern tree make_accum_type (int, int, int);
4444
4445#define make_signed_fract_type(P) make_fract_type (P, 0, 0)
4446#define make_unsigned_fract_type(P) make_fract_type (P, 1, 0)
4447#define make_sat_signed_fract_type(P) make_fract_type (P, 0, 1)
4448#define make_sat_unsigned_fract_type(P) make_fract_type (P, 1, 1)
4449#define make_signed_accum_type(P) make_accum_type (P, 0, 0)
4450#define make_unsigned_accum_type(P) make_accum_type (P, 1, 0)
4451#define make_sat_signed_accum_type(P) make_accum_type (P, 0, 1)
4452#define make_sat_unsigned_accum_type(P) make_accum_type (P, 1, 1)
4453
4454#define make_or_reuse_signed_fract_type(P) \
4455 make_or_reuse_fract_type (P, 0, 0)
4456#define make_or_reuse_unsigned_fract_type(P) \
4457 make_or_reuse_fract_type (P, 1, 0)
4458#define make_or_reuse_sat_signed_fract_type(P) \
4459 make_or_reuse_fract_type (P, 0, 1)
4460#define make_or_reuse_sat_unsigned_fract_type(P) \
4461 make_or_reuse_fract_type (P, 1, 1)
4462#define make_or_reuse_signed_accum_type(P) \
4463 make_or_reuse_accum_type (P, 0, 0)
4464#define make_or_reuse_unsigned_accum_type(P) \
4465 make_or_reuse_accum_type (P, 1, 0)
4466#define make_or_reuse_sat_signed_accum_type(P) \
4467 make_or_reuse_accum_type (P, 0, 1)
4468#define make_or_reuse_sat_unsigned_accum_type(P) \
4469 make_or_reuse_accum_type (P, 1, 1)
4470
fb084c16 4471/* From expmed.c. Since rtl.h is included after tree.h, we can't
4472 put the prototype here. Rtl.h does declare the prototype if
4473 tree.h had been included. */
4474
60b8c5b3 4475extern tree make_tree (tree, rtx);
d72a838e 4476\f
a12eeaaf 4477/* Return a type like TTYPE except that its TYPE_ATTRIBUTES
4478 is ATTRIBUTE.
4479
4480 Such modified types already made are recorded so that duplicates
88b5b080 4481 are not made. */
a12eeaaf 4482
60b8c5b3 4483extern tree build_type_attribute_variant (tree, tree);
4484extern tree build_decl_attribute_variant (tree, tree);
e1f1071c 4485extern tree build_type_attribute_qual_variant (tree, tree, int);
a12eeaaf 4486
309303cf 4487/* Return 0 if the attributes for two types are incompatible, 1 if they
4488 are compatible, and 2 if they are nearly compatible (which causes a
4489 warning to be generated). */
4490extern int comp_type_attributes (const_tree, const_tree);
4491
e3c541f0 4492/* Structure describing an attribute and a function to handle it. */
4493struct attribute_spec
4494{
4495 /* The name of the attribute (without any leading or trailing __),
4496 or NULL to mark the end of a table of attributes. */
e99c3a1d 4497 const char *const name;
e3c541f0 4498 /* The minimum length of the list of arguments of the attribute. */
e99c3a1d 4499 const int min_length;
e3c541f0 4500 /* The maximum length of the list of arguments of the attribute
4501 (-1 for no maximum). */
e99c3a1d 4502 const int max_length;
e3c541f0 4503 /* Whether this attribute requires a DECL. If it does, it will be passed
4504 from types of DECLs, function return types and array element types to
4505 the DECLs, function types and array types respectively; but when
4506 applied to a type in any other circumstances, it will be ignored with
4507 a warning. (If greater control is desired for a given attribute,
4508 this should be false, and the flags argument to the handler may be
4509 used to gain greater control in that case.) */
e99c3a1d 4510 const bool decl_required;
e3c541f0 4511 /* Whether this attribute requires a type. If it does, it will be passed
4512 from a DECL to the type of that DECL. */
e99c3a1d 4513 const bool type_required;
e3c541f0 4514 /* Whether this attribute requires a function (or method) type. If it does,
4515 it will be passed from a function pointer type to the target type,
4516 and from a function return type (which is not itself a function
4517 pointer type) to the function type. */
e99c3a1d 4518 const bool function_type_required;
e3c541f0 4519 /* Function to handle this attribute. NODE points to the node to which
4520 the attribute is to be applied. If a DECL, it should be modified in
4521 place; if a TYPE, a copy should be created. NAME is the name of the
4522 attribute (possibly with leading or trailing __). ARGS is the TREE_LIST
4523 of the arguments (which may be NULL). FLAGS gives further information
4524 about the context of the attribute. Afterwards, the attributes will
4525 be added to the DECL_ATTRIBUTES or TYPE_ATTRIBUTES, as appropriate,
4526 unless *NO_ADD_ATTRS is set to true (which should be done on error,
4527 as well as in any other cases when the attributes should not be added
4528 to the DECL or TYPE). Depending on FLAGS, any attributes to be
4529 applied to another type or DECL later may be returned;
4530 otherwise the return value should be NULL_TREE. This pointer may be
4531 NULL if no special handling is required beyond the checks implied
4532 by the rest of this structure. */
60b8c5b3 4533 tree (*const handler) (tree *node, tree name, tree args,
4534 int flags, bool *no_add_attrs);
ac86af5d 4535 /* Specifies if attribute affects type's identity. */
4536 const bool affects_type_identity;
e3c541f0 4537};
4538
e3c541f0 4539/* Flags that may be passed in the third argument of decl_attributes, and
4540 to handler functions for attributes. */
4541enum attribute_flags
4542{
4543 /* The type passed in is the type of a DECL, and any attributes that
4544 should be passed in again to be applied to the DECL rather than the
4545 type should be returned. */
4546 ATTR_FLAG_DECL_NEXT = 1,
4547 /* The type passed in is a function return type, and any attributes that
4548 should be passed in again to be applied to the function type rather
4549 than the return type should be returned. */
4550 ATTR_FLAG_FUNCTION_NEXT = 2,
4551 /* The type passed in is an array element type, and any attributes that
4552 should be passed in again to be applied to the array type rather
4553 than the element type should be returned. */
4554 ATTR_FLAG_ARRAY_NEXT = 4,
4555 /* The type passed in is a structure, union or enumeration type being
4556 created, and should be modified in place. */
7d3b509a 4557 ATTR_FLAG_TYPE_IN_PLACE = 8,
4558 /* The attributes are being applied by default to a library function whose
4559 name indicates known behavior, and should be silently ignored if they
4560 are not in fact compatible with the function type. */
4561 ATTR_FLAG_BUILT_IN = 16
e3c541f0 4562};
4563
ed5635e4 4564/* Default versions of target-overridable functions. */
4565
60b8c5b3 4566extern tree merge_decl_attributes (tree, tree);
4567extern tree merge_type_attributes (tree, tree);
0bf60c2b 4568
c55c785f 4569/* This function is a private implementation detail of lookup_attribute()
4570 and you should never call it directly. */
4571extern tree private_lookup_attribute (const char *, size_t, tree);
4572
4573/* Given an attribute name ATTR_NAME and a list of attributes LIST,
4574 return a pointer to the attribute's list element if the attribute
4575 is part of the list, or NULL_TREE if not found. If the attribute
4576 appears more than once, this only returns the first occurrence; the
4577 TREE_CHAIN of the return value should be passed back in if further
4578 occurrences are wanted. ATTR_NAME must be in the form 'text' (not
4579 '__text__'). */
fe78f852 4580
c55c785f 4581static inline tree
4582lookup_attribute (const char *attr_name, tree list)
4583{
4584 gcc_checking_assert (attr_name[0] != '_');
4585 /* In most cases, list is NULL_TREE. */
4586 if (list == NULL_TREE)
4587 return NULL_TREE;
4588 else
4589 /* Do the strlen() before calling the out-of-line implementation.
4590 In most cases attr_name is a string constant, and the compiler
4591 will optimize the strlen() away. */
4592 return private_lookup_attribute (attr_name, strlen (attr_name), list);
4593}
fe78f852 4594
c55c785f 4595/* This function is a private implementation detail of
4596 is_attribute_p() and you should never call it directly. */
4597extern bool private_is_attribute_p (const char *, size_t, const_tree);
fe78f852 4598
c55c785f 4599/* Given an identifier node IDENT and a string ATTR_NAME, return true
4600 if the identifier node is a valid attribute name for the string.
4601 ATTR_NAME must be in the form 'text' (not '__text__'). IDENT could
4602 be the identifier for 'text' or for '__text__'. */
4603
4604static inline bool
4605is_attribute_p (const char *attr_name, const_tree ident)
4606{
4607 gcc_checking_assert (attr_name[0] != '_');
4608 /* Do the strlen() before calling the out-of-line implementation.
4609 In most cases attr_name is a string constant, and the compiler
4610 will optimize the strlen() away. */
4611 return private_is_attribute_p (attr_name, strlen (attr_name), ident);
4612}
4ab0a739 4613
6a47600c 4614/* Remove any instances of attribute ATTR_NAME in LIST and return the
c55c785f 4615 modified list. ATTR_NAME must be in the form 'text' (not
4616 '__text__'). */
6a47600c 4617
4618extern tree remove_attribute (const char *, tree);
4619
4ab0a739 4620/* Given two attributes lists, return a list of their union. */
4621
60b8c5b3 4622extern tree merge_attributes (tree, tree);
fe78f852 4623
3aa0c315 4624#if TARGET_DLLIMPORT_DECL_ATTRIBUTES
a767736d 4625/* Given two Windows decl attributes lists, possibly including
4626 dllimport, return a list of their union . */
60b8c5b3 4627extern tree merge_dllimport_decl_attributes (tree, tree);
3aa0c315 4628
4629/* Handle a "dllimport" or "dllexport" attribute. */
4630extern tree handle_dll_attribute (tree *, tree, tree, int, bool *);
a767736d 4631#endif
4632
e40000f4 4633/* Check whether CAND is suitable to be returned from get_qualified_type
4634 (BASE, TYPE_QUALS). */
4635
720082dc 4636extern bool check_qualified_type (const_tree, const_tree, int);
e40000f4 4637
051b8c96 4638/* Return a version of the TYPE, qualified as indicated by the
4639 TYPE_QUALS, if one exists. If no qualified version exists yet,
4640 return NULL_TREE. */
4641
60b8c5b3 4642extern tree get_qualified_type (tree, int);
051b8c96 4643
4644/* Like get_qualified_type, but creates the type if it does not
4645 exist. This function never returns NULL_TREE. */
a5b1863e 4646
60b8c5b3 4647extern tree build_qualified_type (tree, int);
a5b1863e 4648
5d9de213 4649/* Create a variant of type T with alignment ALIGN. */
4650
4651extern tree build_aligned_type (tree, unsigned int);
4652
a5b1863e 4653/* Like build_qualified_type, but only deals with the `const' and
4654 `volatile' qualifiers. This interface is retained for backwards
de132707 4655 compatibility with the various front-ends; new code should use
a5b1863e 4656 build_qualified_type instead. */
d72a838e 4657
a5b1863e 4658#define build_type_variant(TYPE, CONST_P, VOLATILE_P) \
76c6f48d 4659 build_qualified_type ((TYPE), \
a5b1863e 4660 ((CONST_P) ? TYPE_QUAL_CONST : 0) \
4661 | ((VOLATILE_P) ? TYPE_QUAL_VOLATILE : 0))
d72a838e 4662
11121344 4663/* Make a copy of a type node. */
4664
e086912e 4665extern tree build_distinct_type_copy (tree);
4666extern tree build_variant_type_copy (tree);
11121344 4667
805e22b2 4668/* Finish up a builtin RECORD_TYPE. Give it a name and provide its
8e7d98a7 4669 fields. Optionally specify an alignment, and then lay it out. */
805e22b2 4670
60b8c5b3 4671extern void finish_builtin_struct (tree, const char *,
4672 tree, tree);
805e22b2 4673
d72a838e 4674/* Given a ..._TYPE node, calculate the TYPE_SIZE, TYPE_SIZE_UNIT,
99f4e085 4675 TYPE_ALIGN and TYPE_MODE fields. If called more than once on one
4676 node, does nothing except for the first time. */
d72a838e 4677
60b8c5b3 4678extern void layout_type (tree);
d72a838e 4679
99f4e085 4680/* These functions allow a front-end to perform a manual layout of a
4681 RECORD_TYPE. (For instance, if the placement of subsequent fields
4682 depends on the placement of fields so far.) Begin by calling
02e7a332 4683 start_record_layout. Then, call place_field for each of the
99f4e085 4684 fields. Then, call finish_record_layout. See layout_type for the
4685 default way in which these functions are used. */
4686
ad847b26 4687typedef struct record_layout_info_s
99f4e085 4688{
4689 /* The RECORD_TYPE that we are laying out. */
4690 tree t;
02e7a332 4691 /* The offset into the record so far, in bytes, not including bits in
4692 BITPOS. */
4693 tree offset;
4694 /* The last known alignment of SIZE. */
4695 unsigned int offset_align;
4696 /* The bit position within the last OFFSET_ALIGN bits, in bits. */
4697 tree bitpos;
99f4e085 4698 /* The alignment of the record so far, in bits. */
4699 unsigned int record_align;
f5712181 4700 /* The alignment of the record so far, ignoring #pragma pack and
4701 __attribute__ ((packed)), in bits. */
02e7a332 4702 unsigned int unpacked_align;
9d75589a 4703 /* The previous field laid out. */
f04f096b 4704 tree prev_field;
99f4e085 4705 /* The static variables (i.e., class variables, as opposed to
4706 instance variables) encountered in T. */
364ba361 4707 VEC(tree,gc) *pending_statics;
8642f3d3 4708 /* Bits remaining in the current alignment group */
4709 int remaining_in_alignment;
f5712181 4710 /* True if we've seen a packed field that didn't have normal
4711 alignment anyway. */
99f4e085 4712 int packed_maybe_necessary;
02e7a332 4713} *record_layout_info;
99f4e085 4714
60b8c5b3 4715extern record_layout_info start_record_layout (tree);
4716extern tree bit_from_pos (tree, tree);
4717extern tree byte_from_pos (tree, tree);
4718extern void pos_from_bit (tree *, tree *, unsigned int, tree);
4719extern void normalize_offset (tree *, tree *, unsigned int);
4720extern tree rli_size_unit_so_far (record_layout_info);
4721extern tree rli_size_so_far (record_layout_info);
4722extern void normalize_rli (record_layout_info);
4723extern void place_field (record_layout_info, tree);
4724extern void compute_record_mode (tree);
4725extern void finish_record_layout (record_layout_info, int);
99f4e085 4726
d72a838e 4727/* Given a hashcode and a ..._TYPE node (for which the hashcode was made),
4728 return a canonicalized ..._TYPE node, so that duplicates are not made.
4729 How the hash code is computed is up to the caller, as long as any two
4730 callers that could hash identical-looking type nodes agree. */
4731
60b8c5b3 4732extern tree type_hash_canon (unsigned int, tree);
d72a838e 4733
4734/* Given a VAR_DECL, PARM_DECL, RESULT_DECL or FIELD_DECL node,
4735 calculates the DECL_SIZE, DECL_SIZE_UNIT, DECL_ALIGN and DECL_MODE
4736 fields. Call this only once for any given decl node.
4737
4738 Second argument is the boundary that this field can be assumed to
4739 be starting at (in bits). Zero means it can be assumed aligned
4740 on any boundary that may be needed. */
4741
60b8c5b3 4742extern void layout_decl (tree, unsigned);
d72a838e 4743
dddcebdc 4744/* Given a VAR_DECL, PARM_DECL or RESULT_DECL, clears the results of
4745 a previous call to layout_decl and calls it again. */
4746
4747extern void relayout_decl (tree);
4748
0fc6aef1 4749/* Return the mode for data of a given size SIZE and mode class CLASS.
4750 If LIMIT is nonzero, then don't use modes bigger than MAX_FIXED_MODE_SIZE.
4751 The value is BLKmode if no other mode is found. This is like
4752 mode_for_size, but is passed a tree. */
4753
b7bf20db 4754extern enum machine_mode mode_for_size_tree (const_tree, enum mode_class, int);
0fc6aef1 4755
d72a838e 4756/* Return an expr equal to X but certainly not valid as an lvalue. */
4757
389dd41b 4758#define non_lvalue(T) non_lvalue_loc (UNKNOWN_LOCATION, T)
4759extern tree non_lvalue_loc (location_t, tree);
60b8c5b3 4760
4761extern tree convert (tree, tree);
720082dc 4762extern unsigned int expr_align (const_tree);
60b8c5b3 4763extern tree expr_first (tree);
4764extern tree expr_last (tree);
f8fd23c0 4765extern tree size_in_bytes (const_tree);
720082dc 4766extern HOST_WIDE_INT int_size_in_bytes (const_tree);
f8fd23c0 4767extern HOST_WIDE_INT max_int_size_in_bytes (const_tree);
92ddcd97 4768extern tree tree_expr_size (const_tree);
720082dc 4769extern tree bit_position (const_tree);
4770extern HOST_WIDE_INT int_bit_position (const_tree);
4771extern tree byte_position (const_tree);
4772extern HOST_WIDE_INT int_byte_position (const_tree);
902de8ed 4773
4774/* Define data structures, macros, and functions for handling sizes
4775 and the various types used to represent sizes. */
4776
4777enum size_type_kind
4778{
748e5d45 4779 stk_sizetype, /* Normal representation of sizes in bytes. */
4780 stk_ssizetype, /* Signed representation of sizes in bytes. */
4781 stk_bitsizetype, /* Normal representation of sizes in bits. */
4782 stk_sbitsizetype, /* Signed representation of sizes in bits. */
4783 stk_type_kind_last
4784};
902de8ed 4785
748e5d45 4786extern GTY(()) tree sizetype_tab[(int) stk_type_kind_last];
902de8ed 4787
748e5d45 4788#define sizetype sizetype_tab[(int) stk_sizetype]
4789#define bitsizetype sizetype_tab[(int) stk_bitsizetype]
4790#define ssizetype sizetype_tab[(int) stk_ssizetype]
4791#define sbitsizetype sizetype_tab[(int) stk_sbitsizetype]
902de8ed 4792
85390276 4793extern tree size_int_kind (HOST_WIDE_INT, enum size_type_kind);
389dd41b 4794#define size_binop(CODE,T1,T2)\
4795 size_binop_loc (UNKNOWN_LOCATION, CODE, T1, T2)
4796extern tree size_binop_loc (location_t, enum tree_code, tree, tree);
4797#define size_diffop(T1,T2)\
4798 size_diffop_loc (UNKNOWN_LOCATION, T1, T2)
4799extern tree size_diffop_loc (location_t, tree, tree);
1e9d55d7 4800
748e5d45 4801#define size_int(L) size_int_kind (L, stk_sizetype)
4802#define ssize_int(L) size_int_kind (L, stk_ssizetype)
4803#define bitsize_int(L) size_int_kind (L, stk_bitsizetype)
4804#define sbitsize_int(L) size_int_kind (L, stk_sbitsizetype)
30384dcf 4805
389dd41b 4806#define round_up(T,N) round_up_loc (UNKNOWN_LOCATION, T, N)
4807extern tree round_up_loc (location_t, tree, int);
4808#define round_down(T,N) round_down_loc (UNKNOWN_LOCATION, T, N)
4809extern tree round_down_loc (location_t, tree, int);
4189e677 4810extern void finalize_size_functions (void);
d72a838e 4811
4812/* Type for sizes of data-type. */
4813
30384dcf 4814#define BITS_PER_UNIT_LOG \
4815 ((BITS_PER_UNIT > 1) + (BITS_PER_UNIT > 2) + (BITS_PER_UNIT > 4) \
4816 + (BITS_PER_UNIT > 8) + (BITS_PER_UNIT > 16) + (BITS_PER_UNIT > 32) \
4817 + (BITS_PER_UNIT > 64) + (BITS_PER_UNIT > 128) + (BITS_PER_UNIT > 256))
4818
6b5553e5 4819/* If nonzero, an upper limit on alignment of structure fields, in bits, */
fe352cf1 4820extern unsigned int maximum_field_alignment;
64233515 4821
d72a838e 4822/* Concatenate two lists (chains of TREE_LIST nodes) X and Y
4823 by making the last node in X point to Y.
4824 Returns X, except if X is 0 returns Y. */
4825
60b8c5b3 4826extern tree chainon (tree, tree);
d72a838e 4827
4828/* Make a new TREE_LIST node from specified PURPOSE, VALUE and CHAIN. */
4829
674b05f5 4830extern tree tree_cons_stat (tree, tree, tree MEM_STAT_DECL);
4831#define tree_cons(t,q,w) tree_cons_stat (t,q,w MEM_STAT_INFO)
d72a838e 4832
4833/* Return the last tree node in a chain. */
4834
60b8c5b3 4835extern tree tree_last (tree);
d72a838e 4836
4837/* Reverse the order of elements in a chain, and return the new head. */
4838
60b8c5b3 4839extern tree nreverse (tree);
d72a838e 4840
4841/* Returns the length of a chain of nodes
4842 (number of chain pointers to follow before reaching a null pointer). */
4843
720082dc 4844extern int list_length (const_tree);
d72a838e 4845
efd3939c 4846/* Returns the number of FIELD_DECLs in a type. */
4847
720082dc 4848extern int fields_length (const_tree);
efd3939c 4849
8df5a43d 4850/* Returns the first FIELD_DECL in a type. */
4851
4852extern tree first_field (const_tree);
4853
e19896a4 4854/* Given an initializer INIT, return TRUE if INIT is zero or some
4855 aggregate of zeros. Otherwise return FALSE. */
4856
720082dc 4857extern bool initializer_zerop (const_tree);
e19896a4 4858
f352a3fb 4859/* Given a CONSTRUCTOR CTOR, return the element values as a vector. */
4860
4861extern VEC(tree,gc) *ctor_to_vec (tree);
4862
927b65fb 4863extern bool categorize_ctor_elements (const_tree, HOST_WIDE_INT *,
4864 HOST_WIDE_INT *, bool *);
20169a64 4865
927b65fb 4866extern bool complete_ctor_at_level_p (const_tree, HOST_WIDE_INT, const_tree);
957697db 4867
778ac06a 4868/* integer_zerop (tree x) is nonzero if X is an integer constant of value 0. */
d72a838e 4869
720082dc 4870extern int integer_zerop (const_tree);
d72a838e 4871
778ac06a 4872/* integer_onep (tree x) is nonzero if X is an integer constant of value 1. */
d72a838e 4873
720082dc 4874extern int integer_onep (const_tree);
d72a838e 4875
4876/* integer_all_onesp (tree x) is nonzero if X is an integer constant
4877 all of whose significant bits are 1. */
4878
720082dc 4879extern int integer_all_onesp (const_tree);
d72a838e 4880
4881/* integer_pow2p (tree x) is nonzero is X is an integer constant with
4882 exactly one bit 1. */
4883
720082dc 4884extern int integer_pow2p (const_tree);
d72a838e 4885
805e22b2 4886/* integer_nonzerop (tree x) is nonzero if X is an integer constant
4887 with a nonzero value. */
4888
720082dc 4889extern int integer_nonzerop (const_tree);
805e22b2 4890
720082dc 4891extern bool cst_and_fits_in_hwi (const_tree);
4892extern tree num_ending_zeros (const_tree);
dec41e98 4893
06f0b99c 4894/* fixed_zerop (tree x) is nonzero if X is a fixed-point constant of
4895 value 0. */
4896
4dc2a232 4897extern int fixed_zerop (const_tree);
06f0b99c 4898
82e3f297 4899/* staticp (tree x) is nonzero if X is a reference to data allocated
4900 at a fixed address in memory. Returns the outermost data. */
d72a838e 4901
82e3f297 4902extern tree staticp (tree);
d72a838e 4903
d72a838e 4904/* save_expr (EXP) returns an expression equivalent to EXP
4905 but it can be used multiple times within context CTX
4906 and only evaluate EXP once. */
4907
60b8c5b3 4908extern tree save_expr (tree);
d72a838e 4909
414bee42 4910/* Look inside EXPR and into any simple arithmetic operations. Return
4911 the innermost non-arithmetic node. */
4912
60b8c5b3 4913extern tree skip_simple_arithmetic (tree);
414bee42 4914
1f3233d1 4915/* Return which tree structure is used by T. */
4916
720082dc 4917enum tree_node_structure_enum tree_node_structure (const_tree);
1f3233d1 4918
91c9bb2d 4919/* Return true if EXP contains a PLACEHOLDER_EXPR, i.e. if it represents a
4920 size or offset that depends on a field within a record. */
9f354f8d 4921
b7bf20db 4922extern bool contains_placeholder_p (const_tree);
ce3fb06e 4923
4924/* This macro calls the above function but short-circuits the common
4925 case of a constant to save time. Also check for null. */
4926
4927#define CONTAINS_PLACEHOLDER_P(EXP) \
4928 ((EXP) != 0 && ! TREE_CONSTANT (EXP) && contains_placeholder_p (EXP))
4929
91c9bb2d 4930/* Return true if any part of the structure of TYPE involves a PLACEHOLDER_EXPR
4931 directly. This includes size, bounds, qualifiers (for QUAL_UNION_TYPE) and
4932 field positions. */
ce3fb06e 4933
60b8c5b3 4934extern bool type_contains_placeholder_p (tree);
9f354f8d 4935
9d75589a 4936/* Given a tree EXP, find all occurrences of references to fields
4189e677 4937 in a PLACEHOLDER_EXPR and place them in vector REFS without
4938 duplicates. Also record VAR_DECLs and CONST_DECLs. Note that
4939 we assume here that EXP contains only arithmetic expressions
4940 or CALL_EXPRs with PLACEHOLDER_EXPRs occurring only in their
4941 argument list. */
4942
4943extern void find_placeholder_in_expr (tree, VEC (tree, heap) **);
4944
4945/* This macro calls the above function but short-circuits the common
4946 case of a constant to save time and also checks for NULL. */
4947
4948#define FIND_PLACEHOLDER_IN_EXPR(EXP, V) \
4949do { \
4950 if((EXP) && !TREE_CONSTANT (EXP)) \
4951 find_placeholder_in_expr (EXP, V); \
4952} while (0)
4953
9f354f8d 4954/* Given a tree EXP, a FIELD_DECL F, and a replacement value R,
4955 return a tree with all occurrences of references to F in a
4189e677 4956 PLACEHOLDER_EXPR replaced by R. Also handle VAR_DECLs and
4957 CONST_DECLs. Note that we assume here that EXP contains only
4958 arithmetic expressions or CALL_EXPRs with PLACEHOLDER_EXPRs
4959 occurring only in their argument list. */
9f354f8d 4960
60b8c5b3 4961extern tree substitute_in_expr (tree, tree, tree);
9f354f8d 4962
55f9d7dc 4963/* This macro calls the above function but short-circuits the common
4964 case of a constant to save time and also checks for NULL. */
4965
4966#define SUBSTITUTE_IN_EXPR(EXP, F, R) \
4967 ((EXP) == 0 || TREE_CONSTANT (EXP) ? (EXP) : substitute_in_expr (EXP, F, R))
4968
4969/* Similar, but look for a PLACEHOLDER_EXPR in EXP and find a replacement
4970 for it within OBJ, a tree that is an object or a chain of references. */
4971
4972extern tree substitute_placeholder_in_expr (tree, tree);
4973
4974/* This macro calls the above function but short-circuits the common
4975 case of a constant to save time and also checks for NULL. */
4976
4977#define SUBSTITUTE_PLACEHOLDER_IN_EXPR(EXP, OBJ) \
4978 ((EXP) == 0 || TREE_CONSTANT (EXP) ? (EXP) \
4979 : substitute_placeholder_in_expr (EXP, OBJ))
4980
654995a1 4981/* variable_size (EXP) is like save_expr (EXP) except that it
4982 is for the special case of something that is part of a
4983 variable size for a data type. It makes special arrangements
4984 to compute the value at the right time when the data type
4985 belongs to a function parameter. */
4986
60b8c5b3 4987extern tree variable_size (tree);
654995a1 4988
845bebef 4989/* stabilize_reference (EXP) returns a reference equivalent to EXP
d72a838e 4990 but it can be used multiple times
4991 and only evaluate the subexpressions once. */
4992
60b8c5b3 4993extern tree stabilize_reference (tree);
d72a838e 4994
1b6e6303 4995/* Subroutine of stabilize_reference; this is called for subtrees of
4996 references. Any expression with side-effects must be put in a SAVE_EXPR
4997 to ensure that it is only evaluated once. */
4998
60b8c5b3 4999extern tree stabilize_reference_1 (tree);
1b6e6303 5000
d72a838e 5001/* Return EXP, stripped of any conversions to wider types
5002 in such a way that the result of converting to type FOR_TYPE
5003 is the same as if EXP were converted to FOR_TYPE.
5004 If FOR_TYPE is 0, it signifies EXP's type. */
5005
60b8c5b3 5006extern tree get_unwidened (tree, tree);
d72a838e 5007
5008/* Return OP or a simpler expression for a narrower value
5009 which can be sign-extended or zero-extended to give back OP.
5010 Store in *UNSIGNEDP_PTR either 1 if the value should be zero-extended
5011 or 0 if the value should be sign-extended. */
5012
60b8c5b3 5013extern tree get_narrower (tree, int *);
d72a838e 5014
a306ee43 5015/* Return true if T is an expression that get_inner_reference handles. */
5016
a174b54d 5017static inline bool
5018handled_component_p (const_tree t)
5019{
5020 switch (TREE_CODE (t))
5021 {
a174b54d 5022 case COMPONENT_REF:
c165a033 5023 case BIT_FIELD_REF:
a174b54d 5024 case ARRAY_REF:
5025 case ARRAY_RANGE_REF:
a174b54d 5026 case REALPART_EXPR:
5027 case IMAGPART_EXPR:
c165a033 5028 case VIEW_CONVERT_EXPR:
a174b54d 5029 return true;
5030
5031 default:
5032 return false;
5033 }
5034}
a306ee43 5035
5036/* Given an expression EXP that is a handled_component_p,
5037 look for the ultimate containing object, which is returned and specify
5038 the access position and size. */
d72a838e 5039
60b8c5b3 5040extern tree get_inner_reference (tree, HOST_WIDE_INT *, HOST_WIDE_INT *,
ffbcd083 5041 tree *, enum machine_mode *, int *, int *,
5042 bool);
d72a838e 5043
5e19919e 5044/* Given an expression EXP that may be a COMPONENT_REF, an ARRAY_REF or an
5045 ARRAY_RANGE_REF, look for whether EXP or any nested component-refs within
5046 EXP is marked as PACKED. */
5a2538e1 5047
b7bf20db 5048extern bool contains_packed_reference (const_tree exp);
5a2538e1 5049
6374121b 5050/* Return a tree of sizetype representing the size, in bytes, of the element
5e19919e 5051 of EXP, an ARRAY_REF or an ARRAY_RANGE_REF. */
6374121b 5052
5053extern tree array_ref_element_size (tree);
5054
e01d3bb3 5055bool array_at_struct_end_p (tree);
5056
6374121b 5057/* Return a tree representing the lower bound of the array mentioned in
5e19919e 5058 EXP, an ARRAY_REF or an ARRAY_RANGE_REF. */
6374121b 5059
5060extern tree array_ref_low_bound (tree);
5061
7d23383d 5062/* Return a tree representing the upper bound of the array mentioned in
5e19919e 5063 EXP, an ARRAY_REF or an ARRAY_RANGE_REF. */
7d23383d 5064
5065extern tree array_ref_up_bound (tree);
5066
6374121b 5067/* Return a tree representing the offset, in bytes, of the field referenced
5068 by EXP. This does not include any offset in DECL_FIELD_BIT_OFFSET. */
5069
5070extern tree component_ref_field_offset (tree);
5071
804dff30 5072/* Given a DECL or TYPE, return the scope in which it was declared, or
5073 NUL_TREE if there is no containing scope. */
5074
720082dc 5075extern tree get_containing_scope (const_tree);
804dff30 5076
d72a838e 5077/* Return the FUNCTION_DECL which provides this _DECL with its context,
5078 or zero if none. */
720082dc 5079extern tree decl_function_context (const_tree);
d72a838e 5080
7dd9d898 5081/* Return the RECORD_TYPE, UNION_TYPE, or QUAL_UNION_TYPE which provides
5082 this _DECL with its context, or zero if none. */
720082dc 5083extern tree decl_type_context (const_tree);
d72a838e 5084
03f2a1be 5085/* Return 1 if EXPR is the real constant zero. */
720082dc 5086extern int real_zerop (const_tree);
d72a838e 5087\f
5088/* Declare commonly used variables for tree structure. */
5089
b3034b6d 5090/* Nonzero means lvalues are limited to those valid in pedantic ANSI C.
5091 Zero means allow extended lvalues. */
5092
5093extern int pedantic_lvalues;
5094
88b5b080 5095/* Points to the FUNCTION_DECL of the function whose body we are reading. */
d72a838e 5096
1f3233d1 5097extern GTY(()) tree current_function_decl;
d72a838e 5098
d0309f39 5099/* Nonzero means a FUNC_BEGIN label was emitted. */
2d754264 5100extern GTY(()) const char * current_function_func_begin_label;
448e99f5 5101\f
5102/* Iterator for going through the function arguments. */
5103typedef struct {
448e99f5 5104 tree next; /* TREE_LIST pointing to the next argument */
5105} function_args_iterator;
5106
5107/* Initialize the iterator I with arguments from function FNDECL */
5108
5109static inline void
0591727a 5110function_args_iter_init (function_args_iterator *i, const_tree fntype)
448e99f5 5111{
448e99f5 5112 i->next = TYPE_ARG_TYPES (fntype);
5113}
5114
5115/* Return a pointer that holds the next argument if there are more arguments to
5116 handle, otherwise return NULL. */
5117
5118static inline tree *
5119function_args_iter_cond_ptr (function_args_iterator *i)
5120{
5121 return (i->next) ? &TREE_VALUE (i->next) : NULL;
5122}
5123
5124/* Return the next argument if there are more arguments to handle, otherwise
5125 return NULL. */
5126
5127static inline tree
5128function_args_iter_cond (function_args_iterator *i)
5129{
5130 return (i->next) ? TREE_VALUE (i->next) : NULL_TREE;
5131}
5132
5133/* Advance to the next argument. */
5134static inline void
5135function_args_iter_next (function_args_iterator *i)
5136{
5137 gcc_assert (i->next != NULL_TREE);
5138 i->next = TREE_CHAIN (i->next);
5139}
5140
cee43f7e 5141/* We set BLOCK_SOURCE_LOCATION only to inlined function entry points. */
5142
5143static inline bool
5144inlined_function_outer_scope_p (const_tree block)
5145{
5146 return BLOCK_SOURCE_LOCATION (block) != UNKNOWN_LOCATION;
5147}
5148
448e99f5 5149/* Loop over all function arguments of FNTYPE. In each iteration, PTR is set
5150 to point to the next tree element. ITER is an instance of
5151 function_args_iterator used to iterate the arguments. */
5152#define FOREACH_FUNCTION_ARGS_PTR(FNTYPE, PTR, ITER) \
5153 for (function_args_iter_init (&(ITER), (FNTYPE)); \
5154 (PTR = function_args_iter_cond_ptr (&(ITER))) != NULL; \
5155 function_args_iter_next (&(ITER)))
5156
5157/* Loop over all function arguments of FNTYPE. In each iteration, TREE is set
5158 to the next tree element. ITER is an instance of function_args_iterator
5159 used to iterate the arguments. */
5160#define FOREACH_FUNCTION_ARGS(FNTYPE, TREE, ITER) \
5161 for (function_args_iter_init (&(ITER), (FNTYPE)); \
5162 (TREE = function_args_iter_cond (&(ITER))) != NULL_TREE; \
5163 function_args_iter_next (&(ITER)))
5164
5165
d72a838e 5166\f
bb02c0b3 5167/* In tree.c */
eac18265 5168extern unsigned crc32_string (unsigned, const char *);
06306fd3 5169extern unsigned crc32_byte (unsigned, char);
60b8c5b3 5170extern void clean_symbol_name (char *);
db85cc4f 5171extern tree get_file_function_name (const char *);
b7bf20db 5172extern tree get_callee_fndecl (const_tree);
720082dc 5173extern int type_num_arguments (const_tree);
21dff555 5174extern bool associative_tree_code (enum tree_code);
5175extern bool commutative_tree_code (enum tree_code);
00f4f705 5176extern bool commutative_ternary_tree_code (enum tree_code);
faab57e3 5177extern tree upper_bound_in_type (tree, tree);
5178extern tree lower_bound_in_type (tree, tree);
b7bf20db 5179extern int operand_equal_for_phi_arg_p (const_tree, const_tree);
e60a6f7b 5180extern tree create_artificial_label (location_t);
75a70cf9 5181extern const char *get_name (tree);
0591727a 5182extern bool stdarg_p (const_tree);
448e99f5 5183extern bool prototype_p (tree);
a8891ab1 5184extern bool is_typedef_decl (tree x);
5185extern bool typedef_variant_p (tree);
9f627b1a 5186extern bool auto_var_in_fn_p (const_tree, const_tree);
15155321 5187extern tree build_low_bits_mask (tree, unsigned);
98112881 5188extern tree tree_strip_nop_conversions (tree);
5189extern tree tree_strip_sign_nop_conversions (tree);
4c0315d0 5190extern const_tree strip_invariant_refs (const_tree);
58d82cd0 5191extern tree lhd_gcc_personality (void);
6816d0c4 5192extern void assign_assembler_name_if_neeeded (tree);
0e763b2a 5193extern void warn_deprecated_use (tree, tree);
6816d0c4 5194
15155321 5195\f
5196/* In cgraph.c */
5197extern void change_decl_assembler_name (tree, tree);
bb02c0b3 5198\f
75a70cf9 5199/* In gimplify.c */
5200extern tree unshare_expr (tree);
5201\f
d72a838e 5202/* In stmt.c */
5203
60b8c5b3 5204extern void expand_expr_stmt (tree);
60b8c5b3 5205extern void expand_label (tree);
5206extern void expand_goto (tree);
60b8c5b3 5207
4ee9c684 5208extern rtx expand_stack_save (void);
5209extern void expand_stack_restore (tree);
60b8c5b3 5210extern void expand_return (tree);
60b8c5b3 5211
873f1e89 5212/* In tree-eh.c */
60b8c5b3 5213extern void using_eh_for_cleanups (void);
d72a838e 5214
4c0315d0 5215/* Compare and hash for any structure which begins with a canonical
5216 pointer. Assumes all pointers are interchangeable, which is sort
5217 of already assumed by gcc elsewhere IIRC. */
5218
5219static inline int
5220struct_ptr_eq (const void *a, const void *b)
5221{
5222 const void * const * x = (const void * const *) a;
5223 const void * const * y = (const void * const *) b;
5224 return *x == *y;
5225}
5226
5227static inline hashval_t
5228struct_ptr_hash (const void *a)
5229{
5230 const void * const * x = (const void * const *) a;
5231 return (intptr_t)*x >> 4;
5232}
5233
d72a838e 5234/* In fold-const.c */
5235
47be647d 5236/* Non-zero if we are folding constants inside an initializer; zero
5237 otherwise. */
5238extern int folding_initializer;
5239
bd56c1f7 5240/* Convert between trees and native memory representation. */
b7bf20db 5241extern int native_encode_expr (const_tree, unsigned char *, int);
5242extern tree native_interpret_expr (tree, const unsigned char *, int);
bd56c1f7 5243
9239a87e 5244/* Fold constants as much as possible in an expression.
5245 Returns the simplified expression.
5246 Acts only on the top level of the expression;
5247 if the argument itself cannot be simplified, its
5248 subexpressions are not changed. */
5249
60b8c5b3 5250extern tree fold (tree);
389dd41b 5251#define fold_unary(CODE,T1,T2)\
5252 fold_unary_loc (UNKNOWN_LOCATION, CODE, T1, T2)
5253extern tree fold_unary_loc (location_t, enum tree_code, tree, tree);
5254#define fold_unary_ignore_overflow(CODE,T1,T2)\
5255 fold_unary_ignore_overflow_loc (UNKNOWN_LOCATION, CODE, T1, T2)
5256extern tree fold_unary_ignore_overflow_loc (location_t, enum tree_code, tree, tree);
5257#define fold_binary(CODE,T1,T2,T3)\
5258 fold_binary_loc (UNKNOWN_LOCATION, CODE, T1, T2, T3)
5259extern tree fold_binary_loc (location_t, enum tree_code, tree, tree, tree);
5260#define fold_ternary(CODE,T1,T2,T3,T4)\
5261 fold_ternary_loc (UNKNOWN_LOCATION, CODE, T1, T2, T3, T4)
5262extern tree fold_ternary_loc (location_t, enum tree_code, tree, tree, tree, tree);
5263#define fold_build1(c,t1,t2)\
5264 fold_build1_stat_loc (UNKNOWN_LOCATION, c, t1, t2 MEM_STAT_INFO)
5265#define fold_build1_loc(l,c,t1,t2)\
5266 fold_build1_stat_loc (l, c, t1, t2 MEM_STAT_INFO)
5267extern tree fold_build1_stat_loc (location_t, enum tree_code, tree,
5268 tree MEM_STAT_DECL);
5269#define fold_build2(c,t1,t2,t3)\
5270 fold_build2_stat_loc (UNKNOWN_LOCATION, c, t1, t2, t3 MEM_STAT_INFO)
5271#define fold_build2_loc(l,c,t1,t2,t3)\
5272 fold_build2_stat_loc (l, c, t1, t2, t3 MEM_STAT_INFO)
5273extern tree fold_build2_stat_loc (location_t, enum tree_code, tree, tree,
5274 tree MEM_STAT_DECL);
5275#define fold_build3(c,t1,t2,t3,t4)\
5276 fold_build3_stat_loc (UNKNOWN_LOCATION, c, t1, t2, t3, t4 MEM_STAT_INFO)
5277#define fold_build3_loc(l,c,t1,t2,t3,t4)\
5278 fold_build3_stat_loc (l, c, t1, t2, t3, t4 MEM_STAT_INFO)
5279extern tree fold_build3_stat_loc (location_t, enum tree_code, tree, tree, tree,
5280 tree MEM_STAT_DECL);
5281extern tree fold_build1_initializer_loc (location_t, enum tree_code, tree, tree);
5282extern tree fold_build2_initializer_loc (location_t, enum tree_code, tree, tree, tree);
5283extern tree fold_build3_initializer_loc (location_t, enum tree_code, tree, tree, tree, tree);
5284#define fold_build_call_array(T1,T2,N,T4)\
5285 fold_build_call_array_loc (UNKNOWN_LOCATION, T1, T2, N, T4)
5286extern tree fold_build_call_array_loc (location_t, tree, tree, int, tree *);
5287#define fold_build_call_array_initializer(T1,T2,N,T4)\
5288 fold_build_call_array_initializer_loc (UNKNOWN_LOCATION, T1, T2, N, T4)
5289extern tree fold_build_call_array_initializer_loc (location_t, tree, tree, int, tree *);
b7bf20db 5290extern bool fold_convertible_p (const_tree, const_tree);
389dd41b 5291#define fold_convert(T1,T2)\
5292 fold_convert_loc(UNKNOWN_LOCATION, T1, T2)
5293extern tree fold_convert_loc (location_t, tree, tree);
5294extern tree fold_single_bit_test (location_t, enum tree_code, tree, tree, tree);
db97ad41 5295extern tree fold_ignored_result (tree);
d1aade50 5296extern tree fold_abs_const (tree, tree);
389dd41b 5297extern tree fold_indirect_ref_1 (location_t, tree, tree);
add6ee5e 5298extern void fold_defer_overflow_warnings (void);
75a70cf9 5299extern void fold_undefer_overflow_warnings (bool, const_gimple, int);
add6ee5e 5300extern void fold_undefer_and_ignore_overflow_warnings (void);
5301extern bool fold_deferring_overflow_warnings_p (void);
b9be572e 5302extern tree fold_fma (location_t, tree, tree, tree, tree);
60b8c5b3 5303
4ee9c684 5304enum operand_equal_flag
5305{
5306 OEP_ONLY_CONST = 1,
34e1297a 5307 OEP_PURE_SAME = 2,
5308 OEP_CONSTANT_ADDRESS_OF = 4
4ee9c684 5309};
5310
b7bf20db 5311extern int operand_equal_p (const_tree, const_tree, unsigned int);
b4b34335 5312extern int multiple_of_p (tree, const_tree, const_tree);
389dd41b 5313#define omit_one_operand(T1,T2,T3)\
5314 omit_one_operand_loc (UNKNOWN_LOCATION, T1, T2, T3)
5315extern tree omit_one_operand_loc (location_t, tree, tree, tree);
5316#define omit_two_operands(T1,T2,T3,T4)\
5317 omit_two_operands_loc (UNKNOWN_LOCATION, T1, T2, T3, T4)
5318extern tree omit_two_operands_loc (location_t, tree, tree, tree, tree);
5319#define invert_truthvalue(T)\
5320 invert_truthvalue_loc(UNKNOWN_LOCATION, T)
5321extern tree invert_truthvalue_loc (location_t, tree);
5322extern tree fold_truth_not_expr (location_t, tree);
c1677a03 5323extern tree fold_unary_to_constant (enum tree_code, tree, tree);
5324extern tree fold_binary_to_constant (enum tree_code, tree, tree, tree);
4ee9c684 5325extern tree fold_read_from_constant_string (tree);
317e2a67 5326extern tree int_const_binop (enum tree_code, const_tree, const_tree);
389dd41b 5327#define build_fold_addr_expr(T)\
5328 build_fold_addr_expr_loc (UNKNOWN_LOCATION, (T))
5329extern tree build_fold_addr_expr_loc (location_t, tree);
5330#define build_fold_addr_expr_with_type(T,TYPE)\
5331 build_fold_addr_expr_with_type_loc (UNKNOWN_LOCATION, (T), TYPE)
5332extern tree build_fold_addr_expr_with_type_loc (location_t, tree, tree);
198d9bbe 5333extern tree fold_build_cleanup_point_expr (tree type, tree expr);
5334extern tree fold_strip_sign_ops (tree);
389dd41b 5335#define build_fold_indirect_ref(T)\
5336 build_fold_indirect_ref_loc (UNKNOWN_LOCATION, T)
5337extern tree build_fold_indirect_ref_loc (location_t, tree);
5338#define fold_indirect_ref(T)\
5339 fold_indirect_ref_loc (UNKNOWN_LOCATION, T)
5340extern tree fold_indirect_ref_loc (location_t, tree);
182cf5a9 5341extern tree build_simple_mem_ref_loc (location_t, tree);
5342#define build_simple_mem_ref(T)\
5343 build_simple_mem_ref_loc (UNKNOWN_LOCATION, T)
5344extern double_int mem_ref_offset (const_tree);
9614eeff 5345extern tree reference_alias_ptr_type (const_tree);
1d0b727d 5346extern tree build_invariant_address (tree, tree, HOST_WIDE_INT);
3a82f2b4 5347extern tree constant_boolean_node (bool, tree);
401d1fb3 5348extern tree div_if_zero_remainder (enum tree_code, const_tree, const_tree);
e94026da 5349
b7bf20db 5350extern bool tree_swap_operands_p (const_tree, const_tree, bool);
cc0bdf91 5351extern enum tree_code swap_tree_comparison (enum tree_code);
5352
dbc64c75 5353extern bool ptr_difference_const (tree, tree, HOST_WIDE_INT *);
eea12c72 5354extern enum tree_code invert_tree_comparison (enum tree_code, bool);
dbc64c75 5355
de452836 5356extern bool tree_expr_nonzero_p (tree);
93116081 5357extern bool tree_unary_nonzero_warnv_p (enum tree_code, tree, tree, bool *);
5358extern bool tree_binary_nonzero_warnv_p (enum tree_code, tree, tree, tree op1,
5359 bool *);
5360extern bool tree_single_nonzero_warnv_p (tree, bool *);
93116081 5361extern bool tree_unary_nonnegative_warnv_p (enum tree_code, tree, tree, bool *);
5362extern bool tree_binary_nonnegative_warnv_p (enum tree_code, tree, tree, tree,
5363 bool *);
5364extern bool tree_single_nonnegative_warnv_p (tree t, bool *strict_overflow_p);
5365extern bool tree_invalid_nonnegative_warnv_p (tree t, bool *strict_overflow_p);
75a70cf9 5366extern bool tree_call_nonnegative_warnv_p (tree, tree, tree, tree, bool *);
18f22ec3 5367
add6ee5e 5368extern bool tree_expr_nonzero_warnv_p (tree, bool *);
de452836 5369
46ef5347 5370extern bool fold_real_zero_addition_p (const_tree, const_tree, int);
389dd41b 5371extern tree combine_comparisons (location_t, enum tree_code, enum tree_code,
c82f3b60 5372 enum tree_code, tree, tree, tree);
15155321 5373extern void debug_fold_checksum (const_tree);
46ef5347 5374
82012ffe 5375/* Return nonzero if CODE is a tree code that represents a truth value. */
5376static inline bool
5377truth_value_p (enum tree_code code)
5378{
5379 return (TREE_CODE_CLASS (code) == tcc_comparison
5380 || code == TRUTH_AND_EXPR || code == TRUTH_ANDIF_EXPR
5381 || code == TRUTH_OR_EXPR || code == TRUTH_ORIF_EXPR
5382 || code == TRUTH_XOR_EXPR || code == TRUTH_NOT_EXPR);
5383}
5384
a845d317 5385/* Return whether TYPE is a type suitable for an offset for
5386 a POINTER_PLUS_EXPR. */
5387static inline bool
5388ptrofftype_p (tree type)
5389{
5390 return (INTEGRAL_TYPE_P (type)
5391 && TYPE_PRECISION (type) == TYPE_PRECISION (sizetype)
5392 && TYPE_UNSIGNED (type) == TYPE_UNSIGNED (sizetype));
5393}
5394
a0553bff 5395/* Return OFF converted to a pointer offset type suitable as offset for
5396 POINTER_PLUS_EXPR. Use location LOC for this conversion. */
5397static inline tree
5398convert_to_ptrofftype_loc (location_t loc, tree off)
5399{
5400 return fold_convert_loc (loc, sizetype, off);
5401}
5402#define convert_to_ptrofftype(t) convert_to_ptrofftype_loc (UNKNOWN_LOCATION, t)
5403
2cc66f2a 5404/* Build and fold a POINTER_PLUS_EXPR at LOC offsetting PTR by OFF. */
5405static inline tree
5406fold_build_pointer_plus_loc (location_t loc, tree ptr, tree off)
5407{
5408 return fold_build2_loc (loc, POINTER_PLUS_EXPR, TREE_TYPE (ptr),
5409 ptr, fold_convert_loc (loc, sizetype, off));
5410}
5411#define fold_build_pointer_plus(p,o) \
5412 fold_build_pointer_plus_loc (UNKNOWN_LOCATION, p, o)
5413
5414/* Build and fold a POINTER_PLUS_EXPR at LOC offsetting PTR by OFF. */
5415static inline tree
5416fold_build_pointer_plus_hwi_loc (location_t loc, tree ptr, HOST_WIDE_INT off)
5417{
5418 return fold_build2_loc (loc, POINTER_PLUS_EXPR, TREE_TYPE (ptr),
5419 ptr, size_int (off));
5420}
5421#define fold_build_pointer_plus_hwi(p,o) \
5422 fold_build_pointer_plus_hwi_loc (UNKNOWN_LOCATION, p, o)
82012ffe 5423
805e22b2 5424/* In builtins.c */
51d2c51e 5425extern bool avoid_folding_inline_builtin (tree);
389dd41b 5426extern tree fold_call_expr (location_t, tree, bool);
5427extern tree fold_builtin_fputs (location_t, tree, tree, bool, bool, tree);
5428extern tree fold_builtin_strcpy (location_t, tree, tree, tree, tree);
5429extern tree fold_builtin_strncpy (location_t, tree, tree, tree, tree, tree);
5430extern tree fold_builtin_memory_chk (location_t, tree, tree, tree, tree, tree, tree, bool,
0a39fd54 5431 enum built_in_function);
389dd41b 5432extern tree fold_builtin_stxcpy_chk (location_t, tree, tree, tree, tree, tree, bool,
0a39fd54 5433 enum built_in_function);
1063acde 5434extern tree fold_builtin_stxncpy_chk (location_t, tree, tree, tree, tree, tree, bool,
5435 enum built_in_function);
389dd41b 5436extern tree fold_builtin_snprintf_chk (location_t, tree, tree, enum built_in_function);
c2f47e15 5437extern bool fold_builtin_next_arg (tree, bool);
b7bf20db 5438extern enum built_in_function builtin_mathfn_code (const_tree);
389dd41b 5439extern tree fold_builtin_call_array (location_t, tree, tree, int, tree *);
414c3a2c 5440extern tree build_call_expr_loc_array (location_t, tree, int, tree *);
5441extern tree build_call_expr_loc_vec (location_t, tree, VEC(tree,gc) *);
389dd41b 5442extern tree build_call_expr_loc (location_t, tree, int, ...);
0568e9c1 5443extern tree build_call_expr (tree, int, ...);
60b8c5b3 5444extern tree mathfn_built_in (tree, enum built_in_function fn);
4ee9c684 5445extern tree c_strlen (tree, int);
75a70cf9 5446extern tree std_gimplify_va_arg_expr (tree, tree, gimple_seq *, gimple_seq *);
f2462d6c 5447extern tree build_va_arg_indirect_ref (tree);
f656b751 5448extern tree build_string_literal (int, const char *);
b7bf20db 5449extern bool validate_arglist (const_tree, ...);
f656b751 5450extern rtx builtin_memset_read_str (void *, HOST_WIDE_INT, enum machine_mode);
7bfefa9d 5451extern bool is_builtin_fn (tree);
ceea063b 5452extern bool get_object_alignment_1 (tree, unsigned int *,
5453 unsigned HOST_WIDE_INT *);
957d0361 5454extern unsigned int get_object_alignment (tree);
e3694d1d 5455extern unsigned int get_object_or_type_alignment (tree);
ceea063b 5456extern bool get_pointer_alignment_1 (tree, unsigned int *,
5457 unsigned HOST_WIDE_INT *);
957d0361 5458extern unsigned int get_pointer_alignment (tree);
75a70cf9 5459extern tree fold_call_stmt (gimple, bool);
5460extern tree gimple_fold_builtin_snprintf_chk (gimple, tree, enum built_in_function);
9c20c4fc 5461extern tree make_range (tree, int *, tree *, tree *, bool *);
946e9eb4 5462extern tree make_range_step (location_t, enum tree_code, tree, tree, tree,
5463 tree *, tree *, int *, bool *);
389dd41b 5464extern tree build_range_check (location_t, tree, tree, int, tree, tree);
48e1416a 5465extern bool merge_ranges (int *, tree *, tree *, int, tree, tree, int,
9c20c4fc 5466 tree, tree);
7bfefa9d 5467extern void set_builtin_user_assembler_name (tree decl, const char *asmspec);
a6b74a67 5468extern bool is_simple_builtin (tree);
5469extern bool is_inexpensive_builtin (tree);
03f2a1be 5470
8cce4b41 5471/* In convert.c */
60b8c5b3 5472extern tree strip_float_extensions (tree);
8cce4b41 5473
f52f7b9e 5474/* In tree.c */
720082dc 5475extern int really_constant_p (const_tree);
c7d4e749 5476extern bool decl_address_invariant_p (const_tree);
b9c94ed7 5477extern bool decl_address_ip_invariant_p (const_tree);
a6caa15f 5478extern bool int_fits_type_p (const_tree, const_tree);
e506f1d4 5479#ifndef GENERATOR_FILE
1f1872fd 5480extern void get_type_static_bounds (const_tree, mpz_t, mpz_t);
e506f1d4 5481#endif
1f8a6ff8 5482extern bool variably_modified_type_p (tree, tree);
720082dc 5483extern int tree_log2 (const_tree);
5484extern int tree_floor_log2 (const_tree);
b7bf20db 5485extern int simple_cst_equal (const_tree, const_tree);
720082dc 5486extern hashval_t iterative_hash_expr (const_tree, hashval_t);
75a70cf9 5487extern hashval_t iterative_hash_exprs_commutative (const_tree,
5488 const_tree, hashval_t);
591f01a8 5489extern hashval_t iterative_hash_host_wide_int (HOST_WIDE_INT, hashval_t);
f6c33c78 5490extern hashval_t iterative_hash_hashval_t (hashval_t, hashval_t);
34e5cced 5491extern hashval_t iterative_hash_host_wide_int (HOST_WIDE_INT, hashval_t);
720082dc 5492extern int compare_tree_int (const_tree, unsigned HOST_WIDE_INT);
b7bf20db 5493extern int type_list_equal (const_tree, const_tree);
720082dc 5494extern int chain_member (const_tree, const_tree);
60b8c5b3 5495extern tree type_hash_lookup (unsigned int, tree);
5496extern void type_hash_add (unsigned int, tree);
720082dc 5497extern int simple_cst_list_equal (const_tree, const_tree);
60b8c5b3 5498extern void dump_tree_statistics (void);
750ad201 5499extern void recompute_tree_invariant_for_addr_expr (tree);
fb80456a 5500extern bool needs_to_live_in_memory (const_tree);
409a160c 5501extern tree reconstruct_complex_type (tree, tree);
60b8c5b3 5502
720082dc 5503extern int real_onep (const_tree);
5504extern int real_twop (const_tree);
5505extern int real_minus_onep (const_tree);
60b8c5b3 5506extern void init_ttree (void);
c38a75b7 5507extern void build_common_tree_nodes (bool, bool);
471eff36 5508extern void build_common_builtin_nodes (void);
4f7f7efd 5509extern tree build_nonstandard_integer_type (unsigned HOST_WIDE_INT, int);
60b8c5b3 5510extern tree build_range_type (tree, tree, tree);
47c154d9 5511extern tree build_nonshared_range_type (tree, tree, tree);
a9538d68 5512extern bool subrange_type_for_debug_p (const_tree, tree *, tree *);
720082dc 5513extern HOST_WIDE_INT int_cst_value (const_tree);
84cc784c 5514extern HOST_WIDEST_INT widest_int_cst_value (const_tree);
504d3463 5515
35cc02b5 5516extern tree *tree_block (tree);
1b16fc45 5517extern location_t *block_nonartificial_location (tree);
b430e8d9 5518extern location_t tree_nonartificial_location (tree);
35cc02b5 5519
15155321 5520extern tree block_ultimate_origin (const_tree);
5521
6378ffb3 5522extern tree get_binfo_at_offset (tree, HOST_WIDE_INT, tree);
5523
15155321 5524/* In tree-nested.c */
5525extern tree build_addr (tree, tree);
5526
f52f7b9e 5527/* In function.c */
60b8c5b3 5528extern void expand_main_function (void);
15155321 5529extern void expand_function_end (void);
5530extern void expand_function_start (tree);
5531extern void stack_protect_prologue (void);
5532extern void stack_protect_epilogue (void);
60b8c5b3 5533extern void init_dummy_function_start (void);
5534extern void expand_dummy_function_end (void);
80f2ef47 5535extern void allocate_struct_function (tree, bool);
87d4aa85 5536extern void push_struct_function (tree fndecl);
60b8c5b3 5537extern void init_function_start (tree);
b7bf20db 5538extern bool use_register_for_decl (const_tree);
3072d30e 5539extern void generate_setjmp_warnings (void);
60b8c5b3 5540extern void init_temp_slots (void);
60b8c5b3 5541extern void free_temp_slots (void);
5542extern void pop_temp_slots (void);
5543extern void push_temp_slots (void);
5544extern void preserve_temp_slots (rtx);
fb80456a 5545extern int aggregate_value_p (const_tree, const_tree);
60b8c5b3 5546extern void push_function_context (void);
5547extern void pop_function_context (void);
75a70cf9 5548extern gimple_seq gimplify_parameters (void);
f52f7b9e 5549
5550/* In print-rtl.c */
5551#ifdef BUFSIZ
dd9b9fc5 5552extern void print_rtl (FILE *, const_rtx);
f52f7b9e 5553#endif
5554
5555/* In print-tree.c */
60b8c5b3 5556extern void debug_tree (tree);
8ee76a8d 5557extern void debug_vec_tree (VEC(tree,gc) *);
f52f7b9e 5558#ifdef BUFSIZ
5d1b319b 5559extern void dump_addr (FILE*, const char *, const void *);
60b8c5b3 5560extern void print_node (FILE *, const char *, tree, int);
8ee76a8d 5561extern void print_vec_tree (FILE *, const char *, VEC(tree,gc) *, int);
5d1b319b 5562extern void print_node_brief (FILE *, const char *, const_tree, int);
60b8c5b3 5563extern void indent_to (FILE *, int);
f52f7b9e 5564#endif
5565
d9671935 5566/* In tree-inline.c: */
5567extern bool debug_find_tree (tree, tree);
ac13e8d9 5568/* This is in tree-inline.c since the routine uses
5569 data structures from the inliner. */
5570extern tree unsave_expr_now (tree);
03908818 5571extern tree build_duplicate_type (tree);
d9671935 5572
302bf7ba 5573/* In calls.c */
dfe08167 5574
4fec1d6c 5575/* Nonzero if this is a call to a function whose return value depends
5576 solely on its arguments, has no side effects, and does not read
9c2a0c05 5577 global memory. This corresponds to TREE_READONLY for function
5578 decls. */
5579#define ECF_CONST (1 << 0)
5580/* Nonzero if this is a call to "pure" function (like const function,
5581 but may read memory. This corresponds to DECL_PURE_P for function
5582 decls. */
5583#define ECF_PURE (1 << 1)
5584/* Nonzero if this is ECF_CONST or ECF_PURE but cannot be proven to no
5585 infinite loop. This corresponds to DECL_LOOPING_CONST_OR_PURE_P
5586 for function decls.*/
5587#define ECF_LOOPING_CONST_OR_PURE (1 << 2)
4fec1d6c 5588/* Nonzero if this call will never return. */
9c2a0c05 5589#define ECF_NORETURN (1 << 3)
79c31609 5590/* Nonzero if this is a call to malloc or a related function. */
9c2a0c05 5591#define ECF_MALLOC (1 << 4)
79c31609 5592/* Nonzero if it is plausible that this is a call to alloca. */
9c2a0c05 5593#define ECF_MAY_BE_ALLOCA (1 << 5)
79c31609 5594/* Nonzero if this is a call to a function that won't throw an exception. */
9c2a0c05 5595#define ECF_NOTHROW (1 << 6)
79c31609 5596/* Nonzero if this is a call to setjmp or a related function. */
9c2a0c05 5597#define ECF_RETURNS_TWICE (1 << 7)
4fec1d6c 5598/* Nonzero if this call replaces the current stack frame. */
9c2a0c05 5599#define ECF_SIBCALL (1 << 8)
fc09b200 5600/* Function does not read or write memory (but may have side effects, so
5601 it does not necessarily fit ECF_CONST). */
2dd6f9ed 5602#define ECF_NOVOPS (1 << 9)
7bd95dfd 5603/* The function does not lead to calls within current function unit. */
5604#define ECF_LEAF (1 << 10)
4c0315d0 5605/* Nonzero if this call does not affect transactions. */
5606#define ECF_TM_PURE (1 << 11)
5607/* Nonzero if this call is into the transaction runtime library. */
5608#define ECF_TM_BUILTIN (1 << 12)
79c31609 5609
5d1b319b 5610extern int flags_from_decl_or_type (const_tree);
b7bf20db 5611extern int call_expr_flags (const_tree);
79c31609 5612
8ce86007 5613/* Call argument flags. */
5614
5615/* Nonzero if the argument is not dereferenced recursively, thus only
5616 directly reachable memory is read or written. */
5617#define EAF_DIRECT (1 << 0)
5618/* Nonzero if memory reached by the argument is not clobbered. */
5619#define EAF_NOCLOBBER (1 << 1)
5620/* Nonzero if the argument does not escape. */
5621#define EAF_NOESCAPE (1 << 2)
5622/* Nonzero if the argument is not used by the function. */
5623#define EAF_UNUSED (1 << 3)
5624
5625/* Call return flags. */
5626
5627/* Mask for the argument number that is returned. Lower two bits of
5628 the return flags, encodes argument slots zero to three. */
5629#define ERF_RETURN_ARG_MASK (3)
5630/* Nonzero if the return value is equal to the argument number
5631 flags & ERF_RETURN_ARG_MASK. */
5632#define ERF_RETURNS_ARG (1 << 2)
5633/* Nonzero if the return value does not alias with anything. Functions
5634 with the malloc attribute have this set on their return value. */
5635#define ERF_NOALIAS (1 << 3)
5636
5d1b319b 5637extern int setjmp_call_p (const_tree);
75a70cf9 5638extern bool gimple_alloca_call_p (const_gimple);
5d1b319b 5639extern bool alloca_call_p (const_tree);
fb80456a 5640extern bool must_pass_in_stack_var_size (enum machine_mode, const_tree);
5641extern bool must_pass_in_stack_var_size_or_pad (enum machine_mode, const_tree);
302bf7ba 5642
e3f6ce11 5643/* In attribs.c. */
434712c4 5644
9bf1c74e 5645extern const struct attribute_spec *lookup_attribute_spec (const_tree);
2fdd6488 5646
b7831f3e 5647extern void init_attributes (void);
5648
434712c4 5649/* Process the attributes listed in ATTRIBUTES and install them in *NODE,
5650 which is either a DECL (including a TYPE_DECL) or a TYPE. If a DECL,
5651 it should be modified in place; if a TYPE, a copy should be created
5652 unless ATTR_FLAG_TYPE_IN_PLACE is set in FLAGS. FLAGS gives further
5653 information, in the form of a bitwise OR of flags in enum attribute_flags
5654 from tree.h. Depending on these flags, some attributes may be
5655 returned to be applied at a later stage (for example, to apply
5656 a decl attribute to the declaration rather than to its type). */
aecda0d6 5657extern tree decl_attributes (tree *, tree, int);
e3f6ce11 5658
4c0315d0 5659extern void apply_tm_attr (tree, tree);
5660
f52f7b9e 5661/* In stor-layout.c */
ee1ab431 5662extern void set_min_and_max_values_for_integral_type (tree, int, bool);
60b8c5b3 5663extern void fixup_signed_type (tree);
5664extern void internal_reference_types (void);
4ee9c684 5665extern unsigned int update_alignment_for_field (record_layout_info, tree,
5666 unsigned int);
f52f7b9e 5667/* varasm.c */
ecba073f 5668extern tree tree_output_constant_def (tree);
b2c4af5e 5669extern void make_decl_rtl (tree);
e6db644e 5670extern rtx make_decl_rtl_for_debug (tree);
ecd88073 5671extern void make_decl_one_only (tree, tree);
60b8c5b3 5672extern int supports_one_only (void);
60b8c5b3 5673extern void resolve_unique_section (tree, int, int);
5674extern void mark_referenced (tree);
4490a821 5675extern void mark_decl_referenced (tree);
3cad5dd7 5676extern void notice_global_symbol (tree);
b2c4af5e 5677extern void set_user_assembler_name (tree, const char *);
e9f08e82 5678extern void process_pending_assemble_externals (void);
9ced88d0 5679extern bool decl_replaceable_p (tree);
5680extern bool decl_binds_to_current_def_p (tree);
b5369b7d 5681extern enum tls_model decl_default_tls_model (const_tree);
5682
f52f7b9e 5683/* In stmt.c */
60b8c5b3 5684extern void expand_computed_goto (tree);
5685extern bool parse_output_constraint (const char **, int, int, int,
5686 bool *, bool *, bool *);
d7e38994 5687extern bool parse_input_constraint (const char **, int, int, int, int,
5688 const char * const *, bool *, bool *);
16c9337c 5689extern void expand_asm_stmt (gimple);
78f55ca8 5690extern tree resolve_asm_operand_names (tree, tree, tree, tree);
df2813c5 5691extern bool expand_switch_using_bit_tests_p (tree, tree, unsigned int,
5692 unsigned int);
16c9337c 5693extern void expand_case (gimple);
64d5fb6a 5694#ifdef HARD_CONST
5695/* Silly ifdef to avoid having all includers depend on hard-reg-set.h. */
2389b26b 5696extern tree tree_overlaps_hard_reg_set (tree, HARD_REG_SET *);
64d5fb6a 5697#endif
4ee9c684 5698
a50b6670 5699\f
dddcebdc 5700/* In tree-inline.c */
5701
c6224531 5702/* The type of a set of already-visited pointers. Functions for creating
5703 and manipulating it are declared in pointer-set.h */
5704struct pointer_set_t;
5705
4ee9c684 5706/* The type of a callback function for walking over tree structure. */
1431bff6 5707
60b8c5b3 5708typedef tree (*walk_tree_fn) (tree *, int *, void *);
20a8f962 5709
5710/* The type of a callback function that represents a custom walk_tree. */
5711
5712typedef tree (*walk_tree_lh) (tree *, int *, tree (*) (tree *, int *, void *),
5713 void *, struct pointer_set_t*);
5714
5715extern tree walk_tree_1 (tree*, walk_tree_fn, void*, struct pointer_set_t*,
5716 walk_tree_lh);
5717extern tree walk_tree_without_duplicates_1 (tree*, walk_tree_fn, void*,
5718 walk_tree_lh);
5719#define walk_tree(a,b,c,d) \
5720 walk_tree_1 (a, b, c, d, NULL)
5721#define walk_tree_without_duplicates(a,b,c) \
5722 walk_tree_without_duplicates_1 (a, b, c, NULL)
1431bff6 5723
15155321 5724/* In emit-rtl.c */
ca74b940 5725/* Assign the RTX to declaration. */
5726
60b8c5b3 5727extern void set_decl_rtl (tree, rtx);
d91cf567 5728extern void set_decl_incoming_rtl (tree, rtx, bool);
bdcbc557 5729\f
491e04ef 5730/* Enum and arrays used for tree allocation stats.
b4b174c3 5731 Keep in sync with tree.c:tree_node_kind_names. */
b7257530 5732typedef enum
5733{
5734 d_kind,
5735 t_kind,
5736 b_kind,
5737 s_kind,
5738 r_kind,
5739 e_kind,
5740 c_kind,
5741 id_kind,
b7257530 5742 vec_kind,
3cb98335 5743 binfo_kind,
4ee9c684 5744 ssa_name_kind,
c75b4594 5745 constr_kind,
b7257530 5746 x_kind,
5747 lang_decl,
5748 lang_type,
55d6e7cd 5749 omp_clause_kind,
b7257530 5750 all_kinds
5751} tree_node_kind;
5752
5753extern int tree_node_counts[];
5754extern int tree_node_sizes[];
4ee9c684 5755
5756/* True if we are in gimple form and the actions of the folders need to
5757 be restricted. False if we are not in gimple form and folding is not
5758 restricted to creating gimple expressions. */
5759extern bool in_gimple_form;
491e04ef 5760
15155321 5761/* In gimple.c. */
b04fab2a 5762extern tree get_base_address (tree t);
f639fdbf 5763extern void mark_addressable (tree);
b04fab2a 5764
bfd211a3 5765/* In tree.c. */
9af7fd5b 5766
fb1e4f4a 5767struct GTY(()) tree_map_base {
9af7fd5b 5768 tree from;
5769};
5770
5771extern int tree_map_base_eq (const void *, const void *);
5772extern unsigned int tree_map_base_hash (const void *);
5773extern int tree_map_base_marked_p (const void *);
927a6b6b 5774extern bool list_equal_p (const_tree, const_tree);
9af7fd5b 5775
5776/* Map from a tree to another tree. */
5777
fb1e4f4a 5778struct GTY(()) tree_map {
9af7fd5b 5779 struct tree_map_base base;
5ded8c6f 5780 unsigned int hash;
5ded8c6f 5781 tree to;
5782};
5783
9af7fd5b 5784#define tree_map_eq tree_map_base_eq
5ded8c6f 5785extern unsigned int tree_map_hash (const void *);
9af7fd5b 5786#define tree_map_marked_p tree_map_base_marked_p
5787
cc194b6e 5788/* Map from a decl tree to another tree. */
5789
5790struct GTY(()) tree_decl_map {
5791 struct tree_map_base base;
5792 tree to;
5793};
5794
5795#define tree_decl_map_eq tree_map_base_eq
5796extern unsigned int tree_decl_map_hash (const void *);
5797#define tree_decl_map_marked_p tree_map_base_marked_p
5798
9af7fd5b 5799/* Map from a tree to an int. */
5ded8c6f 5800
fb1e4f4a 5801struct GTY(()) tree_int_map {
9af7fd5b 5802 struct tree_map_base base;
bfd211a3 5803 unsigned int to;
5804};
5805
9af7fd5b 5806#define tree_int_map_eq tree_map_base_eq
5807#define tree_int_map_hash tree_map_base_hash
5808#define tree_int_map_marked_p tree_map_base_marked_p
5809
5810/* Map from a tree to initialization/finalization priorities. */
5811
fb1e4f4a 5812struct GTY(()) tree_priority_map {
9af7fd5b 5813 struct tree_map_base base;
5814 priority_type init;
5815 priority_type fini;
5816};
5817
5818#define tree_priority_map_eq tree_map_base_eq
5819#define tree_priority_map_hash tree_map_base_hash
5820#define tree_priority_map_marked_p tree_map_base_marked_p
bfd211a3 5821
841424cc 5822/* Map from a decl tree to a tree vector. */
5823
5824struct GTY(()) tree_vec_map {
5825 struct tree_map_base base;
5826 VEC(tree,gc) *to;
5827};
5828
5829#define tree_vec_map_eq tree_map_base_eq
5830#define tree_vec_map_hash tree_decl_map_hash
5831#define tree_vec_map_marked_p tree_map_base_marked_p
5832
9845d120 5833/* In tree-ssa.c */
5834
5835tree target_for_debug_bind (tree);
5836
aed164c3 5837/* In tree-ssa-address.c. */
5838extern tree tree_mem_ref_addr (tree, tree);
5839extern void copy_mem_ref_info (tree, tree);
74fcb726 5840extern void copy_ref_info (tree, tree);
aed164c3 5841
8dbf774a 5842/* In tree-vrp.c */
9f627b1a 5843extern bool ssa_name_nonnegative_p (const_tree);
8dbf774a 5844
0a39fd54 5845/* In tree-object-size.c. */
5846extern void init_object_sizes (void);
5847extern void fini_object_sizes (void);
5848extern unsigned HOST_WIDE_INT compute_builtin_object_size (tree, int);
5849
516849c7 5850/* In expr.c. */
b7bf20db 5851extern unsigned HOST_WIDE_INT highest_pow2_factor (const_tree);
58d82cd0 5852extern tree build_personality_function (const char *);
516849c7 5853
4c0315d0 5854/* In trans-mem.c. */
5855extern tree build_tm_abort_call (location_t, bool);
5856extern bool is_tm_safe (const_tree);
5857extern bool is_tm_pure (const_tree);
5858extern bool is_tm_may_cancel_outer (tree);
5859extern bool is_tm_ending_fndecl (tree);
5860extern void record_tm_replacement (tree, tree);
5861extern void tm_malloc_replacement (tree);
5862
5863static inline bool
5864is_tm_safe_or_pure (const_tree x)
5865{
5866 return is_tm_safe (x) || is_tm_pure (x);
5867}
5868
bc8bb825 5869/* In tree-inline.c. */
5870
5871void init_inline_once (void);
5872
48e1416a 5873/* Compute the number of operands in an expression node NODE. For
c2f47e15 5874 tcc_vl_exp nodes like CALL_EXPRs, this is stored in the node itself,
5875 otherwise it is looked up from the node's code. */
5876static inline int
aae87fc3 5877tree_operand_length (const_tree node)
c2f47e15 5878{
5879 if (VL_EXP_CLASS_P (node))
5880 return VL_EXP_OPERAND_LENGTH (node);
5881 else
5882 return TREE_CODE_LENGTH (TREE_CODE (node));
5883}
5884
5885/* Abstract iterators for CALL_EXPRs. These static inline definitions
5886 have to go towards the end of tree.h so that union tree_node is fully
5887 defined by this point. */
5888
5889/* Structure containing iterator state. */
a641ee36 5890typedef struct call_expr_arg_iterator_d {
c2f47e15 5891 tree t; /* the call_expr */
5892 int n; /* argument count */
5893 int i; /* next argument index */
5894} call_expr_arg_iterator;
5895
a641ee36 5896typedef struct const_call_expr_arg_iterator_d {
b7bf20db 5897 const_tree t; /* the call_expr */
5898 int n; /* argument count */
5899 int i; /* next argument index */
5900} const_call_expr_arg_iterator;
5901
c2f47e15 5902/* Initialize the abstract argument list iterator object ITER with the
5903 arguments from CALL_EXPR node EXP. */
5904static inline void
5905init_call_expr_arg_iterator (tree exp, call_expr_arg_iterator *iter)
5906{
5907 iter->t = exp;
5908 iter->n = call_expr_nargs (exp);
5909 iter->i = 0;
5910}
5911
b7bf20db 5912static inline void
5913init_const_call_expr_arg_iterator (const_tree exp, const_call_expr_arg_iterator *iter)
5914{
5915 iter->t = exp;
5916 iter->n = call_expr_nargs (exp);
5917 iter->i = 0;
5918}
5919
c2f47e15 5920/* Return the next argument from abstract argument list iterator object ITER,
5921 and advance its state. Return NULL_TREE if there are no more arguments. */
5922static inline tree
5923next_call_expr_arg (call_expr_arg_iterator *iter)
5924{
5925 tree result;
5926 if (iter->i >= iter->n)
5927 return NULL_TREE;
5928 result = CALL_EXPR_ARG (iter->t, iter->i);
5929 iter->i++;
5930 return result;
5931}
5932
b7bf20db 5933static inline const_tree
5934next_const_call_expr_arg (const_call_expr_arg_iterator *iter)
5935{
5936 const_tree result;
5937 if (iter->i >= iter->n)
5938 return NULL_TREE;
5939 result = CALL_EXPR_ARG (iter->t, iter->i);
5940 iter->i++;
5941 return result;
5942}
5943
c2f47e15 5944/* Initialize the abstract argument list iterator object ITER, then advance
5945 past and return the first argument. Useful in for expressions, e.g.
5946 for (arg = first_call_expr_arg (exp, &iter); arg;
5947 arg = next_call_expr_arg (&iter)) */
5948static inline tree
5949first_call_expr_arg (tree exp, call_expr_arg_iterator *iter)
5950{
5951 init_call_expr_arg_iterator (exp, iter);
5952 return next_call_expr_arg (iter);
5953}
5954
b7bf20db 5955static inline const_tree
5956first_const_call_expr_arg (const_tree exp, const_call_expr_arg_iterator *iter)
5957{
5958 init_const_call_expr_arg_iterator (exp, iter);
5959 return next_const_call_expr_arg (iter);
5960}
5961
c2f47e15 5962/* Test whether there are more arguments in abstract argument list iterator
5963 ITER, without changing its state. */
5964static inline bool
5965more_call_expr_args_p (const call_expr_arg_iterator *iter)
5966{
5967 return (iter->i < iter->n);
5968}
5969
b7bf20db 5970static inline bool
5971more_const_call_expr_args_p (const const_call_expr_arg_iterator *iter)
5972{
5973 return (iter->i < iter->n);
5974}
c2f47e15 5975
5976/* Iterate through each argument ARG of CALL_EXPR CALL, using variable ITER
5977 (of type call_expr_arg_iterator) to hold the iteration state. */
5978#define FOR_EACH_CALL_EXPR_ARG(arg, iter, call) \
5979 for ((arg) = first_call_expr_arg ((call), &(iter)); (arg); \
5980 (arg) = next_call_expr_arg (&(iter)))
5981
b7bf20db 5982#define FOR_EACH_CONST_CALL_EXPR_ARG(arg, iter, call) \
5983 for ((arg) = first_const_call_expr_arg ((call), &(iter)); (arg); \
5984 (arg) = next_const_call_expr_arg (&(iter)))
5985
7bfefa9d 5986/* Return true if tree node T is a language-specific node. */
5987static inline bool
5988is_lang_specific (tree t)
5989{
5990 return TREE_CODE (t) == LANG_TYPE || TREE_CODE (t) >= NUM_TREE_CODES;
5991}
5992
9b40bfbf 5993/* In gimple-low.c. */
5994extern bool block_may_fallthru (const_tree);
5995
b9a16870 5996\f
5997/* Functional interface to the builtin functions. */
5998
5999/* The builtin_info structure holds the FUNCTION_DECL of the standard builtin
6000 function, and a flag that says if the function is available implicitly, or
6001 whether the user has to code explicit calls to __builtin_<xxx>. */
6002
6003typedef struct GTY(()) builtin_info_type_d {
6004 tree decl[(int)END_BUILTINS];
6005 bool implicit_p[(int)END_BUILTINS];
6006} builtin_info_type;
6007
6008extern GTY(()) builtin_info_type builtin_info;
6009
6010/* Valid builtin number. */
6011#define BUILTIN_VALID_P(FNCODE) \
6012 (IN_RANGE ((int)FNCODE, ((int)BUILT_IN_NONE) + 1, ((int) END_BUILTINS) - 1))
6013
6014/* Return the tree node for an explicit standard builtin function or NULL. */
6015static inline tree
6016builtin_decl_explicit (enum built_in_function fncode)
6017{
6018 gcc_checking_assert (BUILTIN_VALID_P (fncode));
6019
6020 return builtin_info.decl[(size_t)fncode];
6021}
6022
6023/* Return the tree node for an implicit builtin function or NULL. */
6024static inline tree
6025builtin_decl_implicit (enum built_in_function fncode)
6026{
6027 size_t uns_fncode = (size_t)fncode;
6028 gcc_checking_assert (BUILTIN_VALID_P (fncode));
6029
6030 if (!builtin_info.implicit_p[uns_fncode])
6031 return NULL_TREE;
6032
6033 return builtin_info.decl[uns_fncode];
6034}
6035
6036/* Set explicit builtin function nodes and whether it is an implicit
6037 function. */
6038
6039static inline void
6040set_builtin_decl (enum built_in_function fncode, tree decl, bool implicit_p)
6041{
6042 size_t ufncode = (size_t)fncode;
6043
6044 gcc_checking_assert (BUILTIN_VALID_P (fncode)
6045 && (decl != NULL_TREE || !implicit_p));
6046
6047 builtin_info.decl[ufncode] = decl;
6048 builtin_info.implicit_p[ufncode] = implicit_p;
6049}
6050
6051/* Set the implicit flag for a builtin function. */
6052
6053static inline void
6054set_builtin_decl_implicit_p (enum built_in_function fncode, bool implicit_p)
6055{
6056 size_t uns_fncode = (size_t)fncode;
6057
6058 gcc_checking_assert (BUILTIN_VALID_P (fncode)
6059 && builtin_info.decl[uns_fncode] != NULL_TREE);
6060
6061 builtin_info.implicit_p[uns_fncode] = implicit_p;
6062}
6063
6064/* Return whether the standard builtin function can be used as an explicit
6065 function. */
6066
6067static inline bool
6068builtin_decl_explicit_p (enum built_in_function fncode)
6069{
6070 gcc_checking_assert (BUILTIN_VALID_P (fncode));
6071 return (builtin_info.decl[(size_t)fncode] != NULL_TREE);
6072}
6073
6074/* Return whether the standard builtin function can be used implicitly. */
6075
6076static inline bool
6077builtin_decl_implicit_p (enum built_in_function fncode)
6078{
6079 size_t uns_fncode = (size_t)fncode;
6080
6081 gcc_checking_assert (BUILTIN_VALID_P (fncode));
6082 return (builtin_info.decl[uns_fncode] != NULL_TREE
6083 && builtin_info.implicit_p[uns_fncode]);
6084}
6085
b229f760 6086#endif /* GCC_TREE_H */