]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/tree.h
2004-07-08 Joseph S. Myers <jsm@polyomino.org.uk>
[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,
9f5f9308 3 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
d72a838e 4
f12b58b3 5This file is part of GCC.
d72a838e 6
f12b58b3 7GCC is free software; you can redistribute it and/or modify it under
8the terms of the GNU General Public License as published by the Free
9Software Foundation; either version 2, or (at your option) any later
10version.
d72a838e 11
f12b58b3 12GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13WARRANTY; without even the implied warranty of MERCHANTABILITY or
14FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
15for more details.
d72a838e 16
17You should have received a copy of the GNU General Public License
f12b58b3 18along with GCC; see the file COPYING. If not, write to the Free
19Software Foundation, 59 Temple Place - Suite 330, Boston, MA
2002111-1307, USA. */
d72a838e 21
b229f760 22#ifndef GCC_TREE_H
23#define GCC_TREE_H
24
d72a838e 25#include "machmode.h"
5a8a92a0 26#include "input.h"
674b05f5 27#include "statistics.h"
d72a838e 28
b8dea3b2 29/* Codes of tree nodes */
d72a838e 30
31#define DEFTREECODE(SYM, STRING, TYPE, NARGS) SYM,
32
33enum tree_code {
34#include "tree.def"
35
4bbea254 36 LAST_AND_UNUSED_TREE_CODE /* A convenient way to get a value for
6d5a6036 37 NUM_TREE_CODES. */
d72a838e 38};
39
40#undef DEFTREECODE
41
f3c6d29a 42/* Number of language-independent tree codes. */
43#define NUM_TREE_CODES ((int) LAST_AND_UNUSED_TREE_CODE)
d72a838e 44
45/* Indexed by enum tree_code, contains a character which is
46 `<' for a comparison expression, `1', for a unary arithmetic
47 expression, `2' for a binary arithmetic expression, `e' for
48 other types of expressions, `r' for a reference, `c' for a
49 constant, `d' for a decl, `t' for a type, `s' for a statement,
50 and `x' for anything else (TREE_LIST, IDENTIFIER, etc). */
51
b4dae43c 52#define MAX_TREE_CODES 256
ab1a776d 53extern const char tree_code_type[];
b4dae43c 54#define TREE_CODE_CLASS(CODE) tree_code_type[(int) (CODE)]
d72a838e 55
0bed3869 56/* Returns nonzero iff CLASS is not the tree code of a type. */
66d12a6c 57
58#define IS_NON_TYPE_CODE_CLASS(CLASS) (strchr ("xbcdr<12se", (CLASS)) != 0)
59
f712a0dc 60/* Returns nonzero iff CLASS is the tree-code class of an
14ac2afb 61 expression. */
62
b5e4e1dc 63#define IS_EXPR_CODE_CLASS(CLASS) (strchr ("<12ers", (CLASS)) != 0)
64
65/* Returns nonzero iff NODE is an expression of some kind. */
66
67#define EXPR_P(NODE) IS_EXPR_CODE_CLASS (TREE_CODE_CLASS (TREE_CODE (NODE)))
14ac2afb 68
d72a838e 69/* Number of argument-words in each kind of tree-node. */
70
ab1a776d 71extern const unsigned char tree_code_length[];
f3c6d29a 72#define TREE_CODE_LENGTH(CODE) tree_code_length[(int) (CODE)]
d72a838e 73
74/* Names of tree components. */
75
ab1a776d 76extern const char *const tree_code_name[];
d72a838e 77\f
ab7943b9 78/* Classify which part of the compiler has defined a given builtin function.
79 Note that we assume below that this is no more than two bits. */
8305149e 80enum built_in_class
81{
82 NOT_BUILT_IN = 0,
83 BUILT_IN_FRONTEND,
84 BUILT_IN_MD,
85 BUILT_IN_NORMAL
86};
ab7943b9 87
88/* Names for the above. */
8934cb0c 89extern const char *const built_in_class_names[4];
ab7943b9 90
d72a838e 91/* Codes that identify the various built in functions
92 so that expand_call can identify them quickly. */
93
0a68165a 94#define DEF_BUILTIN(ENUM, N, C, T, LT, B, F, NA, AT, IM) ENUM,
d72a838e 95enum built_in_function
96{
4e9d90c7 97#include "builtins.def"
132bc06c 98
88b5b080 99 /* Upper bound on non-language-specific builtins. */
132bc06c 100 END_BUILTINS
d72a838e 101};
4e9d90c7 102#undef DEF_BUILTIN
ab7943b9 103
104/* Names for the above. */
8934cb0c 105extern const char *const built_in_names[(int) END_BUILTINS];
df94cd3b 106
852da3c3 107/* Helper macros for math builtins. */
108
109#define BUILTIN_EXP10_P(FN) \
110 ((FN) == BUILT_IN_EXP10 || (FN) == BUILT_IN_EXP10F || (FN) == BUILT_IN_EXP10L \
111 || (FN) == BUILT_IN_POW10 || (FN) == BUILT_IN_POW10F || (FN) == BUILT_IN_POW10L)
112
113#define BUILTIN_EXPONENT_P(FN) (BUILTIN_EXP10_P (FN) \
114 || (FN) == BUILT_IN_EXP || (FN) == BUILT_IN_EXPF || (FN) == BUILT_IN_EXPL \
115 || (FN) == BUILT_IN_EXP2 || (FN) == BUILT_IN_EXP2F || (FN) == BUILT_IN_EXP2L)
116
117#define BUILTIN_SQRT_P(FN) \
118 ((FN) == BUILT_IN_SQRT || (FN) == BUILT_IN_SQRTF || (FN) == BUILT_IN_SQRTL)
119
120#define BUILTIN_CBRT_P(FN) \
121 ((FN) == BUILT_IN_CBRT || (FN) == BUILT_IN_CBRTF || (FN) == BUILT_IN_CBRTL)
122
123#define BUILTIN_ROOT_P(FN) (BUILTIN_SQRT_P (FN) || BUILTIN_CBRT_P (FN))
124
df94cd3b 125/* An array of _DECL trees for the above. */
573aba85 126extern GTY(()) tree built_in_decls[(int) END_BUILTINS];
0a68165a 127extern GTY(()) tree implicit_built_in_decls[(int) END_BUILTINS];
d72a838e 128\f
129/* The definition of tree nodes fills the next several pages. */
130
131/* A tree node can represent a data type, a variable, an expression
132 or a statement. Each node has a TREE_CODE which says what kind of
133 thing it represents. Some common codes are:
134 INTEGER_TYPE -- represents a type of integers.
135 ARRAY_TYPE -- represents a type of pointer.
136 VAR_DECL -- represents a declared variable.
137 INTEGER_CST -- represents a constant integer value.
138 PLUS_EXPR -- represents a sum (an expression).
139
140 As for the contents of a tree node: there are some fields
141 that all nodes share. Each TREE_CODE has various special-purpose
142 fields as well. The fields of a node are never accessed directly,
143 always through accessor macros. */
144
d72a838e 145/* Every kind of tree node starts with this structure,
146 so all nodes have these fields.
147
a7baca71 148 See the accessor macros, defined below, for documentation of the
a7dce381 149 fields. */
4ee9c684 150union tree_ann_d;
d72a838e 151
1f3233d1 152struct tree_common GTY(())
d72a838e 153{
6a3e3d6d 154 tree chain;
155 tree type;
4ee9c684 156 union tree_ann_d *ann;
20f2763e 157
488c4206 158 ENUM_BITFIELD(tree_code) code : 8;
20f2763e 159
d72a838e 160 unsigned side_effects_flag : 1;
161 unsigned constant_flag : 1;
d72a838e 162 unsigned addressable_flag : 1;
163 unsigned volatile_flag : 1;
164 unsigned readonly_flag : 1;
165 unsigned unsigned_flag : 1;
166 unsigned asm_written_flag: 1;
4ee9c684 167 unsigned nowarning_flag : 1;
66d12a6c 168
4ee9c684 169 unsigned used_flag : 1;
00dd2e9e 170 unsigned nothrow_flag : 1;
d72a838e 171 unsigned static_flag : 1;
172 unsigned public_flag : 1;
173 unsigned private_flag : 1;
174 unsigned protected_flag : 1;
88da234d 175 unsigned deprecated_flag : 1;
4ee9c684 176 unsigned invariant_flag : 1;
d72a838e 177
178 unsigned lang_flag_0 : 1;
179 unsigned lang_flag_1 : 1;
180 unsigned lang_flag_2 : 1;
181 unsigned lang_flag_3 : 1;
182 unsigned lang_flag_4 : 1;
183 unsigned lang_flag_5 : 1;
184 unsigned lang_flag_6 : 1;
4ee9c684 185 unsigned visited : 1;
d72a838e 186};
187
7e787821 188/* The following table lists the uses of each of the above flags and
189 for which types of nodes they are defined. Note that expressions
190 include decls.
191
192 addressable_flag:
193
194 TREE_ADDRESSABLE in
60b8c5b3 195 VAR_DECL, FUNCTION_DECL, FIELD_DECL, CONSTRUCTOR, LABEL_DECL,
d513ec2f 196 ..._TYPE, IDENTIFIER_NODE.
197 In a STMT_EXPR, it means we want the result of the enclosed
198 expression.
4ee9c684 199 CALL_EXPR_TAILCALL in CALL_EXPR
7e787821 200
201 static_flag:
202
203 TREE_STATIC in
997d68fe 204 VAR_DECL, FUNCTION_DECL, CONSTRUCTOR, ADDR_EXPR
2cfde4f3 205 BINFO_VIRTUAL_P in
57c28194 206 TREE_BINFO
7e787821 207 TREE_CONSTANT_OVERFLOW in
886cfd4f 208 INTEGER_CST, REAL_CST, COMPLEX_CST, VECTOR_CST
7e787821 209 TREE_SYMBOL_REFERENCED in
210 IDENTIFIER_NODE
a9bc793b 211 CLEANUP_EH_ONLY in
dddab69e 212 TARGET_EXPR, WITH_CLEANUP_EXPR
4ee9c684 213 ASM_INPUT_P in
214 ASM_EXPR
215 EH_FILTER_MUST_NOT_THROW in EH_FILTER_EXPR
b24423db 216 TYPE_REF_CAN_ALIAS_ALL in
217 POINTER_TYPE, REFERENCE_TYPE
7e787821 218
219 public_flag:
220
221 TREE_OVERFLOW in
886cfd4f 222 INTEGER_CST, REAL_CST, COMPLEX_CST, VECTOR_CST
b24423db 223 ??? and other expressions?
7e787821 224 TREE_PUBLIC in
1e5bfc66 225 VAR_DECL or FUNCTION_DECL or IDENTIFIER_NODE
4ee9c684 226 TREE_VIA_PUBLIC in
227 TREE_LIST or TREE_VEC
228 ASM_VOLATILE_P in
229 ASM_EXPR
7e787821 230
231 private_flag:
232
7e787821 233 TREE_PRIVATE in
a9bc793b 234 ..._DECL
805e22b2 235 CALL_EXPR_HAS_RETURN_SLOT_ADDR in
236 CALL_EXPR
7e787821 237
238 protected_flag:
239
7e787821 240 TREE_PROTECTED in
241 BLOCK
a9bc793b 242 ..._DECL
eaa112a0 243 CALL_FROM_THUNK_P in
244 CALL_EXPR
7e787821 245
246 side_effects_flag:
247
248 TREE_SIDE_EFFECTS in
249 all expressions
66d12a6c 250 all decls
251 all constants
7e787821 252
4ee9c684 253 FORCED_LABEL in
254 LABEL_DECL
255
7e787821 256 volatile_flag:
257
258 TREE_THIS_VOLATILE in
259 all expressions
260 TYPE_VOLATILE in
261 ..._TYPE
262
263 readonly_flag:
264
265 TREE_READONLY in
997d68fe 266 all expressions
7e787821 267 TYPE_READONLY in
268 ..._TYPE
269
270 constant_flag:
271
272 TREE_CONSTANT in
273 all expressions
66d12a6c 274 all decls
275 all constants
7e787821 276
7e787821 277 unsigned_flag:
278
78a8ed03 279 TYPE_UNSIGNED in
280 all types
86ae60fd 281 DECL_UNSIGNED in
282 all decls
283 BIT_FIELD_REF_UNSIGNED in
284 BIT_FIELD_REF
7e787821 285
286 asm_written_flag:
287
288 TREE_ASM_WRITTEN in
289 VAR_DECL, FUNCTION_DECL, RECORD_TYPE, UNION_TYPE, QUAL_UNION_TYPE
4ee9c684 290 BLOCK, SSA_NAME
7e787821 291
292 used_flag:
293
294 TREE_USED in
295 expressions, IDENTIFIER_NODE
296
00dd2e9e 297 nothrow_flag:
7e787821 298
00dd2e9e 299 TREE_NOTHROW in
300 CALL_EXPR, FUNCTION_DECL
7e787821 301
9f5f9308 302 TYPE_ALIGN_OK in
303 ..._TYPE
304
010d0641 305 TREE_THIS_NOTRAP in
306 INDIRECT_REF
307
88da234d 308 deprecated_flag:
309
310 TREE_DEPRECATED in
311 ..._DECL
eaa112a0 312
4ee9c684 313 visited:
314
315 Used in tree traversals to mark visited nodes.
316
317 invariant_flag:
318
319 TREE_INVARIANT in
320 all expressions.
321
322 nowarning_flag:
323
324 TREE_NO_WARNING in
325 ... any expr node
88da234d 326*/
716fc477 327
d72a838e 328/* Define accessors for the fields that all tree nodes have
329 (though some fields are not used for all kinds of nodes). */
330
331/* The tree-code says what kind of node it is.
332 Codes are defined in tree.def. */
333#define TREE_CODE(NODE) ((enum tree_code) (NODE)->common.code)
2aea9e36 334#define TREE_SET_CODE(NODE, VALUE) ((NODE)->common.code = (VALUE))
d72a838e 335
3e207e38 336/* When checking is enabled, errors will be generated if a tree node
a4070a91 337 is accessed incorrectly. The macros abort with a fatal error. */
0c4e40c5 338#if defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 2007)
3e207e38 339
5e674ace 340#define TREE_CHECK(T, CODE) __extension__ \
341({ const tree __t = (T); \
342 if (TREE_CODE (__t) != (CODE)) \
36066e37 343 tree_check_failed (__t, __FILE__, __LINE__, __FUNCTION__, \
344 (CODE), 0); \
345 __t; })
346
347#define TREE_NOT_CHECK(T, CODE) __extension__ \
348({ const tree __t = (T); \
349 if (TREE_CODE (__t) == (CODE)) \
350 tree_not_check_failed (__t, __FILE__, __LINE__, __FUNCTION__, \
351 (CODE), 0); \
a4070a91 352 __t; })
5e674ace 353
82bb2115 354#define TREE_CHECK2(T, CODE1, CODE2) __extension__ \
355({ const tree __t = (T); \
356 if (TREE_CODE (__t) != (CODE1) \
357 && TREE_CODE (__t) != (CODE2)) \
36066e37 358 tree_check_failed (__t, __FILE__, __LINE__, __FUNCTION__, \
359 (CODE1), (CODE2), 0); \
360 __t; })
361
362#define TREE_NOT_CHECK2(T, CODE1, CODE2) __extension__ \
363({ const tree __t = (T); \
364 if (TREE_CODE (__t) == (CODE1) \
365 || TREE_CODE (__t) == (CODE2)) \
366 tree_not_check_failed (__t, __FILE__, __LINE__, __FUNCTION__, \
367 (CODE1), (CODE2), 0); \
82bb2115 368 __t; })
369
370#define TREE_CHECK3(T, CODE1, CODE2, CODE3) __extension__ \
371({ const tree __t = (T); \
372 if (TREE_CODE (__t) != (CODE1) \
373 && TREE_CODE (__t) != (CODE2) \
374 && TREE_CODE (__t) != (CODE3)) \
36066e37 375 tree_check_failed (__t, __FILE__, __LINE__, __FUNCTION__, \
376 (CODE1), (CODE2), (CODE3), 0); \
377 __t; })
378
379#define TREE_NOT_CHECK3(T, CODE1, CODE2, CODE3) __extension__ \
380({ const tree __t = (T); \
381 if (TREE_CODE (__t) == (CODE1) \
382 || TREE_CODE (__t) == (CODE2) \
383 || TREE_CODE (__t) == (CODE3)) \
384 tree_not_check_failed (__t, __FILE__, __LINE__, __FUNCTION__, \
385 (CODE1), (CODE2), (CODE3), 0); \
82bb2115 386 __t; })
387
b24423db 388#define TREE_CHECK4(T, CODE1, CODE2, CODE3, CODE4) __extension__ \
389({ const tree __t = (T); \
390 if (TREE_CODE (__t) != (CODE1) \
391 && TREE_CODE (__t) != (CODE2) \
392 && TREE_CODE (__t) != (CODE3) \
393 && TREE_CODE (__t) != (CODE4)) \
36066e37 394 tree_check_failed (__t, __FILE__, __LINE__, __FUNCTION__, \
395 (CODE1), (CODE2), (CODE3), (CODE4), 0); \
396 __t; })
397
398#define NON_TREE_CHECK4(T, CODE1, CODE2, CODE3, CODE4) __extension__ \
399({ const tree __t = (T); \
400 if (TREE_CODE (__t) == (CODE1) \
401 || TREE_CODE (__t) == (CODE2) \
402 || TREE_CODE (__t) == (CODE3) \
403 || TREE_CODE (__t) == (CODE4)) \
404 tree_not_check_failed (__t, __FILE__, __LINE__, __FUNCTION__, \
405 (CODE1), (CODE2), (CODE3), (CODE4), 0); \
b24423db 406 __t; })
407
82bb2115 408#define TREE_CHECK5(T, CODE1, CODE2, CODE3, CODE4, CODE5) __extension__ \
409({ const tree __t = (T); \
410 if (TREE_CODE (__t) != (CODE1) \
411 && TREE_CODE (__t) != (CODE2) \
412 && TREE_CODE (__t) != (CODE3) \
413 && TREE_CODE (__t) != (CODE4) \
414 && TREE_CODE (__t) != (CODE5)) \
36066e37 415 tree_check_failed (__t, __FILE__, __LINE__, __FUNCTION__, \
416 (CODE1), (CODE2), (CODE3), (CODE4), (CODE5), 0);\
417 __t; })
418
419#define TREE_NOT_CHECK5(T, CODE1, CODE2, CODE3, CODE4, CODE5) __extension__ \
420({ const tree __t = (T); \
421 if (TREE_CODE (__t) == (CODE1) \
422 || TREE_CODE (__t) == (CODE2) \
423 || TREE_CODE (__t) == (CODE3) \
424 || TREE_CODE (__t) == (CODE4) \
425 || TREE_CODE (__t) == (CODE5)) \
426 tree_not_check_failed (__t, __FILE__, __LINE__, __FUNCTION__, \
427 (CODE1), (CODE2), (CODE3), (CODE4), (CODE5), 0);\
82bb2115 428 __t; })
429
5e674ace 430#define TREE_CLASS_CHECK(T, CLASS) __extension__ \
431({ const tree __t = (T); \
432 if (TREE_CODE_CLASS (TREE_CODE(__t)) != (CLASS)) \
433 tree_class_check_failed (__t, (CLASS), __FILE__, __LINE__, \
76c6f48d 434 __FUNCTION__); \
a4070a91 435 __t; })
436
437/* These checks have to be special cased. */
5e674ace 438#define EXPR_CHECK(T) __extension__ \
439({ const tree __t = (T); \
440 char const __c = TREE_CODE_CLASS (TREE_CODE (__t)); \
47549347 441 if (!IS_EXPR_CODE_CLASS (__c)) \
66d12a6c 442 tree_class_check_failed (__t, 'E', __FILE__, __LINE__, \
443 __FUNCTION__); \
444 __t; })
445
446/* These checks have to be special cased. */
447#define NON_TYPE_CHECK(T) __extension__ \
448({ const tree __t = (T); \
449 char const __c = TREE_CODE_CLASS (TREE_CODE (__t)); \
450 if (!IS_NON_TYPE_CODE_CLASS (__c)) \
451 tree_class_check_failed (__t, 'T', __FILE__, __LINE__, \
76c6f48d 452 __FUNCTION__); \
a4070a91 453 __t; })
454
5e674ace 455#define TREE_VEC_ELT_CHECK(T, I) __extension__ \
456(*({const tree __t = (T); \
457 const int __i = (I); \
66bc87db 458 if (TREE_CODE (__t) != TREE_VEC) \
36066e37 459 tree_check_failed (__t, __FILE__, __LINE__, __FUNCTION__, \
460 TREE_VEC, 0); \
66bc87db 461 if (__i < 0 || __i >= __t->vec.length) \
462 tree_vec_elt_check_failed (__i, __t->vec.length, \
463 __FILE__, __LINE__, __FUNCTION__); \
464 &__t->vec.a[__i]; }))
465
4ee9c684 466#define PHI_NODE_ELT_CHECK(t, i) __extension__ \
467(*({const tree __t = t; \
468 const int __i = (i); \
469 if (TREE_CODE (__t) != PHI_NODE) \
36066e37 470 tree_check_failed (__t, __FILE__, __LINE__, __FUNCTION__, \
471 PHI_NODE, 0); \
4ee9c684 472 if (__i < 0 || __i >= __t->phi.capacity) \
473 phi_node_elt_check_failed (__i, __t->phi.num_args, \
474 __FILE__, __LINE__, __FUNCTION__); \
475 &__t->phi.a[__i]; }))
476
2fcde217 477/* Special checks for TREE_OPERANDs. */
5e674ace 478#define TREE_OPERAND_CHECK(T, I) __extension__ \
acdc09d1 479(*({const tree __t = EXPR_CHECK (T); \
5e674ace 480 const int __i = (I); \
2fcde217 481 if (__i < 0 || __i >= TREE_CODE_LENGTH (TREE_CODE (__t))) \
482 tree_operand_check_failed (__i, TREE_CODE (__t), \
483 __FILE__, __LINE__, __FUNCTION__); \
484 &__t->exp.operands[__i]; }))
485
5e674ace 486#define TREE_OPERAND_CHECK_CODE(T, CODE, I) __extension__ \
487(*({const tree __t = (T); \
488 const int __i = (I); \
489 if (TREE_CODE (__t) != CODE) \
36066e37 490 tree_check_failed (__t, __FILE__, __LINE__, __FUNCTION__, (CODE), 0);\
5e674ace 491 if (__i < 0 || __i >= TREE_CODE_LENGTH (CODE)) \
492 tree_operand_check_failed (__i, (CODE), \
2fcde217 493 __FILE__, __LINE__, __FUNCTION__); \
494 &__t->exp.operands[__i]; }))
495
5e674ace 496#define TREE_RTL_OPERAND_CHECK(T, CODE, I) __extension__ \
2fcde217 497(*(rtx *) \
5e674ace 498 ({const tree __t = (T); \
499 const int __i = (I); \
500 if (TREE_CODE (__t) != (CODE)) \
36066e37 501 tree_check_failed (__t, __FILE__, __LINE__, __FUNCTION__, (CODE), 0); \
5e674ace 502 if (__i < 0 || __i >= TREE_CODE_LENGTH ((CODE))) \
503 tree_operand_check_failed (__i, (CODE), \
2fcde217 504 __FILE__, __LINE__, __FUNCTION__); \
505 &__t->exp.operands[__i]; }))
506
36066e37 507extern void tree_check_failed (const tree, const char *, int, const char *,
508 ...) ATTRIBUTE_NORETURN;
509extern void tree_not_check_failed (const tree, const char *, int, const char *,
510 ...) ATTRIBUTE_NORETURN;
60b8c5b3 511extern void tree_class_check_failed (const tree, int,
512 const char *, int, const char *)
a4070a91 513 ATTRIBUTE_NORETURN;
60b8c5b3 514extern void tree_vec_elt_check_failed (int, int, const char *,
515 int, const char *)
66bc87db 516 ATTRIBUTE_NORETURN;
4ee9c684 517extern void phi_node_elt_check_failed (int, int, const char *,
518 int, const char *)
519 ATTRIBUTE_NORETURN;
60b8c5b3 520extern void tree_operand_check_failed (int, enum tree_code,
521 const char *, int, const char *)
2fcde217 522 ATTRIBUTE_NORETURN;
60b8c5b3 523
0c4e40c5 524#else /* not ENABLE_TREE_CHECKING, or not gcc */
3e207e38 525
82bb2115 526#define TREE_CHECK(T, CODE) (T)
36066e37 527#define TREE_NOT_CHECK(T, CODE) (T)
82bb2115 528#define TREE_CHECK2(T, CODE1, CODE2) (T)
36066e37 529#define TREE_NOT_CHECK2(T, CODE1, CODE2) (T)
82bb2115 530#define TREE_CHECK3(T, CODE1, CODE2, CODE3) (T)
36066e37 531#define TREE_NOT_CHECK3(T, CODE1, CODE2, CODE3) (T)
b24423db 532#define TREE_CHECK4(T, CODE1, CODE2, CODE3, CODE4) (T)
36066e37 533#define TREE_NOT_CHECK4(T, CODE1, CODE2, CODE3, CODE4) (T)
82bb2115 534#define TREE_CHECK5(T, CODE1, CODE2, CODE3, CODE4, CODE5) (T)
36066e37 535#define TREE_NOT_CHECK5(T, CODE1, CODE2, CODE3, CODE4, CODE5) (T)
82bb2115 536#define TREE_CLASS_CHECK(T, CODE) (T)
537#define EXPR_CHECK(T) (T)
66d12a6c 538#define NON_TYPE_CHECK(T) (T)
82bb2115 539#define TREE_VEC_ELT_CHECK(T, I) ((T)->vec.a[I])
540#define TREE_OPERAND_CHECK(T, I) ((T)->exp.operands[I])
541#define TREE_OPERAND_CHECK_CODE(T, CODE, I) ((T)->exp.operands[I])
5e674ace 542#define TREE_RTL_OPERAND_CHECK(T, CODE, I) (*(rtx *) &((T)->exp.operands[I]))
4ee9c684 543#define PHI_NODE_ELT_CHECK(T, i) ((T)->phi.a[i])
a4070a91 544
545#endif
546
4ee9c684 547#define TREE_BLOCK(NODE) ((NODE)->exp.block)
548
a4070a91 549#include "tree-check.h"
550
5e674ace 551#define TYPE_CHECK(T) TREE_CLASS_CHECK (T, 't')
552#define DECL_CHECK(T) TREE_CLASS_CHECK (T, 'd')
553#define CST_CHECK(T) TREE_CLASS_CHECK (T, 'c')
554#define STMT_CHECK(T) TREE_CLASS_CHECK (T, 's')
82bb2115 555#define FUNC_OR_METHOD_CHECK(T) TREE_CHECK2 (T, FUNCTION_TYPE, METHOD_TYPE)
b24423db 556#define PTR_OR_REF_CHECK(T) TREE_CHECK2 (T, POINTER_TYPE, REFERENCE_TYPE)
82bb2115 557
49be8259 558#define SET_OR_ARRAY_CHECK(T) \
559 TREE_CHECK2 (T, ARRAY_TYPE, SET_TYPE)
82bb2115 560
3cb98335 561#define RECORD_OR_UNION_CHECK(T) \
82bb2115 562 TREE_CHECK3 (T, RECORD_TYPE, UNION_TYPE, QUAL_UNION_TYPE)
3cb98335 563#define NOT_RECORD_OR_UNION_CHECK(T) \
564 TREE_NOT_CHECK3 (T, RECORD_TYPE, UNION_TYPE, QUAL_UNION_TYPE)
565
82bb2115 566#define NUMERICAL_TYPE_CHECK(T) \
567 TREE_CHECK5 (T, INTEGER_TYPE, ENUMERAL_TYPE, BOOLEAN_TYPE, \
568 CHAR_TYPE, REAL_TYPE)
3e207e38 569
d72a838e 570/* In all nodes that are expressions, this is the data type of the expression.
571 In POINTER_TYPE nodes, this is the type that the pointer points to.
8a95ab85 572 In ARRAY_TYPE nodes, this is the type of the elements.
573 In VECTOR_TYPE nodes, this is the type of the elements. */
d72a838e 574#define TREE_TYPE(NODE) ((NODE)->common.type)
575
3609f4f0 576/* Here is how primitive or already-canonicalized types' hash codes
577 are made. */
908e5f41 578#define TYPE_HASH(TYPE) (TYPE_UID (TYPE))
579
580/* A simple hash function for an arbitrary tree node. This must not be
581 used in hash tables which are saved to a PCH. */
582#define TREE_HASH(NODE) ((size_t) (NODE) & 0777777)
3609f4f0 583
d72a838e 584/* Nodes are chained together for many purposes.
585 Types are chained together to record them for being output to the debugger
586 (see the function `chain_type').
587 Decls in the same scope are chained together to record the contents
588 of the scope.
589 Statement nodes for successive statements used to be chained together.
590 Often lists of things are represented by TREE_LIST nodes that
591 are chained together. */
592
593#define TREE_CHAIN(NODE) ((NODE)->common.chain)
594
595/* Given an expression as a tree, strip any NON_LVALUE_EXPRs and NOP_EXPRs
596 that don't change the machine mode. */
597
bdcbc557 598#define STRIP_NOPS(EXP) \
d72a838e 599 while ((TREE_CODE (EXP) == NOP_EXPR \
600 || TREE_CODE (EXP) == CONVERT_EXPR \
601 || TREE_CODE (EXP) == NON_LVALUE_EXPR) \
bdcbc557 602 && TREE_OPERAND (EXP, 0) != error_mark_node \
d72a838e 603 && (TYPE_MODE (TREE_TYPE (EXP)) \
604 == TYPE_MODE (TREE_TYPE (TREE_OPERAND (EXP, 0))))) \
7ec74242 605 (EXP) = TREE_OPERAND (EXP, 0)
f2bfbd07 606
155b05dc 607/* Like STRIP_NOPS, but don't let the signedness change either. */
608
609#define STRIP_SIGN_NOPS(EXP) \
610 while ((TREE_CODE (EXP) == NOP_EXPR \
611 || TREE_CODE (EXP) == CONVERT_EXPR \
612 || TREE_CODE (EXP) == NON_LVALUE_EXPR) \
bdcbc557 613 && TREE_OPERAND (EXP, 0) != error_mark_node \
155b05dc 614 && (TYPE_MODE (TREE_TYPE (EXP)) \
615 == TYPE_MODE (TREE_TYPE (TREE_OPERAND (EXP, 0)))) \
78a8ed03 616 && (TYPE_UNSIGNED (TREE_TYPE (EXP)) \
617 == TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (EXP, 0))))) \
7ec74242 618 (EXP) = TREE_OPERAND (EXP, 0)
155b05dc 619
10f6a269 620/* Like STRIP_NOPS, but don't alter the TREE_TYPE main variant either. */
621
622#define STRIP_MAIN_TYPE_NOPS(EXP) \
623 while ((TREE_CODE (EXP) == NOP_EXPR \
624 || TREE_CODE (EXP) == CONVERT_EXPR \
625 || TREE_CODE (EXP) == NON_LVALUE_EXPR) \
626 && TREE_OPERAND (EXP, 0) != error_mark_node \
627 && (TYPE_MAIN_VARIANT (TREE_TYPE (EXP)) \
628 == TYPE_MAIN_VARIANT (TREE_TYPE (TREE_OPERAND (EXP, 0))))) \
629 (EXP) = TREE_OPERAND (EXP, 0)
630
f2bfbd07 631/* Like STRIP_NOPS, but don't alter the TREE_TYPE either. */
632
633#define STRIP_TYPE_NOPS(EXP) \
634 while ((TREE_CODE (EXP) == NOP_EXPR \
635 || TREE_CODE (EXP) == CONVERT_EXPR \
636 || TREE_CODE (EXP) == NON_LVALUE_EXPR) \
bdcbc557 637 && TREE_OPERAND (EXP, 0) != error_mark_node \
f2bfbd07 638 && (TREE_TYPE (EXP) \
639 == TREE_TYPE (TREE_OPERAND (EXP, 0)))) \
7ec74242 640 (EXP) = TREE_OPERAND (EXP, 0)
ffcb8a96 641
4ee9c684 642/* Remove unnecessary type conversions according to
643 tree_ssa_useless_type_conversion. */
644
645#define STRIP_USELESS_TYPE_CONVERSION(EXP) \
646 while (tree_ssa_useless_type_conversion (EXP)) \
647 EXP = TREE_OPERAND (EXP, 0)
648
ffcb8a96 649/* Nonzero if TYPE represents an integral type. Note that we do not
650 include COMPLEX types here. */
651
652#define INTEGRAL_TYPE_P(TYPE) \
653 (TREE_CODE (TYPE) == INTEGER_TYPE || TREE_CODE (TYPE) == ENUMERAL_TYPE \
654 || TREE_CODE (TYPE) == BOOLEAN_TYPE || TREE_CODE (TYPE) == CHAR_TYPE)
655
4b69983d 656/* Nonzero if TYPE represents a scalar floating-point type. */
657
658#define SCALAR_FLOAT_TYPE_P(TYPE) (TREE_CODE (TYPE) == REAL_TYPE)
659
660/* Nonzero if TYPE represents a complex floating-point type. */
661
662#define COMPLEX_FLOAT_TYPE_P(TYPE) \
663 (TREE_CODE (TYPE) == COMPLEX_TYPE \
664 && TREE_CODE (TREE_TYPE (TYPE)) == REAL_TYPE)
665
ffcb8a96 666/* Nonzero if TYPE represents a floating-point type, including complex
667 floating-point types. */
668
669#define FLOAT_TYPE_P(TYPE) \
4b69983d 670 (SCALAR_FLOAT_TYPE_P (TYPE) || COMPLEX_FLOAT_TYPE_P (TYPE))
68db3216 671
88b5b080 672/* Nonzero if TYPE represents an aggregate (multi-component) type. */
68db3216 673
674#define AGGREGATE_TYPE_P(TYPE) \
675 (TREE_CODE (TYPE) == ARRAY_TYPE || TREE_CODE (TYPE) == RECORD_TYPE \
676 || TREE_CODE (TYPE) == UNION_TYPE || TREE_CODE (TYPE) == QUAL_UNION_TYPE \
677 || TREE_CODE (TYPE) == SET_TYPE)
e57949ab 678
1c15359d 679/* Nonzero if TYPE represents a pointer or reference type.
680 (It should be renamed to INDIRECT_TYPE_P.) */
e57949ab 681
682#define POINTER_TYPE_P(TYPE) \
683 (TREE_CODE (TYPE) == POINTER_TYPE || TREE_CODE (TYPE) == REFERENCE_TYPE)
1071e86e 684
4b72716d 685/* Nonzero if this type is a complete type. */
686#define COMPLETE_TYPE_P(NODE) (TYPE_SIZE (NODE) != NULL_TREE)
687
5c803577 688/* Nonzero if this type is the (possibly qualified) void type. */
c92b3a11 689#define VOID_TYPE_P(NODE) (TREE_CODE (NODE) == VOID_TYPE)
5c803577 690
4b72716d 691/* Nonzero if this type is complete or is cv void. */
692#define COMPLETE_OR_VOID_TYPE_P(NODE) \
56ba46a4 693 (COMPLETE_TYPE_P (NODE) || VOID_TYPE_P (NODE))
4b72716d 694
695/* Nonzero if this type is complete or is an array with unspecified bound. */
696#define COMPLETE_OR_UNBOUND_ARRAY_TYPE_P(NODE) \
7ec74242 697 (COMPLETE_TYPE_P (TREE_CODE (NODE) == ARRAY_TYPE ? TREE_TYPE (NODE) : (NODE)))
4b72716d 698
1071e86e 699/* Nonzero if TYPE represents a type. */
700
701#define TYPE_P(TYPE) (TREE_CODE_CLASS (TREE_CODE (TYPE)) == 't')
d72a838e 702\f
703/* Define many boolean fields that all tree nodes have. */
704
705/* In VAR_DECL nodes, nonzero means address of this is needed.
706 So it cannot be in a register.
707 In a FUNCTION_DECL, nonzero means its address is needed.
708 So it must be compiled even if it is an inline function.
cec9f9b5 709 In a FIELD_DECL node, it means that the programmer is permitted to
710 construct the address of this field. This is used for aliasing
711 purposes: see record_component_aliases.
d72a838e 712 In CONSTRUCTOR nodes, it means object constructed must be in memory.
6c34d0c2 713 In LABEL_DECL nodes, it means a goto for this label has been seen
d72a838e 714 from a place outside all binding contours that restore stack levels.
715 In ..._TYPE nodes, it means that objects of this type must
716 be fully addressable. This means that pieces of this
717 object cannot go into register parameters, for example.
718 In IDENTIFIER_NODEs, this means that some extern decl for this name
719 had its address taken. That matters for inline functions. */
720#define TREE_ADDRESSABLE(NODE) ((NODE)->common.addressable_flag)
721
4ee9c684 722#define CALL_EXPR_TAILCALL(NODE) (CALL_EXPR_CHECK(NODE)->common.addressable_flag)
723
d72a838e 724/* In a VAR_DECL, nonzero means allocate static storage.
bc3a4bfd 725 In a FUNCTION_DECL, nonzero if function has been defined.
b24423db 726 In a CONSTRUCTOR, nonzero means allocate static storage.
727
728 ??? This is also used in lots of other nodes in unclear ways which
729 should be cleaned up some day. */
d72a838e 730#define TREE_STATIC(NODE) ((NODE)->common.static_flag)
731
dddab69e 732/* In a TARGET_EXPR, WITH_CLEANUP_EXPR, means that the pertinent cleanup
733 should only be executed if an exception is thrown, not on normal exit
734 of its scope. */
a9bc793b 735#define CLEANUP_EH_ONLY(NODE) ((NODE)->common.static_flag)
736
4ee9c684 737/* In an expr node (usually a conversion) this means the node was made
738 implicitly and should not lead to any sort of warning. */
739#define TREE_NO_WARNING(NODE) ((NODE)->common.nowarning_flag)
d72a838e 740
886cfd4f 741/* In an INTEGER_CST, REAL_CST, COMPLEX_CST, or VECTOR_CST this means
742 there was an overflow in folding. This is distinct from
743 TREE_OVERFLOW because ANSI C requires a diagnostic when overflows
744 occur in constant expressions. */
b24423db 745#define TREE_CONSTANT_OVERFLOW(NODE) (CST_CHECK (NODE)->common.static_flag)
7eec364c 746
2cf6f20a 747/* In an IDENTIFIER_NODE, this means that assemble_name was called with
748 this string as an argument. */
56ba46a4 749#define TREE_SYMBOL_REFERENCED(NODE) \
76c6f48d 750 (IDENTIFIER_NODE_CHECK (NODE)->common.static_flag)
2cf6f20a 751
b24423db 752/* Nonzero in a pointer or reference type means the data pointed to
753 by this type can alias anything. */
754#define TYPE_REF_CAN_ALIAS_ALL(NODE) \
755 (PTR_OR_REF_CHECK (NODE)->common.static_flag)
756
886cfd4f 757/* In an INTEGER_CST, REAL_CST, COMPLEX_CST, or VECTOR_CST, this means
758 there was an overflow in folding, and no warning has been issued
b24423db 759 for this subexpression. TREE_OVERFLOW implies TREE_CONSTANT_OVERFLOW,
760 but not vice versa.
761
762 ??? Apparently, lots of code assumes this is defined in all
763 expressions. */
7eec364c 764#define TREE_OVERFLOW(NODE) ((NODE)->common.public_flag)
765
d72a838e 766/* In a VAR_DECL or FUNCTION_DECL,
767 nonzero means name is to be accessible from outside this module.
1e5bfc66 768 In an IDENTIFIER_NODE, nonzero means an external declaration
4bbea254 769 accessible from outside this module was previously seen
d72a838e 770 for this name in an inner scope. */
771#define TREE_PUBLIC(NODE) ((NODE)->common.public_flag)
772
66d12a6c 773/* In any expression, decl, or constant, nonzero means it has side effects or
774 reevaluation of the whole expression could produce a different value.
775 This is set if any subexpression is a function call, a side effect or a
776 reference to a volatile variable. In a ..._DECL, this is set only if the
777 declaration said `volatile'. This will never be set for a constant. */
778#define TREE_SIDE_EFFECTS(NODE) \
779 (NON_TYPE_CHECK (NODE)->common.side_effects_flag)
d72a838e 780
4ee9c684 781/* In a LABEL_DECL, nonzero means this label had its address taken
782 and therefore can never be deleted and is a jump target for
783 computed gotos. */
784#define FORCED_LABEL(NODE) ((NODE)->common.side_effects_flag)
785
d72a838e 786/* Nonzero means this expression is volatile in the C sense:
787 its address should be of type `volatile WHATEVER *'.
788 In other words, the declared item is volatile qualified.
789 This is used in _DECL nodes and _REF nodes.
790
791 In a ..._TYPE node, means this type is volatile-qualified.
792 But use TYPE_VOLATILE instead of this macro when the node is a type,
793 because eventually we may make that a different bit.
794
795 If this bit is set in an expression, so is TREE_SIDE_EFFECTS. */
796#define TREE_THIS_VOLATILE(NODE) ((NODE)->common.volatile_flag)
797
010d0641 798/* Nonzero means this node will not trap. In an INDIRECT_REF, means
799 accessing the memory pointed to won't generate a trap. However,
800 this only applies to an object when used appropriately: it doesn't
801 mean that writing a READONLY mem won't trap. */
802#define TREE_THIS_NOTRAP(NODE) ((NODE)->common.nothrow_flag)
803
d72a838e 804/* In a VAR_DECL, PARM_DECL or FIELD_DECL, or any kind of ..._REF node,
66d12a6c 805 nonzero means it may not be the lhs of an assignment. */
806#define TREE_READONLY(NODE) (NON_TYPE_CHECK (NODE)->common.readonly_flag)
d72a838e 807
a8b24921 808/* Nonzero if NODE is a _DECL with TREE_READONLY set. */
66d12a6c 809#define TREE_READONLY_DECL_P(NODE) (DECL_P (NODE) && TREE_READONLY (NODE))
1431bff6 810
66d12a6c 811/* Value of expression is constant. Always on in all ..._CST nodes. May
812 also appear in an expression or decl where the value is constant. */
813#define TREE_CONSTANT(NODE) (NON_TYPE_CHECK (NODE)->common.constant_flag)
d72a838e 814
86ae60fd 815/* In a decl (most significantly a FIELD_DECL), means an unsigned field. */
816#define DECL_UNSIGNED(NODE) (DECL_CHECK (NODE)->common.unsigned_flag)
817
818/* In a BIT_FIELD_REF, means the bitfield is to be interpreted as unsigned. */
819#define BIT_FIELD_REF_UNSIGNED(NODE) \
820 (BIT_FIELD_REF_CHECK (NODE)->common.unsigned_flag)
d72a838e 821
78a8ed03 822/* In integral and pointer types, means an unsigned type. */
823#define TYPE_UNSIGNED(NODE) (TYPE_CHECK (NODE)->common.unsigned_flag)
824
56ba46a4 825#define TYPE_TRAP_SIGNED(NODE) \
78a8ed03 826 (flag_trapv && ! TYPE_UNSIGNED (NODE))
bec2d490 827
d72a838e 828/* Nonzero in a VAR_DECL means assembler code has been written.
829 Nonzero in a FUNCTION_DECL means that the function has been compiled.
830 This is interesting in an inline function, since it might not need
831 to be compiled separately.
7dd9d898 832 Nonzero in a RECORD_TYPE, UNION_TYPE, QUAL_UNION_TYPE or ENUMERAL_TYPE
bc3a4bfd 833 if the sdb debugging info for the type has been written.
4ee9c684 834 In a BLOCK node, nonzero if reorder_blocks has already seen this block.
835 In an SSA_NAME node, nonzero if the SSA_NAME occurs in an abnormal
836 PHI node. */
d72a838e 837#define TREE_ASM_WRITTEN(NODE) ((NODE)->common.asm_written_flag)
838
839/* Nonzero in a _DECL if the name is used in its scope.
840 Nonzero in an expr node means inhibit warning if value is unused.
841 In IDENTIFIER_NODEs, this means that some extern decl for this name
842 was used. */
843#define TREE_USED(NODE) ((NODE)->common.used_flag)
844
00dd2e9e 845/* In a FUNCTION_DECL, nonzero means a call to the function cannot throw
846 an exception. In a CALL_EXPR, nonzero means the call cannot throw. */
847#define TREE_NOTHROW(NODE) ((NODE)->common.nothrow_flag)
a9d9ab08 848
805e22b2 849/* In a CALL_EXPR, means that the address of the return slot is part of the
850 argument list. */
851#define CALL_EXPR_HAS_RETURN_SLOT_ADDR(NODE) ((NODE)->common.private_flag)
852
eaa112a0 853/* In a CALL_EXPR, means that the call is the jump from a thunk to the
854 thunked-to function. */
855#define CALL_FROM_THUNK_P(NODE) ((NODE)->common.protected_flag)
856
a9d9ab08 857/* In a type, nonzero means that all objects of the type are guaranteed by the
858 language or front-end to be properly aligned, so we can indicate that a MEM
859 of this type is aligned at least to the alignment of the type, even if it
860 doesn't appear that it is. We see this, for example, in object-oriented
861 languages where a tag field may show this is an object of a more-aligned
4ee9c684 862 variant of the more generic type.
863
864 In an SSA_NAME node, nonzero if the SSA_NAME node is on the SSA_NAME
865 freelist. */
a9d9ab08 866#define TYPE_ALIGN_OK(NODE) (TYPE_CHECK (NODE)->common.nothrow_flag)
d72a838e 867
bc3a4bfd 868/* Used in classes in C++. */
d72a838e 869#define TREE_PRIVATE(NODE) ((NODE)->common.private_flag)
bc3a4bfd 870/* Used in classes in C++.
871 In a BLOCK node, this is BLOCK_HANDLER_BLOCK. */
d72a838e 872#define TREE_PROTECTED(NODE) ((NODE)->common.protected_flag)
873
dafdd1c8 874/* Nonzero in an IDENTIFIER_NODE if the use of the name is defined as a
88da234d 875 deprecated feature by __attribute__((deprecated)). */
876#define TREE_DEPRECATED(NODE) ((NODE)->common.deprecated_flag)
877
4ee9c684 878/* Value of expression is function invariant. A strict subset of
879 TREE_CONSTANT, such an expression is constant over any one function
880 invocation, though not across different invocations. May appear in
881 any expression node. */
882#define TREE_INVARIANT(NODE) ((NODE)->common.invariant_flag)
883
bc3a4bfd 884/* These flags are available for each language front end to use internally. */
d72a838e 885#define TREE_LANG_FLAG_0(NODE) ((NODE)->common.lang_flag_0)
886#define TREE_LANG_FLAG_1(NODE) ((NODE)->common.lang_flag_1)
887#define TREE_LANG_FLAG_2(NODE) ((NODE)->common.lang_flag_2)
888#define TREE_LANG_FLAG_3(NODE) ((NODE)->common.lang_flag_3)
889#define TREE_LANG_FLAG_4(NODE) ((NODE)->common.lang_flag_4)
890#define TREE_LANG_FLAG_5(NODE) ((NODE)->common.lang_flag_5)
891#define TREE_LANG_FLAG_6(NODE) ((NODE)->common.lang_flag_6)
892\f
893/* Define additional fields and accessors for nodes representing constants. */
894
9e6d0a9a 895/* In an INTEGER_CST node. These two together make a 2-word integer.
896 If the data type is signed, the value is sign-extended to 2 words
d72a838e 897 even though not all of them may really be in use.
9e6d0a9a 898 In an unsigned constant shorter than 2 words, the extra bits are 0. */
2a8a276e 899#define TREE_INT_CST(NODE) (INTEGER_CST_CHECK (NODE)->int_cst.int_cst)
900#define TREE_INT_CST_LOW(NODE) (TREE_INT_CST (NODE).low)
901#define TREE_INT_CST_HIGH(NODE) (TREE_INT_CST (NODE).high)
d72a838e 902
76c6f48d 903#define INT_CST_LT(A, B) \
904 (TREE_INT_CST_HIGH (A) < TREE_INT_CST_HIGH (B) \
905 || (TREE_INT_CST_HIGH (A) == TREE_INT_CST_HIGH (B) \
56ba46a4 906 && TREE_INT_CST_LOW (A) < TREE_INT_CST_LOW (B)))
d72a838e 907
76c6f48d 908#define INT_CST_LT_UNSIGNED(A, B) \
909 (((unsigned HOST_WIDE_INT) TREE_INT_CST_HIGH (A) \
910 < (unsigned HOST_WIDE_INT) TREE_INT_CST_HIGH (B)) \
911 || (((unsigned HOST_WIDE_INT) TREE_INT_CST_HIGH (A) \
6c34d0c2 912 == (unsigned HOST_WIDE_INT) TREE_INT_CST_HIGH (B)) \
56ba46a4 913 && TREE_INT_CST_LOW (A) < TREE_INT_CST_LOW (B)))
60b8c5b3 914
1f3233d1 915struct tree_int_cst GTY(())
d72a838e 916{
851dfbff 917 struct tree_common common;
2a8a276e 918 /* A sub-struct is necessary here because the function `const_hash'
919 wants to scan both words as a unit and taking the address of the
920 sub-struct yields the properly inclusive bounded pointer. */
1f3233d1 921 struct tree_int_cst_lowhi {
2a8a276e 922 unsigned HOST_WIDE_INT low;
923 HOST_WIDE_INT high;
924 } int_cst;
d72a838e 925};
926
479838ec 927/* In a REAL_CST node. struct real_value is an opaque entity, with
ef258422 928 manipulators defined in real.h. We don't want tree.h depending on
929 real.h and transitively on tm.h. */
479838ec 930struct real_value;
56ba46a4 931
ef258422 932#define TREE_REAL_CST_PTR(NODE) (REAL_CST_CHECK (NODE)->real_cst.real_cst_ptr)
933#define TREE_REAL_CST(NODE) (*TREE_REAL_CST_PTR (NODE))
d72a838e 934
1f3233d1 935struct tree_real_cst GTY(())
d72a838e 936{
851dfbff 937 struct tree_common common;
479838ec 938 struct real_value * real_cst_ptr;
d72a838e 939};
940
941/* In a STRING_CST */
3e207e38 942#define TREE_STRING_LENGTH(NODE) (STRING_CST_CHECK (NODE)->string.length)
cbe4c3a5 943#define TREE_STRING_POINTER(NODE) (STRING_CST_CHECK (NODE)->string.pointer)
d72a838e 944
1f3233d1 945struct tree_string GTY(())
d72a838e 946{
851dfbff 947 struct tree_common common;
d72a838e 948 int length;
cbe4c3a5 949 const char *pointer;
d72a838e 950};
951
952/* In a COMPLEX_CST node. */
3e207e38 953#define TREE_REALPART(NODE) (COMPLEX_CST_CHECK (NODE)->complex.real)
954#define TREE_IMAGPART(NODE) (COMPLEX_CST_CHECK (NODE)->complex.imag)
d72a838e 955
1f3233d1 956struct tree_complex GTY(())
d72a838e 957{
851dfbff 958 struct tree_common common;
6a3e3d6d 959 tree real;
960 tree imag;
d72a838e 961};
886cfd4f 962
963/* In a VECTOR_CST node. */
964#define TREE_VECTOR_CST_ELTS(NODE) (VECTOR_CST_CHECK (NODE)->vector.elements)
965
1f3233d1 966struct tree_vector GTY(())
886cfd4f 967{
968 struct tree_common common;
886cfd4f 969 tree elements;
970};
d72a838e 971\f
d856c8a6 972#include "symtab.h"
0d086e18 973
d72a838e 974/* Define fields and accessors for some special-purpose tree nodes. */
975
0d086e18 976#define IDENTIFIER_LENGTH(NODE) \
56ba46a4 977 (IDENTIFIER_NODE_CHECK (NODE)->identifier.id.len)
0d086e18 978#define IDENTIFIER_POINTER(NODE) \
76c6f48d 979 ((const char *) IDENTIFIER_NODE_CHECK (NODE)->identifier.id.str)
af694375 980#define IDENTIFIER_HASH_VALUE(NODE) \
981 (IDENTIFIER_NODE_CHECK (NODE)->identifier.id.hash_value)
0d086e18 982
983/* Translate a hash table identifier pointer to a tree_identifier
984 pointer, and vice versa. */
985
986#define HT_IDENT_TO_GCC_IDENT(NODE) \
56ba46a4 987 ((tree) ((char *) (NODE) - sizeof (struct tree_common)))
988#define GCC_IDENT_TO_HT_IDENT(NODE) (&((struct tree_identifier *) (NODE))->id)
d72a838e 989
1f3233d1 990struct tree_identifier GTY(())
d72a838e 991{
851dfbff 992 struct tree_common common;
0d086e18 993 struct ht_identifier id;
d72a838e 994};
995
996/* In a TREE_LIST node. */
3e207e38 997#define TREE_PURPOSE(NODE) (TREE_LIST_CHECK (NODE)->list.purpose)
998#define TREE_VALUE(NODE) (TREE_LIST_CHECK (NODE)->list.value)
d72a838e 999
1f3233d1 1000struct tree_list GTY(())
d72a838e 1001{
851dfbff 1002 struct tree_common common;
6a3e3d6d 1003 tree purpose;
1004 tree value;
d72a838e 1005};
1006
1007/* In a TREE_VEC node. */
3e207e38 1008#define TREE_VEC_LENGTH(NODE) (TREE_VEC_CHECK (NODE)->vec.length)
56ba46a4 1009#define TREE_VEC_END(NODE) \
1010 ((void) TREE_VEC_CHECK (NODE), &((NODE)->vec.a[(NODE)->vec.length]))
d72a838e 1011
66bc87db 1012#define TREE_VEC_ELT(NODE,I) TREE_VEC_ELT_CHECK (NODE, I)
1013
1f3233d1 1014struct tree_vec GTY(())
d72a838e 1015{
851dfbff 1016 struct tree_common common;
d72a838e 1017 int length;
1f3233d1 1018 tree GTY ((length ("TREE_VEC_LENGTH ((tree)&%h)"))) a[1];
d72a838e 1019};
1020
1021/* Define fields and accessors for some nodes that represent expressions. */
1022
365db11e 1023/* Nonzero if NODE is an empty statement (NOP_EXPR <0>). */
4ee9c684 1024#define IS_EMPTY_STMT(NODE) (TREE_CODE (NODE) == NOP_EXPR \
1025 && VOID_TYPE_P (TREE_TYPE (NODE)) \
1026 && integer_zerop (TREE_OPERAND (NODE, 0)))
1027
d72a838e 1028/* In a CONSTRUCTOR node. */
b56337d2 1029#define CONSTRUCTOR_ELTS(NODE) TREE_OPERAND_CHECK_CODE (NODE, CONSTRUCTOR, 0)
d72a838e 1030
f20853dd 1031/* In ordinary expression nodes. */
2fcde217 1032#define TREE_OPERAND(NODE, I) TREE_OPERAND_CHECK (NODE, I)
3e207e38 1033#define TREE_COMPLEXITY(NODE) (EXPR_CHECK (NODE)->exp.complexity)
f20853dd 1034
b50fb4a3 1035/* In a LABELED_BLOCK_EXPR node. */
56ba46a4 1036#define LABELED_BLOCK_LABEL(NODE) \
2fcde217 1037 TREE_OPERAND_CHECK_CODE (NODE, LABELED_BLOCK_EXPR, 0)
56ba46a4 1038#define LABELED_BLOCK_BODY(NODE) \
2fcde217 1039 TREE_OPERAND_CHECK_CODE (NODE, LABELED_BLOCK_EXPR, 1)
b50fb4a3 1040
dafdd1c8 1041/* In an EXIT_BLOCK_EXPR node. */
56ba46a4 1042#define EXIT_BLOCK_LABELED_BLOCK(NODE) \
2fcde217 1043 TREE_OPERAND_CHECK_CODE (NODE, EXIT_BLOCK_EXPR, 0)
1044#define EXIT_BLOCK_RETURN(NODE) TREE_OPERAND_CHECK_CODE (NODE, EXIT_BLOCK_EXPR, 1)
b50fb4a3 1045
1046/* In a LOOP_EXPR node. */
2fcde217 1047#define LOOP_EXPR_BODY(NODE) TREE_OPERAND_CHECK_CODE (NODE, LOOP_EXPR, 0)
b50fb4a3 1048
fdfe4b3f 1049#ifdef USE_MAPPED_LOCATION
1050/* The source location of this expression. Non-tree_exp nodes such as
1051 decls and constants can be shared among multiple locations, so
1052 return nothing. */
1053#define EXPR_LOCATION(NODE) \
1054 (IS_EXPR_CODE_CLASS (TREE_CODE_CLASS (TREE_CODE (NODE))) \
1055 ? (NODE)->exp.locus \
1056 : UNKNOWN_LOCATION)
1057#define SET_EXPR_LOCATION(NODE, FROM) \
1058 (EXPR_CHECK (NODE)->exp.locus = (FROM))
1059#define EXPR_HAS_LOCATION(NODE) (EXPR_LOCATION (NODE) != UNKNOWN_LOCATION)
1060/* EXPR_LOCUS and SET_EXPR_LOCUS are deprecated. */
1061#define EXPR_LOCUS(NODE) \
1062 (IS_EXPR_CODE_CLASS (TREE_CODE_CLASS (TREE_CODE (NODE))) \
1063 ? &(NODE)->exp.locus \
1064 : (location_t *)NULL)
1065#define SET_EXPR_LOCUS(NODE, FROM) \
1066 do { source_location *loc_tmp = FROM; \
1067 EXPR_CHECK (NODE)->exp.locus \
1068 = loc_tmp == NULL ? UNKNOWN_LOCATION : *loc_tmp; } while (0)
1069#define EXPR_FILENAME(NODE) \
1070 LOCATION_FILE (EXPR_CHECK (NODE)->exp.locus)
1071#define EXPR_LINENO(NODE) \
1072 LOCATION_LINE (EXPR_CHECK (NODE)->exp.locus)
1073#else
4ee9c684 1074/* The source location of this expression. Non-tree_exp nodes such as
1075 decls and constants can be shared among multiple locations, so
1076 return nothing. */
1077#define EXPR_LOCUS(NODE) \
1078 (IS_EXPR_CODE_CLASS (TREE_CODE_CLASS (TREE_CODE (NODE))) \
1079 ? (NODE)->exp.locus \
1080 : (location_t *)NULL)
1081#define SET_EXPR_LOCUS(NODE, FROM) \
1082 (EXPR_CHECK (NODE)->exp.locus = (FROM))
fdfe4b3f 1083#define SET_EXPR_LOCATION(NODE, FROM) annotate_with_locus (NODE, FROM)
4ee9c684 1084#define EXPR_FILENAME(NODE) \
1085 (EXPR_CHECK (NODE)->exp.locus->file)
1086#define EXPR_LINENO(NODE) \
1087 (EXPR_CHECK (NODE)->exp.locus->line)
4ee9c684 1088#define EXPR_HAS_LOCATION(NODE) (EXPR_LOCUS (NODE) != NULL)
fdfe4b3f 1089#define EXPR_LOCATION(NODE) \
1090 (EXPR_HAS_LOCATION(NODE) ? *(NODE)->exp.locus : UNKNOWN_LOCATION)
4ee9c684 1091#endif
dae7d8ad 1092
7ebc28e0 1093/* In a TARGET_EXPR node. */
2fcde217 1094#define TARGET_EXPR_SLOT(NODE) TREE_OPERAND_CHECK_CODE (NODE, TARGET_EXPR, 0)
1095#define TARGET_EXPR_INITIAL(NODE) TREE_OPERAND_CHECK_CODE (NODE, TARGET_EXPR, 1)
1096#define TARGET_EXPR_CLEANUP(NODE) TREE_OPERAND_CHECK_CODE (NODE, TARGET_EXPR, 2)
7ebc28e0 1097
7dd37241 1098/* DECL_EXPR accessor. This gives access to the DECL associated with
1099 the given declaration statement. */
1100#define DECL_EXPR_DECL(NODE) TREE_OPERAND (DECL_EXPR_CHECK (NODE), 0)
1101
4ee9c684 1102#define EXIT_EXPR_COND(NODE) TREE_OPERAND (EXIT_EXPR_CHECK (NODE), 0)
1103
1104/* SWITCH_EXPR accessors. These give access to the condition, body and
1105 original condition type (before any compiler conversions)
1106 of the switch statement, respectively. */
1107#define SWITCH_COND(NODE) TREE_OPERAND ((NODE), 0)
1108#define SWITCH_BODY(NODE) TREE_OPERAND ((NODE), 1)
1109#define SWITCH_LABELS(NODE) TREE_OPERAND ((NODE), 2)
1110
eaae3b75 1111/* CASE_LABEL_EXPR accessors. These give access to the high and low values
4ee9c684 1112 of a case label, respectively. */
1113#define CASE_LOW(NODE) TREE_OPERAND ((NODE), 0)
1114#define CASE_HIGH(NODE) TREE_OPERAND ((NODE), 1)
1115#define CASE_LABEL(NODE) TREE_OPERAND ((NODE), 2)
1116
1117/* The operands of a BIND_EXPR. */
1118#define BIND_EXPR_VARS(NODE) (TREE_OPERAND (BIND_EXPR_CHECK (NODE), 0))
1119#define BIND_EXPR_BODY(NODE) (TREE_OPERAND (BIND_EXPR_CHECK (NODE), 1))
1120#define BIND_EXPR_BLOCK(NODE) (TREE_OPERAND (BIND_EXPR_CHECK (NODE), 2))
1121
1122/* GOTO_EXPR accessor. This gives access to the label associated with
1123 a goto statement. */
1124#define GOTO_DESTINATION(NODE) TREE_OPERAND ((NODE), 0)
1125
226c2452 1126/* ASM_EXPR accessors. ASM_STRING returns a STRING_CST for the
4ee9c684 1127 instruction (e.g., "mov x, y"). ASM_OUTPUTS, ASM_INPUTS, and
1128 ASM_CLOBBERS represent the outputs, inputs, and clobbers for the
1129 statement. */
1130#define ASM_STRING(NODE) TREE_OPERAND ((NODE), 0)
1131#define ASM_OUTPUTS(NODE) TREE_OPERAND ((NODE), 1)
1132#define ASM_INPUTS(NODE) TREE_OPERAND ((NODE), 2)
1133#define ASM_CLOBBERS(NODE) TREE_OPERAND ((NODE), 3)
1134/* Nonzero if we want to create an ASM_INPUT instead of an
1135 ASM_OPERAND with no operands. */
1136#define ASM_INPUT_P(NODE) (TREE_STATIC (NODE))
1137#define ASM_VOLATILE_P(NODE) (TREE_PUBLIC (NODE))
1138
1139/* COND_EXPR accessors. */
1140#define COND_EXPR_COND(NODE) (TREE_OPERAND (COND_EXPR_CHECK (NODE), 0))
1141#define COND_EXPR_THEN(NODE) (TREE_OPERAND (COND_EXPR_CHECK (NODE), 1))
1142#define COND_EXPR_ELSE(NODE) (TREE_OPERAND (COND_EXPR_CHECK (NODE), 2))
1143
1144/* LABEL_EXPR accessor. This gives access to the label associated with
1145 the given label expression. */
1146#define LABEL_EXPR_LABEL(NODE) TREE_OPERAND (LABEL_EXPR_CHECK (NODE), 0)
1147
1148/* VDEF_EXPR accessors are specified in tree-flow.h, along with the other
1149 accessors for SSA operands. */
1150
1151/* CATCH_EXPR accessors. */
1152#define CATCH_TYPES(NODE) TREE_OPERAND (CATCH_EXPR_CHECK (NODE), 0)
1153#define CATCH_BODY(NODE) TREE_OPERAND (CATCH_EXPR_CHECK (NODE), 1)
1154
1155/* EH_FILTER_EXPR accessors. */
1156#define EH_FILTER_TYPES(NODE) TREE_OPERAND (EH_FILTER_EXPR_CHECK (NODE), 0)
1157#define EH_FILTER_FAILURE(NODE) TREE_OPERAND (EH_FILTER_EXPR_CHECK (NODE), 1)
1158#define EH_FILTER_MUST_NOT_THROW(NODE) TREE_STATIC (EH_FILTER_EXPR_CHECK (NODE))
1159
215e2f1d 1160/* OBJ_TYPE_REF accessors. */
1161#define OBJ_TYPE_REF_EXPR(NODE) TREE_OPERAND (OBJ_TYPE_REF_CHECK (NODE), 0)
1162#define OBJ_TYPE_REF_OBJECT(NODE) TREE_OPERAND (OBJ_TYPE_REF_CHECK (NODE), 1)
1163#define OBJ_TYPE_REF_TOKEN(NODE) TREE_OPERAND (OBJ_TYPE_REF_CHECK (NODE), 2)
1164
1f3233d1 1165struct tree_exp GTY(())
f20853dd 1166{
851dfbff 1167 struct tree_common common;
fdfe4b3f 1168 source_locus locus;
f20853dd 1169 int complexity;
4ee9c684 1170 tree block;
60b8c5b3 1171 tree GTY ((special ("tree_exp"),
1172 desc ("TREE_CODE ((tree) &%0)")))
1f3233d1 1173 operands[1];
f20853dd 1174};
1175\f
4ee9c684 1176/* SSA_NAME accessors. */
1177
1178/* Returns the variable being referenced. Once released, this is the
1179 only field that can be relied upon. */
1180#define SSA_NAME_VAR(NODE) SSA_NAME_CHECK (NODE)->ssa_name.var
1181
1182/* Returns the statement which defines this reference. Note that
1183 we use the same field when chaining SSA_NAME nodes together on
1184 the SSA_NAME freelist. */
1185#define SSA_NAME_DEF_STMT(NODE) SSA_NAME_CHECK (NODE)->common.chain
1186
1187/* Returns the SSA version number of this SSA name. Note that in
1188 tree SSA, version numbers are not per variable and may be recycled. */
1189#define SSA_NAME_VERSION(NODE) SSA_NAME_CHECK (NODE)->ssa_name.version
1190
1191/* Nonzero if this SSA name occurs in an abnormal PHI. SSA_NAMES are
1192 never output, so we can safely use the ASM_WRITTEN_FLAG for this
1193 status bit. */
1194#define SSA_NAME_OCCURS_IN_ABNORMAL_PHI(NODE) \
1195 SSA_NAME_CHECK (NODE)->common.asm_written_flag
1196
786d45db 1197/* Nonzero if this SSA_NAME expression is currently on the free list of
4ee9c684 1198 SSA_NAMES. Using NOTHROW_FLAG seems reasonably safe since throwing
1199 has no meaning for an SSA_NAME. */
1200#define SSA_NAME_IN_FREE_LIST(NODE) \
1201 SSA_NAME_CHECK (NODE)->common.nothrow_flag
1202
786d45db 1203/* Attributes for SSA_NAMEs for pointer-type variables. */
1204#define SSA_NAME_PTR_INFO(N) \
1205 SSA_NAME_CHECK (N)->ssa_name.ptr_info
1206
7cd909bf 1207/* Get the value of this SSA_NAME, if available. */
1208#define SSA_NAME_VALUE(N) \
1209 SSA_NAME_CHECK (N)->ssa_name.value_handle
1210
f3d9a16c 1211/* Auxiliary pass-specific data. */
1212#define SSA_NAME_AUX(N) \
1213 SSA_NAME_CHECK (N)->ssa_name.aux
1214
591c2a30 1215#ifndef _TREE_FLOW_H
1216struct ptr_info_def;
786d45db 1217#endif
1218
4ee9c684 1219struct tree_ssa_name GTY(())
1220{
1221 struct tree_common common;
1222
1223 /* _DECL wrapped by this SSA name. */
1224 tree var;
1225
1226 /* SSA version number. */
1227 unsigned int version;
786d45db 1228
1229 /* Pointer attributes used for alias analysis. */
1230 struct ptr_info_def *ptr_info;
7cd909bf 1231
1232 /* Value for SSA name used by GVN. */
1233 tree GTY((skip)) value_handle;
f3d9a16c 1234
1235 /* Auxiliary information stored with the ssa name. */
1236 PTR GTY((skip)) aux;
4ee9c684 1237};
1238\f
1239/* In a PHI_NODE node. */
56004dc5 1240#define PHI_RESULT_TREE(NODE) PHI_NODE_CHECK (NODE)->phi.result
1241#define PHI_ARG_DEF_TREE(NODE, I) PHI_NODE_ELT_CHECK (NODE, I).def
4ee9c684 1242
04f8eea3 1243/* PHI_NODEs for each basic block are chained together in a single linked
1244 list. The head of the list is linked from the block annotation, and
1245 the link to the next PHI is in PHI_CHAIN. */
1246#define PHI_CHAIN(NODE) TREE_CHAIN (PHI_NODE_CHECK (NODE))
1247
4ee9c684 1248/* Nonzero if the PHI node was rewritten by a previous pass through the
1249 SSA renamer. */
56004dc5 1250#define PHI_REWRITTEN(NODE) PHI_NODE_CHECK (NODE)->phi.rewritten
1251#define PHI_NUM_ARGS(NODE) PHI_NODE_CHECK (NODE)->phi.num_args
1252#define PHI_ARG_CAPACITY(NODE) PHI_NODE_CHECK (NODE)->phi.capacity
1253#define PHI_ARG_ELT(NODE, I) PHI_NODE_ELT_CHECK (NODE, I)
1254#define PHI_ARG_EDGE(NODE, I) PHI_NODE_ELT_CHECK (NODE, I).e
1255#define PHI_ARG_NONZERO(NODE, I) PHI_NODE_ELT_CHECK (NODE, I).nonzero
4ee9c684 1256
1257struct edge_def;
1258
1259struct phi_arg_d GTY(())
1260{
1261 tree def;
1262 struct edge_def * GTY((skip (""))) e;
6e9a4371 1263 bool nonzero;
4ee9c684 1264};
1265
1266struct tree_phi_node GTY(())
1267{
1268 struct tree_common common;
1269 tree result;
1270 int num_args;
1271 int capacity;
1272
1273 /* Nonzero if the PHI node was rewritten by a previous pass through the
1274 SSA renamer. */
1275 int rewritten;
1276
1277 struct phi_arg_d GTY ((length ("((tree)&%h)->phi.capacity"))) a[1];
1278};
1279\f
1280
1281struct varray_head_tag;
1282
d72a838e 1283/* In a BLOCK node. */
3e207e38 1284#define BLOCK_VARS(NODE) (BLOCK_CHECK (NODE)->block.vars)
3e207e38 1285#define BLOCK_SUBBLOCKS(NODE) (BLOCK_CHECK (NODE)->block.subblocks)
1286#define BLOCK_SUPERCONTEXT(NODE) (BLOCK_CHECK (NODE)->block.supercontext)
d72a838e 1287/* Note: when changing this, make sure to find the places
1288 that use chainon or nreverse. */
7b7cc58a 1289#define BLOCK_CHAIN(NODE) TREE_CHAIN (BLOCK_CHECK (NODE))
3e207e38 1290#define BLOCK_ABSTRACT_ORIGIN(NODE) (BLOCK_CHECK (NODE)->block.abstract_origin)
1291#define BLOCK_ABSTRACT(NODE) (BLOCK_CHECK (NODE)->block.abstract_flag)
d72a838e 1292
1293/* Nonzero means that this block is prepared to handle exceptions
1294 listed in the BLOCK_VARS slot. */
56ba46a4 1295#define BLOCK_HANDLER_BLOCK(NODE) \
1296 (BLOCK_CHECK (NODE)->block.handler_block_flag)
d72a838e 1297
5846cb0f 1298/* An index number for this block. These values are not guaranteed to
1299 be unique across functions -- whether or not they are depends on
1300 the debugging output format in use. */
1301#define BLOCK_NUMBER(NODE) (BLOCK_CHECK (NODE)->block.block_num)
1302
a36145ca 1303/* If block reordering splits a lexical block into discontiguous
1304 address ranges, we'll make a copy of the original block.
1305
1306 Note that this is logically distinct from BLOCK_ABSTRACT_ORIGIN.
1307 In that case, we have one source block that has been replicated
1308 (through inlining or unrolling) into many logical blocks, and that
1309 these logical blocks have different physical variables in them.
1310
1311 In this case, we have one logical block split into several
1312 non-contiguous address ranges. Most debug formats can't actually
1313 represent this idea directly, so we fake it by creating multiple
1314 logical blocks with the same variables in them. However, for those
1315 that do support non-contiguous regions, these allow the original
1316 logical block to be reconstructed, along with the set of address
1317 ranges.
1318
1319 One of the logical block fragments is arbitrarily chosen to be
1320 the ORIGIN. The other fragments will point to the origin via
1321 BLOCK_FRAGMENT_ORIGIN; the origin itself will have this pointer
6c34d0c2 1322 be null. The list of fragments will be chained through
a36145ca 1323 BLOCK_FRAGMENT_CHAIN from the origin. */
1324
56ba46a4 1325#define BLOCK_FRAGMENT_ORIGIN(NODE) (BLOCK_CHECK (NODE)->block.fragment_origin)
1326#define BLOCK_FRAGMENT_CHAIN(NODE) (BLOCK_CHECK (NODE)->block.fragment_chain)
a36145ca 1327
1f3233d1 1328struct tree_block GTY(())
d72a838e 1329{
851dfbff 1330 struct tree_common common;
f20853dd 1331
1332 unsigned handler_block_flag : 1;
1333 unsigned abstract_flag : 1;
874a9b8d 1334 unsigned block_num : 30;
f20853dd 1335
6a3e3d6d 1336 tree vars;
1337 tree subblocks;
1338 tree supercontext;
1339 tree abstract_origin;
1340 tree fragment_origin;
1341 tree fragment_chain;
d72a838e 1342};
1343\f
1344/* Define fields and accessors for nodes representing data types. */
1345
1346/* See tree.def for documentation of the use of these fields.
82bb2115 1347 Look at the documentation of the various ..._TYPE tree codes.
1348
3927afe0 1349 Note that the type.values, type.minval, and type.maxval fields are
82bb2115 1350 overloaded and used for different macros in different kinds of types.
1351 Each macro must check to ensure the tree node is of the proper kind of
1352 type. Note also that some of the front-ends also overload these fields,
1353 so they must be checked as well. */
d72a838e 1354
3e207e38 1355#define TYPE_UID(NODE) (TYPE_CHECK (NODE)->type.uid)
1356#define TYPE_SIZE(NODE) (TYPE_CHECK (NODE)->type.size)
1357#define TYPE_SIZE_UNIT(NODE) (TYPE_CHECK (NODE)->type.size_unit)
1358#define TYPE_MODE(NODE) (TYPE_CHECK (NODE)->type.mode)
82bb2115 1359#define TYPE_ORIG_SIZE_TYPE(NODE) (INTEGER_TYPE_CHECK (NODE)->type.values)
1360#define TYPE_VALUES(NODE) (ENUMERAL_TYPE_CHECK (NODE)->type.values)
49be8259 1361#define TYPE_DOMAIN(NODE) (SET_OR_ARRAY_CHECK (NODE)->type.values)
3cb98335 1362#define TYPE_FIELDS(NODE) (RECORD_OR_UNION_CHECK (NODE)->type.values)
1363#define TYPE_METHODS(NODE) (RECORD_OR_UNION_CHECK (NODE)->type.maxval)
1364#define TYPE_VFIELD(NODE) (RECORD_OR_UNION_CHECK (NODE)->type.minval)
82bb2115 1365#define TYPE_ARG_TYPES(NODE) (FUNC_OR_METHOD_CHECK (NODE)->type.values)
1366#define TYPE_METHOD_BASETYPE(NODE) (FUNC_OR_METHOD_CHECK (NODE)->type.maxval)
1367#define TYPE_OFFSET_BASETYPE(NODE) (OFFSET_TYPE_CHECK (NODE)->type.maxval)
3e207e38 1368#define TYPE_POINTER_TO(NODE) (TYPE_CHECK (NODE)->type.pointer_to)
1369#define TYPE_REFERENCE_TO(NODE) (TYPE_CHECK (NODE)->type.reference_to)
b24423db 1370#define TYPE_NEXT_PTR_TO(NODE) (POINTER_TYPE_CHECK (NODE)->type.minval)
1371#define TYPE_NEXT_REF_TO(NODE) (REFERENCE_TYPE_CHECK (NODE)->type.minval)
82bb2115 1372#define TYPE_MIN_VALUE(NODE) (NUMERICAL_TYPE_CHECK (NODE)->type.minval)
1373#define TYPE_MAX_VALUE(NODE) (NUMERICAL_TYPE_CHECK (NODE)->type.maxval)
3e207e38 1374#define TYPE_PRECISION(NODE) (TYPE_CHECK (NODE)->type.precision)
1375#define TYPE_SYMTAB_ADDRESS(NODE) (TYPE_CHECK (NODE)->type.symtab.address)
1376#define TYPE_SYMTAB_POINTER(NODE) (TYPE_CHECK (NODE)->type.symtab.pointer)
1f3233d1 1377#define TYPE_SYMTAB_DIE(NODE) (TYPE_CHECK (NODE)->type.symtab.die)
3e207e38 1378#define TYPE_NAME(NODE) (TYPE_CHECK (NODE)->type.name)
1379#define TYPE_NEXT_VARIANT(NODE) (TYPE_CHECK (NODE)->type.next_variant)
1380#define TYPE_MAIN_VARIANT(NODE) (TYPE_CHECK (NODE)->type.main_variant)
3e207e38 1381#define TYPE_CONTEXT(NODE) (TYPE_CHECK (NODE)->type.context)
3e207e38 1382#define TYPE_LANG_SPECIFIC(NODE) (TYPE_CHECK (NODE)->type.lang_specific)
d72a838e 1383
e2ea7e3a 1384/* For a VECTOR_TYPE node, this describes a different type which is emitted
1385 in the debugging output. We use this to describe a vector as a
1386 structure containing an array. */
49be8259 1387#define TYPE_DEBUG_REPRESENTATION_TYPE(NODE) (VECTOR_TYPE_CHECK (NODE)->type.values)
e2ea7e3a 1388
3cb98335 1389/* For record and union types, information about this type, as a base type
1390 for itself. */
1391#define TYPE_BINFO(NODE) (RECORD_OR_UNION_CHECK(NODE)->type.binfo)
1392
1393/* For non record and union types, used in a language-dependent way. */
1394#define TYPE_LANG_SLOT_1(NODE) (NOT_RECORD_OR_UNION_CHECK(NODE)->type.binfo)
a6a316cb 1395
b5ba9f3a 1396/* The (language-specific) typed-based alias set for this type.
1397 Objects whose TYPE_ALIAS_SETs are different cannot alias each
1398 other. If the TYPE_ALIAS_SET is -1, no alias set has yet been
1399 assigned to this type. If the TYPE_ALIAS_SET is 0, objects of this
1400 type can alias objects of any type. */
1401#define TYPE_ALIAS_SET(NODE) (TYPE_CHECK (NODE)->type.alias_set)
1402
1403/* Nonzero iff the typed-based alias set for this type has been
1404 calculated. */
56ba46a4 1405#define TYPE_ALIAS_SET_KNOWN_P(NODE) (TYPE_CHECK (NODE)->type.alias_set != -1)
b5ba9f3a 1406
a12eeaaf 1407/* A TREE_LIST of IDENTIFIER nodes of the attributes that apply
1408 to this type. */
3e207e38 1409#define TYPE_ATTRIBUTES(NODE) (TYPE_CHECK (NODE)->type.attributes)
a12eeaaf 1410
c3b0175e 1411/* The alignment necessary for objects of this type.
1412 The value is an int, measured in bits. */
3e207e38 1413#define TYPE_ALIGN(NODE) (TYPE_CHECK (NODE)->type.align)
c3b0175e 1414
aca14577 1415/* 1 if the alignment for this type was requested by "aligned" attribute,
1416 0 if it is the default for this type. */
1417#define TYPE_USER_ALIGN(NODE) (TYPE_CHECK (NODE)->type.user_align)
1418
89e923d8 1419/* The alignment for NODE, in bytes. */
56ba46a4 1420#define TYPE_ALIGN_UNIT(NODE) (TYPE_ALIGN (NODE) / BITS_PER_UNIT)
89e923d8 1421
13fad59c 1422/* If your language allows you to declare types, and you want debug info
1423 for them, then you need to generate corresponding TYPE_DECL nodes.
1424 These "stub" TYPE_DECL nodes have no name, and simply point at the
1425 type node. You then set the TYPE_STUB_DECL field of the type node
1426 to point back at the TYPE_DECL node. This allows the debug routines
1427 to know that the two nodes represent the same type, so that we only
88b5b080 1428 get one debug info record for them. */
56ba46a4 1429#define TYPE_STUB_DECL(NODE) TREE_CHAIN (NODE)
d72a838e 1430
7dd9d898 1431/* In a RECORD_TYPE, UNION_TYPE or QUAL_UNION_TYPE, it means the type
1432 has BLKmode only because it lacks the alignment requirement for
1433 its size. */
3e207e38 1434#define TYPE_NO_FORCE_BLK(NODE) (TYPE_CHECK (NODE)->type.no_force_blk_flag)
d72a838e 1435
4944c3db 1436/* In an INTEGER_TYPE, it means the type represents a size. We use
1437 this both for validity checking and to permit optimizations that
1438 are unsafe for other types. Note that the C `size_t' type should
1439 *not* have this flag set. The `size_t' type is simply a typedef
1440 for an ordinary integer type that happens to be the type of an
1441 expression returned by `sizeof'; `size_t' has no special
1442 properties. Expressions whose type have TYPE_IS_SIZETYPE set are
1443 always actual sizes. */
d490e2f2 1444#define TYPE_IS_SIZETYPE(NODE) \
1445 (INTEGER_TYPE_CHECK (NODE)->type.no_force_blk_flag)
1446
1447/* In a FUNCTION_TYPE, indicates that the function returns with the stack
1448 pointer depressed. */
1449#define TYPE_RETURNS_STACK_DEPRESSED(NODE) \
fabd00bc 1450 (FUNCTION_TYPE_CHECK (NODE)->type.no_force_blk_flag)
902de8ed 1451
d72a838e 1452/* Nonzero in a type considered volatile as a whole. */
5926a453 1453#define TYPE_VOLATILE(NODE) (TYPE_CHECK (NODE)->common.volatile_flag)
d72a838e 1454
1455/* Means this type is const-qualified. */
5926a453 1456#define TYPE_READONLY(NODE) (TYPE_CHECK (NODE)->common.readonly_flag)
d72a838e 1457
a5b1863e 1458/* If nonzero, this type is `restrict'-qualified, in the C sense of
1459 the term. */
1460#define TYPE_RESTRICT(NODE) (TYPE_CHECK (NODE)->type.restrict_flag)
1461
1462/* There is a TYPE_QUAL value for each type qualifier. They can be
1463 combined by bitwise-or to form the complete set of qualifiers for a
1464 type. */
1465
1466#define TYPE_UNQUALIFIED 0x0
1467#define TYPE_QUAL_CONST 0x1
1468#define TYPE_QUAL_VOLATILE 0x2
1469#define TYPE_QUAL_RESTRICT 0x4
1470
1471/* The set of type qualifiers for this type. */
716fc477 1472#define TYPE_QUALS(NODE) \
1473 ((TYPE_READONLY (NODE) * TYPE_QUAL_CONST) \
1474 | (TYPE_VOLATILE (NODE) * TYPE_QUAL_VOLATILE) \
1c15359d 1475 | (TYPE_RESTRICT (NODE) * TYPE_QUAL_RESTRICT))
a5b1863e 1476
bc3a4bfd 1477/* These flags are available for each language front end to use internally. */
3e207e38 1478#define TYPE_LANG_FLAG_0(NODE) (TYPE_CHECK (NODE)->type.lang_flag_0)
1479#define TYPE_LANG_FLAG_1(NODE) (TYPE_CHECK (NODE)->type.lang_flag_1)
1480#define TYPE_LANG_FLAG_2(NODE) (TYPE_CHECK (NODE)->type.lang_flag_2)
1481#define TYPE_LANG_FLAG_3(NODE) (TYPE_CHECK (NODE)->type.lang_flag_3)
1482#define TYPE_LANG_FLAG_4(NODE) (TYPE_CHECK (NODE)->type.lang_flag_4)
1483#define TYPE_LANG_FLAG_5(NODE) (TYPE_CHECK (NODE)->type.lang_flag_5)
1484#define TYPE_LANG_FLAG_6(NODE) (TYPE_CHECK (NODE)->type.lang_flag_6)
d72a838e 1485
4ee9c684 1486/* Used to keep track of visited nodes in tree traversals. This is set to
1487 0 by copy_node and make_node. */
1488#define TREE_VISITED(NODE) ((NODE)->common.visited)
1489
b759e947 1490/* If set in an ARRAY_TYPE, indicates a string type (for languages
1491 that distinguish string from array of char).
88b5b080 1492 If set in a SET_TYPE, indicates a bitstring type. */
3e207e38 1493#define TYPE_STRING_FLAG(NODE) (TYPE_CHECK (NODE)->type.string_flag)
b759e947 1494
20dd417a 1495/* If non-NULL, this is an upper bound of the size (in bytes) of an
56ba46a4 1496 object of the given ARRAY_TYPE. This allows temporaries to be
1497 allocated. */
1498#define TYPE_ARRAY_MAX_SIZE(ARRAY_TYPE) \
7559a14d 1499 (ARRAY_TYPE_CHECK (ARRAY_TYPE)->type.maxval)
255218ff 1500
8a95ab85 1501/* For a VECTOR_TYPE, this is the number of sub-parts of the vector. */
56ba46a4 1502#define TYPE_VECTOR_SUBPARTS(VECTOR_TYPE) \
1503 GET_MODE_NUNITS (VECTOR_TYPE_CHECK (VECTOR_TYPE)->type.mode)
8a95ab85 1504
fcdd3ab3 1505/* Indicates that objects of this type must be initialized by calling a
be98dac3 1506 function when they are created. */
851dfbff 1507#define TYPE_NEEDS_CONSTRUCTING(NODE) \
1508 (TYPE_CHECK (NODE)->type.needs_constructing_flag)
be98dac3 1509
fa602b3f 1510/* Indicates that objects of this type (a UNION_TYPE), should be passed
1511 the same way that the first union alternative would be passed. */
851dfbff 1512#define TYPE_TRANSPARENT_UNION(NODE) \
1513 (UNION_TYPE_CHECK (NODE)->type.transparent_union_flag)
1514
1515/* For an ARRAY_TYPE, indicates that it is not permitted to
1516 take the address of a component of the type. */
1517#define TYPE_NONALIASED_COMPONENT(NODE) \
1518 (ARRAY_TYPE_CHECK (NODE)->type.transparent_union_flag)
fa602b3f 1519
ad87de1e 1520/* Indicated that objects of this type should be laid out in as
1a8ea5c4 1521 compact a way as possible. */
3e207e38 1522#define TYPE_PACKED(NODE) (TYPE_CHECK (NODE)->type.packed_flag)
1a8ea5c4 1523
1f3233d1 1524struct die_struct;
1525
1526struct tree_type GTY(())
d72a838e 1527{
851dfbff 1528 struct tree_common common;
6a3e3d6d 1529 tree values;
1530 tree size;
1531 tree size_unit;
1532 tree attributes;
108009b4 1533 unsigned int uid;
d72a838e 1534
108009b4 1535 unsigned int precision : 9;
488c4206 1536 ENUM_BITFIELD(machine_mode) mode : 7;
a12eeaaf 1537
b759e947 1538 unsigned string_flag : 1;
d72a838e 1539 unsigned no_force_blk_flag : 1;
be98dac3 1540 unsigned needs_constructing_flag : 1;
fa602b3f 1541 unsigned transparent_union_flag : 1;
1a8ea5c4 1542 unsigned packed_flag : 1;
a5b1863e 1543 unsigned restrict_flag : 1;
1c15359d 1544 unsigned spare : 2;
a5b1863e 1545
d72a838e 1546 unsigned lang_flag_0 : 1;
1547 unsigned lang_flag_1 : 1;
1548 unsigned lang_flag_2 : 1;
1549 unsigned lang_flag_3 : 1;
1550 unsigned lang_flag_4 : 1;
1551 unsigned lang_flag_5 : 1;
1552 unsigned lang_flag_6 : 1;
aca14577 1553 unsigned user_align : 1;
d72a838e 1554
c926ba81 1555 unsigned int align;
6a3e3d6d 1556 tree pointer_to;
1557 tree reference_to;
1f3233d1 1558 union tree_type_symtab {
60b8c5b3 1559 int GTY ((tag ("0"))) address;
1560 char * GTY ((tag ("1"))) pointer;
573aba85 1561 struct die_struct * GTY ((tag ("2"))) die;
60b8c5b3 1562 } GTY ((desc ("debug_hooks == &sdb_debug_hooks ? 1 : debug_hooks == &dwarf2_debug_hooks ? 2 : 0"),
1f3233d1 1563 descbits ("2"))) symtab;
6a3e3d6d 1564 tree name;
1565 tree minval;
1566 tree maxval;
1567 tree next_variant;
1568 tree main_variant;
1569 tree binfo;
6a3e3d6d 1570 tree context;
f7c44134 1571 HOST_WIDE_INT alias_set;
d72a838e 1572 /* Points to a structure whose details depend on the language in use. */
1573 struct lang_type *lang_specific;
1574};
1575\f
1576/* Define accessor macros for information about type inheritance
1577 and basetypes.
1578
1579 A "basetype" means a particular usage of a data type for inheritance
1580 in another type. Each such basetype usage has its own "binfo"
1581 object to describe it. The binfo object is a TREE_VEC node.
1582
1583 Inheritance is represented by the binfo nodes allocated for a
1584 given type. For example, given types C and D, such that D is
1585 inherited by C, 3 binfo nodes will be allocated: one for describing
1586 the binfo properties of C, similarly one for D, and one for
1587 describing the binfo properties of D as a base type for C.
1588 Thus, given a pointer to class C, one can get a pointer to the binfo
1589 of D acting as a basetype for C by looking at C's binfo's basetypes. */
1590
57c28194 1591/* BINFO specific flags. */
1592
1593/* Nonzero means that the derivation chain is via a `virtual' declaration. */
1594#define BINFO_VIRTUAL_P(NODE) (TREE_BINFO_CHECK (NODE)->common.static_flag)
1595
1596/* Flags for language dependent use. */
1597#define BINFO_MARKED(NODE) TREE_LANG_FLAG_0(TREE_BINFO_CHECK(NODE))
1598#define BINFO_FLAG_1(NODE) TREE_LANG_FLAG_1(TREE_BINFO_CHECK(NODE))
1599#define BINFO_FLAG_2(NODE) TREE_LANG_FLAG_2(TREE_BINFO_CHECK(NODE))
1600#define BINFO_FLAG_3(NODE) TREE_LANG_FLAG_3(TREE_BINFO_CHECK(NODE))
1601#define BINFO_FLAG_4(NODE) TREE_LANG_FLAG_4(TREE_BINFO_CHECK(NODE))
1602#define BINFO_FLAG_5(NODE) TREE_LANG_FLAG_5(TREE_BINFO_CHECK(NODE))
1603#define BINFO_FLAG_6(NODE) TREE_LANG_FLAG_6(TREE_BINFO_CHECK(NODE))
1604
d72a838e 1605/* The actual data type node being inherited in this basetype. */
3cb98335 1606#define BINFO_TYPE(NODE) TREE_TYPE (TREE_BINFO_CHECK(NODE))
d72a838e 1607
1608/* The offset where this basetype appears in its containing type.
1609 BINFO_OFFSET slot holds the offset (in bytes)
1610 from the base of the complete object to the base of the part of the
1611 object that is allocated on behalf of this `type'.
1612 This is always 0 except when there is multiple inheritance. */
6c34d0c2 1613
3cb98335 1614#define BINFO_OFFSET(NODE) (TREE_BINFO_CHECK(NODE)->binfo.offset)
d6c9423f 1615#define BINFO_OFFSET_ZEROP(NODE) (integer_zerop (BINFO_OFFSET (NODE)))
d72a838e 1616
1617/* The virtual function table belonging to this basetype. Virtual
1618 function tables provide a mechanism for run-time method dispatching.
1619 The entries of a virtual function table are language-dependent. */
1620
3cb98335 1621#define BINFO_VTABLE(NODE) (TREE_BINFO_CHECK(NODE)->binfo.vtable)
d72a838e 1622
1623/* The virtual functions in the virtual function table. This is
1624 a TREE_LIST that is used as an initial approximation for building
1625 a virtual function table for this basetype. */
3cb98335 1626#define BINFO_VIRTUALS(NODE) (TREE_BINFO_CHECK(NODE)->binfo.virtuals)
d72a838e 1627
6ed1e0f8 1628/* A vector of binfos for the direct basetypes inherited by this
1629 basetype.
d72a838e 1630
6ed1e0f8 1631 If this basetype describes type D as inherited in C, and if the
1632 basetypes of D are E and F, then this vector contains binfos for
1633 inheritance of E and F by C.
d72a838e 1634
1635 ??? This could probably be done by just allocating the
1636 base types at the end of this TREE_VEC (instead of using
1637 another TREE_VEC). This would simplify the calculation
1638 of how many basetypes a given type had. */
2cfde4f3 1639#define BINFO_BASE_BINFOS(NODE) (TREE_BINFO_CHECK(NODE)->binfo.base_binfos)
d72a838e 1640
824507ab 1641/* The number of basetypes for NODE. */
2cfde4f3 1642#define BINFO_N_BASE_BINFOS(NODE) \
1643 (BINFO_BASE_BINFOS (NODE) ? TREE_VEC_LENGTH (BINFO_BASE_BINFOS (NODE)) : 0)
824507ab 1644
2cfde4f3 1645/* Accessor macro to get to the Nth base binfo of this binfo. */
1646#define BINFO_BASE_BINFO(NODE,N) TREE_VEC_ELT (BINFO_BASE_BINFOS (NODE), (N))
d6c9423f 1647
809d9739 1648/* For a BINFO record describing a virtual base class, i.e., one where
1649 TREE_VIA_VIRTUAL is set, this field assists in locating the virtual
4b922c0c 1650 base. The actual contents are language-dependent. In the C++
1651 front-end this field is an INTEGER_CST giving an offset into the
1652 vtable where the offset to the virtual base can be found. */
3cb98335 1653#define BINFO_VPTR_FIELD(NODE) (TREE_BINFO_CHECK(NODE)->binfo.vptr_field)
44882314 1654
95f3173a 1655/* Indicates the accesses this binfo has to its bases. The values are
1656 access_public_node, access_protected_node or access_private_node.
1657 If this array is not present, public access is implied. */
2cfde4f3 1658#define BINFO_BASE_ACCESSES(NODE) (TREE_BINFO_CHECK(NODE)->binfo.base_accesses)
1659#define BINFO_BASE_ACCESS(NODE,N) TREE_VEC_ELT (BINFO_BASE_ACCESSES(NODE), (N))
95f3173a 1660
1661/* Number of language independent elements in a binfo. Languages may
1662 add additional trailing elements. */
1663
3cb98335 1664#define BINFO_LANG_SLOT(NODE,N) (TREE_BINFO_CHECK(NODE)->binfo.lang_slots[N])
d72a838e 1665
2cfde4f3 1666/* The BINFO_INHERITANCE_CHAIN points at the binfo for the base
1667 inheriting this base for non-virtual bases. For virtual bases it
1668 points to the binfo of the most derived type. */
3cb98335 1669#define BINFO_INHERITANCE_CHAIN(NODE) \
1670 (TREE_BINFO_CHECK(NODE)->binfo.inheritance)
1671
1672struct tree_binfo GTY (())
1673{
1674 struct tree_common common;
1675
1676 tree offset;
1677 tree vtable;
1678 tree virtuals;
2cfde4f3 1679 tree base_binfos;
3cb98335 1680 tree vptr_field;
1681 tree base_accesses;
1682 tree inheritance;
1683
1684 tree GTY ((length ("binfo_lang_slots"))) lang_slots[1];
1685};
1686extern GTY (()) unsigned binfo_lang_slots;
1687
d72a838e 1688\f
1689/* Define fields and accessors for nodes representing declared names. */
1690
713984f9 1691/* Nonzero if DECL represents a decl. */
1692#define DECL_P(DECL) (TREE_CODE_CLASS (TREE_CODE (DECL)) == 'd')
56ba46a4 1693
4ee9c684 1694/* Nonzero if DECL represents a variable for the SSA passes. */
1695#define SSA_VAR_P(DECL) \
1696 (TREE_CODE (DECL) == VAR_DECL \
1697 || TREE_CODE (DECL) == PARM_DECL \
1698 || TREE_CODE (DECL) == RESULT_DECL \
1699 || (TREE_CODE (DECL) == SSA_NAME \
1700 && (TREE_CODE (SSA_NAME_VAR (DECL)) == VAR_DECL \
1701 || TREE_CODE (SSA_NAME_VAR (DECL)) == PARM_DECL \
1702 || TREE_CODE (SSA_NAME_VAR (DECL)) == RESULT_DECL)))
1703
d72a838e 1704/* This is the name of the object as written by the user.
1705 It is an IDENTIFIER_NODE. */
3e207e38 1706#define DECL_NAME(NODE) (DECL_CHECK (NODE)->decl.name)
56ba46a4 1707
7e64c604 1708/* The name of the object as the assembler will see it (but before any
1709 translations made by ASM_OUTPUT_LABELREF). Often this is the same
1710 as DECL_NAME. It is an IDENTIFIER_NODE. */
d1f6c8f2 1711#define DECL_ASSEMBLER_NAME(NODE) decl_assembler_name (NODE)
56ba46a4 1712
f712a0dc 1713/* Returns nonzero if the DECL_ASSEMBLER_NAME for NODE has been set. If zero,
56ba46a4 1714 the NODE might still have a DECL_ASSEMBLER_NAME -- it just hasn't been set
1715 yet. */
7e64c604 1716#define DECL_ASSEMBLER_NAME_SET_P(NODE) \
1717 (DECL_CHECK (NODE)->decl.assembler_name != NULL_TREE)
56ba46a4 1718
7e64c604 1719/* Set the DECL_ASSEMBLER_NAME for NODE to NAME. */
1720#define SET_DECL_ASSEMBLER_NAME(NODE, NAME) \
1721 (DECL_CHECK (NODE)->decl.assembler_name = (NAME))
56ba46a4 1722
1723/* Copy the DECL_ASSEMBLER_NAME from DECL1 to DECL2. Note that if DECL1's
1724 DECL_ASSEMBLER_NAME has not yet been set, using this macro will not cause
1725 the DECL_ASSEMBLER_NAME of either DECL to be set. In other words, the
1726 semantics of using this macro, are different than saying:
6c34d0c2 1727
7e64c604 1728 SET_DECL_ASSEMBLER_NAME(DECL2, DECL_ASSEMBLER_NAME (DECL1))
1729
1730 which will try to set the DECL_ASSEMBLER_NAME for DECL1. */
56ba46a4 1731
7e64c604 1732#define COPY_DECL_ASSEMBLER_NAME(DECL1, DECL2) \
1733 (DECL_ASSEMBLER_NAME_SET_P (DECL1) \
6c34d0c2 1734 ? (void) SET_DECL_ASSEMBLER_NAME (DECL2, \
1735 DECL_ASSEMBLER_NAME (DECL1)) \
7e64c604 1736 : (void) 0)
1737
99c00961 1738/* Records the section name in a section attribute. Used to pass
1739 the name from decl_attributes to make_function_rtl and make_decl_rtl. */
3e207e38 1740#define DECL_SECTION_NAME(NODE) (DECL_CHECK (NODE)->decl.section_name)
56ba46a4 1741
40109983 1742/* For FIELD_DECLs, this is the RECORD_TYPE, UNION_TYPE, or
1743 QUAL_UNION_TYPE node that the field is a member of. For VAR_DECL,
1744 PARM_DECL, FUNCTION_DECL, LABEL_DECL, and CONST_DECL nodes, this
1745 points to either the FUNCTION_DECL for the containing function,
1746 the RECORD_TYPE or UNION_TYPE for the containing type, or
1747 NULL_TREE or a TRANSLATION_UNIT_DECL if the given decl has "file
1748 scope". */
3e207e38 1749#define DECL_CONTEXT(NODE) (DECL_CHECK (NODE)->decl.context)
02e7a332 1750#define DECL_FIELD_CONTEXT(NODE) (FIELD_DECL_CHECK (NODE)->decl.context)
e3c541f0 1751/* In a DECL this is the field where attributes are stored. */
1752#define DECL_ATTRIBUTES(NODE) (DECL_CHECK (NODE)->decl.attributes)
02e7a332 1753/* In a FIELD_DECL, this is the field position, counting in bytes, of the
1754 byte containing the bit closest to the beginning of the structure. */
1755#define DECL_FIELD_OFFSET(NODE) (FIELD_DECL_CHECK (NODE)->decl.arguments)
1756/* In a FIELD_DECL, this is the offset, in bits, of the first bit of the
1757 field from DECL_FIELD_OFFSET. */
1758#define DECL_FIELD_BIT_OFFSET(NODE) (FIELD_DECL_CHECK (NODE)->decl.u2.t)
d72a838e 1759/* In a FIELD_DECL, this indicates whether the field was a bit-field and
9c059d9a 1760 if so, the type that was originally specified for it.
1761 TREE_TYPE may have been modified (in finish_struct). */
02e7a332 1762#define DECL_BIT_FIELD_TYPE(NODE) (FIELD_DECL_CHECK (NODE)->decl.result)
56ba46a4 1763/* In FUNCTION_DECL, a chain of ..._DECL nodes.
1764 VAR_DECL and PARM_DECL reserve the arguments slot for language-specific
1765 uses. */
3e207e38 1766#define DECL_ARGUMENTS(NODE) (DECL_CHECK (NODE)->decl.arguments)
b8e0d419 1767/* This field is used to reference anything in decl.result and is meant only
1768 for use by the garbage collector. */
1769#define DECL_RESULT_FLD(NODE) (DECL_CHECK (NODE)->decl.result)
d72a838e 1770/* In FUNCTION_DECL, holds the decl for the return value. */
02e7a332 1771#define DECL_RESULT(NODE) (FUNCTION_DECL_CHECK (NODE)->decl.result)
e5932677 1772/* For a TYPE_DECL, holds the "original" type. (TREE_TYPE has the copy.) */
02e7a332 1773#define DECL_ORIGINAL_TYPE(NODE) (TYPE_DECL_CHECK (NODE)->decl.result)
d72a838e 1774/* In PARM_DECL, holds the type as written (perhaps a function or array). */
02e7a332 1775#define DECL_ARG_TYPE_AS_WRITTEN(NODE) (PARM_DECL_CHECK (NODE)->decl.result)
d72a838e 1776/* For a FUNCTION_DECL, holds the tree of BINDINGs.
40109983 1777 For a TRANSLATION_UNIT_DECL, holds the namespace's BLOCK.
d72a838e 1778 For a VAR_DECL, holds the initial value.
1779 For a PARM_DECL, not used--default
1780 values for parameters are encoded in the type of the function,
66d12a6c 1781 not in the PARM_DECL slot.
1782
1783 ??? Need to figure out some way to check this isn't a PARM_DECL. */
3e207e38 1784#define DECL_INITIAL(NODE) (DECL_CHECK (NODE)->decl.initial)
d72a838e 1785/* For a PARM_DECL, records the data type used to pass the argument,
1786 which may be different from the type seen in the program. */
02e7a332 1787#define DECL_ARG_TYPE(NODE) (PARM_DECL_CHECK (NODE)->decl.initial)
7dd9d898 1788/* For a FIELD_DECL in a QUAL_UNION_TYPE, records the expression, which
1789 if nonzero, indicates that the field occupies the type. */
02e7a332 1790#define DECL_QUALIFIER(NODE) (FIELD_DECL_CHECK (NODE)->decl.initial)
346064d9 1791/* These two fields describe where in the source code the declaration
1792 was. If the declaration appears in several places (as for a C
1793 function that is declared first and then defined later), this
1794 information should refer to the definition. */
1795#define DECL_SOURCE_LOCATION(NODE) (DECL_CHECK (NODE)->decl.locus)
fdfe4b3f 1796#define DECL_SOURCE_FILE(NODE) LOCATION_FILE (DECL_SOURCE_LOCATION (NODE))
1797#define DECL_SOURCE_LINE(NODE) LOCATION_LINE (DECL_SOURCE_LOCATION (NODE))
1798#ifdef USE_MAPPED_LOCATION
1799#define DECL_IS_BUILTIN(DECL) \
1800 (DECL_SOURCE_LOCATION (DECL) <= BUILTINS_LOCATION)
1801#else
1802#define DECL_IS_BUILTIN(DECL) (DECL_SOURCE_LINE(DECL) == 0)
1803#endif
b278476e 1804/* Holds the size of the datum, in bits, as a tree expression.
d72a838e 1805 Need not be constant. */
3e207e38 1806#define DECL_SIZE(NODE) (DECL_CHECK (NODE)->decl.size)
b278476e 1807/* Likewise for the size in bytes. */
1808#define DECL_SIZE_UNIT(NODE) (DECL_CHECK (NODE)->decl.size_unit)
c6713de4 1809/* Holds the alignment required for the datum, in bits. */
02e7a332 1810#define DECL_ALIGN(NODE) (DECL_CHECK (NODE)->decl.u1.a.align)
c6713de4 1811/* The alignment of NODE, in bytes. */
1812#define DECL_ALIGN_UNIT(NODE) (DECL_ALIGN (NODE) / BITS_PER_UNIT)
b4bb829f 1813/* For FIELD_DECLs, off_align holds the number of low-order bits of
1814 DECL_FIELD_OFFSET which are known to be always zero.
1815 DECL_OFFSET_ALIGN thus returns the alignment that DECL_FIELD_OFFSET
1816 has. */
1817#define DECL_OFFSET_ALIGN(NODE) \
1818 (((unsigned HOST_WIDE_INT)1) << FIELD_DECL_CHECK (NODE)->decl.u1.a.off_align)
1819/* Specify that DECL_ALIGN(NODE) is a multiple of X. */
1820#define SET_DECL_OFFSET_ALIGN(NODE, X) \
1821 (FIELD_DECL_CHECK (NODE)->decl.u1.a.off_align = exact_log2 ((X) & -(X)))
aca14577 1822/* 1 if the alignment for this type was requested by "aligned" attribute,
1823 0 if it is the default for this type. */
1824#define DECL_USER_ALIGN(NODE) (DECL_CHECK (NODE)->decl.user_align)
8fd3ce0b 1825/* Holds the machine mode corresponding to the declaration of a variable or
1826 field. Always equal to TYPE_MODE (TREE_TYPE (decl)) except for a
1827 FIELD_DECL. */
3e207e38 1828#define DECL_MODE(NODE) (DECL_CHECK (NODE)->decl.mode)
6000e302 1829/* Holds the RTL expression for the value of a variable or function.
0e8e37b2 1830 This value can be evaluated lazily for functions, variables with
1831 static storage duration, and labels. */
1832#define DECL_RTL(NODE) \
1833 (DECL_CHECK (NODE)->decl.rtl \
1834 ? (NODE)->decl.rtl \
1835 : (make_decl_rtl (NODE, NULL), (NODE)->decl.rtl))
1836/* Set the DECL_RTL for NODE to RTL. */
ca74b940 1837#define SET_DECL_RTL(NODE, RTL) set_decl_rtl (NODE, RTL)
f712a0dc 1838/* Returns nonzero if the DECL_RTL for NODE has already been set. */
56ba46a4 1839#define DECL_RTL_SET_P(NODE) (DECL_CHECK (NODE)->decl.rtl != NULL)
0e8e37b2 1840/* Copy the RTL from NODE1 to NODE2. If the RTL was not set for
1841 NODE1, it will not be set for NODE2; this is a lazy copy. */
1842#define COPY_DECL_RTL(NODE1, NODE2) \
1843 (DECL_CHECK (NODE2)->decl.rtl = DECL_CHECK (NODE1)->decl.rtl)
1844/* The DECL_RTL for NODE, if it is set, or NULL, if it is not set. */
56ba46a4 1845#define DECL_RTL_IF_SET(NODE) (DECL_RTL_SET_P (NODE) ? DECL_RTL (NODE) : NULL)
1846
d72a838e 1847/* For PARM_DECL, holds an RTL for the stack slot or register
1848 where the data was actually passed. */
02e7a332 1849#define DECL_INCOMING_RTL(NODE) (PARM_DECL_CHECK (NODE)->decl.u2.r)
56ba46a4 1850
cbc44df5 1851/* For FUNCTION_DECL, this holds a pointer to a structure ("struct function")
1852 that describes the status of this function. */
1853#define DECL_STRUCT_FUNCTION(NODE) (FUNCTION_DECL_CHECK (NODE)->decl.u2.f)
56ba46a4 1854
463a5bad 1855/* For FUNCTION_DECL, if it is built-in,
1856 this identifies which built-in operation it is. */
02e7a332 1857#define DECL_FUNCTION_CODE(NODE) (FUNCTION_DECL_CHECK (NODE)->decl.u1.f)
d72a838e 1858
1859/* The DECL_VINDEX is used for FUNCTION_DECLS in two different ways.
1860 Before the struct containing the FUNCTION_DECL is laid out,
1861 DECL_VINDEX may point to a FUNCTION_DECL in a base class which
1862 is the FUNCTION_DECL which this FUNCTION_DECL will replace as a virtual
1863 function. When the class is laid out, this pointer is changed
1864 to an INTEGER_CST node which is suitable for use as an index
1865 into the virtual function table. */
3e207e38 1866#define DECL_VINDEX(NODE) (DECL_CHECK (NODE)->decl.vindex)
56ba46a4 1867
d72a838e 1868/* For FIELD_DECLS, DECL_FCONTEXT is the *first* baseclass in
1869 which this FIELD_DECL is defined. This information is needed when
1870 writing debugging information about vfield and vbase decls for C++. */
02e7a332 1871#define DECL_FCONTEXT(NODE) (FIELD_DECL_CHECK (NODE)->decl.vindex)
d72a838e 1872
6053ec2b 1873/* Every ..._DECL node gets a unique number. */
3e207e38 1874#define DECL_UID(NODE) (DECL_CHECK (NODE)->decl.uid)
6053ec2b 1875
f7a75810 1876/* For any sort of a ..._DECL node, this points to the original (abstract)
1877 decl node which this decl is an instance of, or else it is NULL indicating
62c36aa3 1878 that this decl is not an instance of some other decl. For example,
1879 in a nested declaration of an inline function, this points back to the
1880 definition. */
3e207e38 1881#define DECL_ABSTRACT_ORIGIN(NODE) (DECL_CHECK (NODE)->decl.abstract_origin)
f7a75810 1882
c0671ae8 1883/* Like DECL_ABSTRACT_ORIGIN, but returns NODE if there's no abstract
1884 origin. This is useful when setting the DECL_ABSTRACT_ORIGIN. */
1885#define DECL_ORIGIN(NODE) \
76c6f48d 1886 (DECL_ABSTRACT_ORIGIN (NODE) ? DECL_ABSTRACT_ORIGIN (NODE) : (NODE))
c0671ae8 1887
c8c4ca6d 1888/* Nonzero for any sort of ..._DECL node means this decl node represents an
1889 inline instance of some original (abstract) decl from an inline function;
1890 suppress any warnings about shadowing some other variable. FUNCTION_DECL
88b5b080 1891 nodes can also have their abstract origin set to themselves. */
76c6f48d 1892#define DECL_FROM_INLINE(NODE) (DECL_ABSTRACT_ORIGIN (NODE) != NULL_TREE \
a93d2759 1893 && DECL_ABSTRACT_ORIGIN (NODE) != (NODE))
d72a838e 1894
1895/* Nonzero if a _DECL means that the name of this decl should be ignored
1896 for symbolic debug purposes. */
3e207e38 1897#define DECL_IGNORED_P(NODE) (DECL_CHECK (NODE)->decl.ignored_flag)
d72a838e 1898
f7a75810 1899/* Nonzero for a given ..._DECL node means that this node represents an
1900 "abstract instance" of the given declaration (e.g. in the original
1901 declaration of an inline function). When generating symbolic debugging
c3418f42 1902 information, we mustn't try to generate any address information for nodes
f7a75810 1903 marked as "abstract instances" because we don't actually generate
1904 any code or allocate any data space for such instances. */
3e207e38 1905#define DECL_ABSTRACT(NODE) (DECL_CHECK (NODE)->decl.abstract_flag)
f7a75810 1906
9ed1ded5 1907/* Nonzero if a _DECL means that no warnings should be generated just
1908 because this decl is unused. */
56ba46a4 1909#define DECL_IN_SYSTEM_HEADER(NODE) \
1910 (DECL_CHECK (NODE)->decl.in_system_header_flag)
9ed1ded5 1911
f7a772a7 1912/* Nonzero for a given ..._DECL node means that this node should be
1913 put in .common, if possible. If a DECL_INITIAL is given, and it
1914 is not error_mark_node, then the decl cannot be put in .common. */
3e207e38 1915#define DECL_COMMON(NODE) (DECL_CHECK (NODE)->decl.common_flag)
f7a772a7 1916
9ed1ded5 1917/* Language-specific decl information. */
3e207e38 1918#define DECL_LANG_SPECIFIC(NODE) (DECL_CHECK (NODE)->decl.lang_specific)
d72a838e 1919
1920/* In a VAR_DECL or FUNCTION_DECL,
1921 nonzero means external reference:
1922 do not allocate storage, and refer to a definition elsewhere. */
3e207e38 1923#define DECL_EXTERNAL(NODE) (DECL_CHECK (NODE)->decl.external_flag)
d72a838e 1924
9bc65db1 1925/* In a VAR_DECL for a RECORD_TYPE, sets number for non-init_priority
de132707 1926 initializations. */
9bc65db1 1927#define DEFAULT_INIT_PRIORITY 65535
1928#define MAX_INIT_PRIORITY 65535
34341acb 1929#define MAX_RESERVED_INIT_PRIORITY 100
9bc65db1 1930
203891af 1931/* In a TYPE_DECL
1932 nonzero means the detail info about this type is not dumped into stabs.
6c34d0c2 1933 Instead it will generate cross reference ('x') of names.
88b5b080 1934 This uses the same flag as DECL_EXTERNAL. */
02e7a332 1935#define TYPE_DECL_SUPPRESS_DEBUG(NODE) \
56ba46a4 1936 (TYPE_DECL_CHECK (NODE)->decl.external_flag)
203891af 1937
7e787821 1938/* In VAR_DECL and PARM_DECL nodes, nonzero means declared `register'. */
3e207e38 1939#define DECL_REGISTER(NODE) (DECL_CHECK (NODE)->decl.regdecl_flag)
56ba46a4 1940
7e787821 1941/* In LABEL_DECL nodes, nonzero means that an error message about
1942 jumping into such a binding contour has been printed for this label. */
02e7a332 1943#define DECL_ERROR_ISSUED(NODE) (LABEL_DECL_CHECK (NODE)->decl.regdecl_flag)
56ba46a4 1944
077bcaed 1945/* In a FIELD_DECL, indicates this field should be bit-packed. */
02e7a332 1946#define DECL_PACKED(NODE) (FIELD_DECL_CHECK (NODE)->decl.regdecl_flag)
56ba46a4 1947
f712a0dc 1948/* In a FUNCTION_DECL with a nonzero DECL_CONTEXT, indicates that a
7e787821 1949 static chain is not needed. */
02e7a332 1950#define DECL_NO_STATIC_CHAIN(NODE) \
56ba46a4 1951 (FUNCTION_DECL_CHECK (NODE)->decl.regdecl_flag)
d72a838e 1952
1953/* Nonzero in a ..._DECL means this variable is ref'd from a nested function.
1954 For VAR_DECL nodes, PARM_DECL nodes, and FUNCTION_DECL nodes.
1955
1956 For LABEL_DECL nodes, nonzero if nonlocal gotos to the label are permitted.
1957
1958 Also set in some languages for variables, etc., outside the normal
1959 lexical scope, such as class instance variables. */
3e207e38 1960#define DECL_NONLOCAL(NODE) (DECL_CHECK (NODE)->decl.nonlocal_flag)
d72a838e 1961
1962/* Nonzero in a FUNCTION_DECL means this function can be substituted
1963 where it is called. */
02e7a332 1964#define DECL_INLINE(NODE) (FUNCTION_DECL_CHECK (NODE)->decl.inline_flag)
d72a838e 1965
746149b7 1966/* Nonzero in a FUNCTION_DECL means that this function was declared inline,
1967 such as via the `inline' keyword in C/C++. This flag controls the linkage
1968 semantics of 'inline'; whether or not the function is inlined is
1969 controlled by DECL_INLINE. */
1970#define DECL_DECLARED_INLINE_P(NODE) \
1971 (FUNCTION_DECL_CHECK (NODE)->decl.declared_inline_flag)
e2b04249 1972
60f65a0a 1973/* Nonzero in a decl means that the gimplifier has seen (or placed)
1974 this variable in a BIND_EXPR. */
1975#define DECL_SEEN_IN_BIND_EXPR_P(NODE) \
1976 (DECL_CHECK (NODE)->decl.seen_in_bind_expr)
1977
4ee9c684 1978/* In a VAR_DECL, nonzero if the decl is a register variable with
1979 an explicit asm specification. */
1980#define DECL_HARD_REGISTER(NODE) (DECL_CHECK (NODE)->decl.inline_flag)
1981
9c40570a 1982/* Value of the decls's visibility attribute */
1983#define DECL_VISIBILITY(NODE) (DECL_CHECK (NODE)->decl.visibility)
1984
8f80e66d 1985/* In a FUNCTION_DECL, nonzero if the function cannot be inlined. */
1986#define DECL_UNINLINABLE(NODE) (FUNCTION_DECL_CHECK (NODE)->decl.uninlinable)
1987
6c34d0c2 1988/* In a VAR_DECL, nonzero if the data should be allocated from
2a6f0f81 1989 thread-local storage. */
1990#define DECL_THREAD_LOCAL(NODE) (VAR_DECL_CHECK (NODE)->decl.thread_local_flag)
1991
1431bff6 1992/* In a FUNCTION_DECL, the saved representation of the body of the
632f8185 1993 entire function. */
1431bff6 1994#define DECL_SAVED_TREE(NODE) (FUNCTION_DECL_CHECK (NODE)->decl.saved_tree)
1995
734c98be 1996/* List of FUNCTION_DECLs inlined into this function's body. */
1431bff6 1997#define DECL_INLINED_FNS(NODE) (FUNCTION_DECL_CHECK (NODE)->decl.inlined_fns)
1998
7259f3f8 1999/* Nonzero in a FUNCTION_DECL means this function should be treated
2000 as if it were a malloc, meaning it returns a pointer that is
2001 not an alias. */
02e7a332 2002#define DECL_IS_MALLOC(NODE) (FUNCTION_DECL_CHECK (NODE)->decl.malloc_flag)
7259f3f8 2003
26dfc457 2004/* Nonzero in a FUNCTION_DECL means this function should be treated
2005 as "pure" function (like const function, but may read global memory). */
2006#define DECL_IS_PURE(NODE) (FUNCTION_DECL_CHECK (NODE)->decl.pure_flag)
2007
d72a838e 2008/* Nonzero in a FIELD_DECL means it is a bit field, and must be accessed
2009 specially. */
02e7a332 2010#define DECL_BIT_FIELD(NODE) (FIELD_DECL_CHECK (NODE)->decl.bit_field_flag)
56ba46a4 2011
00dd2e9e 2012/* Unused in FUNCTION_DECL. */
8305149e 2013
3566762d 2014/* In a VAR_DECL that's static,
2015 nonzero if the space is in the text section. */
02e7a332 2016#define DECL_IN_TEXT_SECTION(NODE) (VAR_DECL_CHECK (NODE)->decl.bit_field_flag)
d72a838e 2017
00dd2e9e 2018/* In a FUNCTION_DECL, nonzero means a built in function. */
2019#define DECL_BUILT_IN(NODE) (DECL_BUILT_IN_CLASS (NODE) != NOT_BUILT_IN)
56ba46a4 2020
00dd2e9e 2021/* For a builtin function, identify which part of the compiler defined it. */
02e7a332 2022#define DECL_BUILT_IN_CLASS(NODE) \
56ba46a4 2023 (FUNCTION_DECL_CHECK (NODE)->decl.built_in_class)
00dd2e9e 2024
077bcaed 2025/* Used in VAR_DECLs to indicate that the variable is a vtable.
d7565c5a 2026 Used in FIELD_DECLs for vtable pointers.
2027 Used in FUNCTION_DECLs to indicate that the function is virtual. */
3e207e38 2028#define DECL_VIRTUAL_P(NODE) (DECL_CHECK (NODE)->decl.virtual_flag)
d72a838e 2029
2682e5d6 2030/* Used to indicate that the linkage status of this DECL is not yet known,
2031 so it should not be output now. */
3e207e38 2032#define DECL_DEFER_OUTPUT(NODE) (DECL_CHECK (NODE)->decl.defer_output)
2682e5d6 2033
fa602b3f 2034/* Used in PARM_DECLs whose type are unions to indicate that the
2035 argument should be passed in the same way that the first union
2036 alternative would be passed. */
02e7a332 2037#define DECL_TRANSPARENT_UNION(NODE) \
56ba46a4 2038 (PARM_DECL_CHECK (NODE)->decl.transparent_union)
fa602b3f 2039
aa5ec236 2040/* Used in FUNCTION_DECLs to indicate that they should be run automatically
2041 at the beginning or end of execution. */
02e7a332 2042#define DECL_STATIC_CONSTRUCTOR(NODE) \
56ba46a4 2043 (FUNCTION_DECL_CHECK (NODE)->decl.static_ctor_flag)
02e7a332 2044
2045#define DECL_STATIC_DESTRUCTOR(NODE) \
2046(FUNCTION_DECL_CHECK (NODE)->decl.static_dtor_flag)
aa5ec236 2047
c8ba8c46 2048/* Used to indicate that this DECL represents a compiler-generated entity. */
3e207e38 2049#define DECL_ARTIFICIAL(NODE) (DECL_CHECK (NODE)->decl.artificial_flag)
c8ba8c46 2050
9a0ce7db 2051/* Used to indicate that this DECL has weak linkage. */
3e207e38 2052#define DECL_WEAK(NODE) (DECL_CHECK (NODE)->decl.weak_flag)
9a0ce7db 2053
f65e3573 2054/* Used in TREE_PUBLIC decls to indicate that copies of this DECL in
2055 multiple translation units should be merged. */
3e207e38 2056#define DECL_ONE_ONLY(NODE) (DECL_CHECK (NODE)->decl.transparent_union)
f65e3573 2057
d1d06be2 2058/* Used in a DECL to indicate that, even if it TREE_PUBLIC, it need
2059 not be put out unless it is needed in this translation unit.
2060 Entities like this are shared across translation units (like weak
2061 entities), but are guaranteed to be generated by any translation
2062 unit that needs them, and therefore need not be put out anywhere
2063 where they are not needed. DECL_COMDAT is just a hint to the
2064 back-end; it is up to front-ends which set this flag to ensure
2065 that there will never be any harm, other than bloat, in putting out
2066 something which is DECL_COMDAT. */
2067#define DECL_COMDAT(NODE) (DECL_CHECK (NODE)->decl.comdat_flag)
2068
abd28cef 2069/* Used in FUNCTION_DECLs to indicate that function entry and exit should
2070 be instrumented with calls to support routines. */
02e7a332 2071#define DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT(NODE) \
56ba46a4 2072 (FUNCTION_DECL_CHECK (NODE)->decl.no_instrument_function_entry_exit)
abd28cef 2073
8f8ac140 2074/* Used in FUNCTION_DECLs to indicate that limit-stack-* should be
2075 disabled in this function. */
02e7a332 2076#define DECL_NO_LIMIT_STACK(NODE) \
56ba46a4 2077 (FUNCTION_DECL_CHECK (NODE)->decl.no_limit_stack)
8f8ac140 2078
d72a838e 2079/* Additional flags for language-specific uses. */
3e207e38 2080#define DECL_LANG_FLAG_0(NODE) (DECL_CHECK (NODE)->decl.lang_flag_0)
2081#define DECL_LANG_FLAG_1(NODE) (DECL_CHECK (NODE)->decl.lang_flag_1)
2082#define DECL_LANG_FLAG_2(NODE) (DECL_CHECK (NODE)->decl.lang_flag_2)
2083#define DECL_LANG_FLAG_3(NODE) (DECL_CHECK (NODE)->decl.lang_flag_3)
2084#define DECL_LANG_FLAG_4(NODE) (DECL_CHECK (NODE)->decl.lang_flag_4)
2085#define DECL_LANG_FLAG_5(NODE) (DECL_CHECK (NODE)->decl.lang_flag_5)
2086#define DECL_LANG_FLAG_6(NODE) (DECL_CHECK (NODE)->decl.lang_flag_6)
2087#define DECL_LANG_FLAG_7(NODE) (DECL_CHECK (NODE)->decl.lang_flag_7)
d72a838e 2088
c6f5e832 2089/* Used to indicate that the pointer to this DECL cannot be treated as
2090 an address constant. */
2091#define DECL_NON_ADDR_CONST_P(NODE) (DECL_CHECK (NODE)->decl.non_addr_const_p)
2092
851dfbff 2093/* Used in a FIELD_DECL to indicate that we cannot form the address of
2094 this component. */
2095#define DECL_NONADDRESSABLE_P(NODE) \
2096 (FIELD_DECL_CHECK (NODE)->decl.non_addressable)
2097
a5b1863e 2098/* Used to indicate an alias set for the memory pointed to by this
2099 particular FIELD_DECL, PARM_DECL, or VAR_DECL, which must have
2100 pointer (or reference) type. */
2101#define DECL_POINTER_ALIAS_SET(NODE) \
2102 (DECL_CHECK (NODE)->decl.pointer_alias_set)
2103
0bed3869 2104/* Used to store the alias_var for a DECL node. */
4ee9c684 2105#define DECL_PTA_ALIASVAR(NODE) \
2106 (DECL_CHECK (NODE)->decl.alias_var)
2107
2108/* A numeric unique identifier for a LABEL_DECL. The UID allocation is
2109 dense, unique within any one function, and may be used to index arrays.
2110 If the value is -1, then no UID has been assigned. */
2111#define LABEL_DECL_UID(NODE) \
2112 (LABEL_DECL_CHECK (NODE)->decl.pointer_alias_set)
2113
a5b1863e 2114/* Nonzero if an alias set has been assigned to this declaration. */
2115#define DECL_POINTER_ALIAS_SET_KNOWN_P(NODE) \
2116 (DECL_POINTER_ALIAS_SET (NODE) != - 1)
2117
3a2bf8d3 2118/* Nonzero for a decl which is at file scope. */
2119#define DECL_FILE_SCOPE_P(EXP) \
2120 (! DECL_CONTEXT (EXP) \
2121 || TREE_CODE (DECL_CONTEXT (EXP)) == TRANSLATION_UNIT_DECL)
2122
4ee9c684 2123/* Nonzero for a decl that has been marked as needing a memory slot.
2124 NOTE: Never use this macro directly. It will give you incomplete
2125 information. Most of the time this bit will only be set after alias
2126 analysis in the tree optimizers. It's always better to call
2127 needs_to_live_in_memory instead. To mark memory variables use
2128 mark_call_clobbered. */
2129#define DECL_NEEDS_TO_LIVE_IN_MEMORY_INTERNAL(DECL) \
2130 DECL_CHECK (DECL)->decl.needs_to_live_in_memory
2131
e1232ce2 2132/* Nonzero for a decl that cgraph has decided should be inlined into
2133 at least one call site. It is not meaningful to look at this
2134 directly; always use cgraph_function_possibly_inlined_p. */
2135#define DECL_POSSIBLY_INLINED(DECL) \
2136 FUNCTION_DECL_CHECK (DECL)->decl.possibly_inlined
2137
9c40570a 2138/* Enumerate visibility settings. */
2139
2140enum symbol_visibility
2141{
2142 VISIBILITY_DEFAULT,
2143 VISIBILITY_INTERNAL,
2144 VISIBILITY_HIDDEN,
2145 VISIBILITY_PROTECTED
2146};
2147
821653e1 2148struct function;
4ee9c684 2149union alias_var_def;
1f3233d1 2150struct tree_decl GTY(())
d72a838e 2151{
851dfbff 2152 struct tree_common common;
73b2a785 2153 location_t locus;
6053ec2b 2154 unsigned int uid;
6a3e3d6d 2155 tree size;
bec79597 2156 ENUM_BITFIELD(machine_mode) mode : 8;
d72a838e 2157
2158 unsigned external_flag : 1;
2159 unsigned nonlocal_flag : 1;
2160 unsigned regdecl_flag : 1;
2161 unsigned inline_flag : 1;
2162 unsigned bit_field_flag : 1;
2163 unsigned virtual_flag : 1;
d72a838e 2164 unsigned ignored_flag : 1;
f7a75810 2165 unsigned abstract_flag : 1;
d72a838e 2166
9ed1ded5 2167 unsigned in_system_header_flag : 1;
f7a772a7 2168 unsigned common_flag : 1;
2682e5d6 2169 unsigned defer_output : 1;
fa602b3f 2170 unsigned transparent_union : 1;
aa5ec236 2171 unsigned static_ctor_flag : 1;
2172 unsigned static_dtor_flag : 1;
c8ba8c46 2173 unsigned artificial_flag : 1;
9a0ce7db 2174 unsigned weak_flag : 1;
9ed1ded5 2175
ab7943b9 2176 unsigned non_addr_const_p : 1;
2177 unsigned no_instrument_function_entry_exit : 1;
ab7943b9 2178 unsigned comdat_flag : 1;
2179 unsigned malloc_flag : 1;
2180 unsigned no_limit_stack : 1;
488c4206 2181 ENUM_BITFIELD(built_in_class) built_in_class : 2;
851dfbff 2182 unsigned pure_flag : 1;
8a06f2d4 2183
851dfbff 2184 unsigned non_addressable : 1;
aca14577 2185 unsigned user_align : 1;
8f80e66d 2186 unsigned uninlinable : 1;
2a6f0f81 2187 unsigned thread_local_flag : 1;
746149b7 2188 unsigned declared_inline_flag : 1;
4ee9c684 2189 unsigned seen_in_bind_expr : 1;
9c40570a 2190 ENUM_BITFIELD(symbol_visibility) visibility : 2;
ab7943b9 2191
d72a838e 2192 unsigned lang_flag_0 : 1;
2193 unsigned lang_flag_1 : 1;
2194 unsigned lang_flag_2 : 1;
2195 unsigned lang_flag_3 : 1;
2196 unsigned lang_flag_4 : 1;
2197 unsigned lang_flag_5 : 1;
2198 unsigned lang_flag_6 : 1;
2199 unsigned lang_flag_7 : 1;
2200
4ee9c684 2201 unsigned needs_to_live_in_memory : 1;
e1232ce2 2202 unsigned possibly_inlined : 1;
2203 /* 14 unused bits. */
4ee9c684 2204
1f3233d1 2205 union tree_decl_u1 {
1f1fa73c 2206 /* In a FUNCTION_DECL for which DECL_BUILT_IN holds, this is
2207 DECL_FUNCTION_CODE. */
ab7943b9 2208 enum built_in_function f;
28c2d844 2209 /* In a FUNCTION_DECL for which DECL_BUILT_IN does not hold, this
1f1fa73c 2210 is used by language-dependent code. */
2211 HOST_WIDE_INT i;
2212 /* DECL_ALIGN and DECL_OFFSET_ALIGN. (These are not used for
2213 FUNCTION_DECLs). */
1f3233d1 2214 struct tree_decl_u1_a {
60b8c5b3 2215 unsigned int align : 24;
1f3233d1 2216 unsigned int off_align : 8;
2217 } a;
7035b2ab 2218 } GTY ((skip)) u1;
9a7aa5df 2219
6a3e3d6d 2220 tree size_unit;
2221 tree name;
2222 tree context;
2223 tree arguments; /* Also used for DECL_FIELD_OFFSET */
2224 tree result; /* Also used for DECL_BIT_FIELD_TYPE */
2225 tree initial; /* Also used for DECL_QUALIFIER */
2226 tree abstract_origin;
2227 tree assembler_name;
2228 tree section_name;
e3c541f0 2229 tree attributes;
6a3e3d6d 2230 rtx rtl; /* RTL representation for object. */
b278476e 2231
ab7943b9 2232 /* In FUNCTION_DECL, if it is inline, holds the saved insn chain.
02e7a332 2233 In FIELD_DECL, is DECL_FIELD_BIT_OFFSET.
ab7943b9 2234 In PARM_DECL, holds an RTL for the stack slot
2235 of register where the data was actually passed.
2236 Used by Chill and Java in LABEL_DECL and by C++ and Java in VAR_DECL. */
1f3233d1 2237 union tree_decl_u2 {
2238 struct function * GTY ((tag ("FUNCTION_DECL"))) f;
2239 rtx GTY ((tag ("PARM_DECL"))) r;
2240 tree GTY ((tag ("FIELD_DECL"))) t;
573aba85 2241 int GTY ((tag ("VAR_DECL"))) i;
1f3233d1 2242 } GTY ((desc ("TREE_CODE((tree) &(%0))"))) u2;
ab7943b9 2243
1431bff6 2244 /* In a FUNCTION_DECL, this is DECL_SAVED_TREE. */
2245 tree saved_tree;
2246
2247 /* In a FUNCTION_DECL, these are function data which is to be kept
2248 as long as FUNCTION_DECL is kept. */
2249 tree inlined_fns;
2250
6a3e3d6d 2251 tree vindex;
f7c44134 2252 HOST_WIDE_INT pointer_alias_set;
4ee9c684 2253 union alias_var_def *GTY ((skip(""))) alias_var;
d72a838e 2254 /* Points to a structure whose details depend on the language in use. */
2255 struct lang_decl *lang_specific;
2256};
4ee9c684 2257
2258\f
2259/* A STATEMENT_LIST chains statements together in GENERIC and GIMPLE.
2260 To reduce overhead, the nodes containing the statements are not trees.
2261 This avoids the overhead of tree_common on all linked list elements.
2262
2263 Use the interface in tree-iterator.h to access this node. */
2264
2265#define STATEMENT_LIST_HEAD(NODE) \
2266 (STATEMENT_LIST_CHECK (NODE)->stmt_list.head)
2267#define STATEMENT_LIST_TAIL(NODE) \
2268 (STATEMENT_LIST_CHECK (NODE)->stmt_list.tail)
2269
2270struct tree_statement_list_node
2271 GTY ((chain_next ("%h.next"), chain_prev ("%h.prev")))
2272{
2273 struct tree_statement_list_node *prev;
2274 struct tree_statement_list_node *next;
2275 tree stmt;
2276};
2277
2278struct tree_statement_list
2279 GTY(())
2280{
2281 struct tree_common common;
2282 struct tree_statement_list_node *head;
2283 struct tree_statement_list_node *tail;
2284};
6354ec2d 2285
2286#define VALUE_HANDLE_ID(NODE) \
2287 (VALUE_HANDLE_CHECK (NODE)->value_handle.id)
2288
2289#define VALUE_HANDLE_EXPR_SET(NODE) \
2290 (VALUE_HANDLE_CHECK (NODE)->value_handle.expr_set)
2291
2292/* Defined and used in tree-ssa-pre.c. */
2293struct value_set;
2294
2295struct tree_value_handle GTY(())
2296{
2297 struct tree_common common;
2298
2299 /* The set of expressions represented by this handle. */
2300 struct value_set * GTY ((skip)) expr_set;
2301
2302 /* Unique ID for this value handle. IDs are handed out in a
2303 conveniently dense form starting at 0, so that we can make
2304 bitmaps of value handles. */
2305 unsigned int id;
2306};
d72a838e 2307\f
1f3233d1 2308enum tree_node_structure_enum {
2309 TS_COMMON,
2310 TS_INT_CST,
2311 TS_REAL_CST,
2312 TS_VECTOR,
2313 TS_STRING,
2314 TS_COMPLEX,
2315 TS_IDENTIFIER,
2316 TS_DECL,
2317 TS_TYPE,
2318 TS_LIST,
2319 TS_VEC,
2320 TS_EXP,
4ee9c684 2321 TS_SSA_NAME,
2322 TS_PHI_NODE,
1f3233d1 2323 TS_BLOCK,
3cb98335 2324 TS_BINFO,
4ee9c684 2325 TS_STATEMENT_LIST,
6354ec2d 2326 TS_VALUE_HANDLE,
1f3233d1 2327 LAST_TS_ENUM
2328};
2329
d72a838e 2330/* Define the overall contents of a tree node.
2331 It may be any of the structures declared above
2332 for various types of node. */
2333
1f3233d1 2334union tree_node GTY ((ptr_alias (union lang_tree_node),
2335 desc ("tree_node_structure (&%h)")))
d72a838e 2336{
1f3233d1 2337 struct tree_common GTY ((tag ("TS_COMMON"))) common;
2338 struct tree_int_cst GTY ((tag ("TS_INT_CST"))) int_cst;
2339 struct tree_real_cst GTY ((tag ("TS_REAL_CST"))) real_cst;
2340 struct tree_vector GTY ((tag ("TS_VECTOR"))) vector;
2341 struct tree_string GTY ((tag ("TS_STRING"))) string;
2342 struct tree_complex GTY ((tag ("TS_COMPLEX"))) complex;
2343 struct tree_identifier GTY ((tag ("TS_IDENTIFIER"))) identifier;
2344 struct tree_decl GTY ((tag ("TS_DECL"))) decl;
2345 struct tree_type GTY ((tag ("TS_TYPE"))) type;
2346 struct tree_list GTY ((tag ("TS_LIST"))) list;
2347 struct tree_vec GTY ((tag ("TS_VEC"))) vec;
2348 struct tree_exp GTY ((tag ("TS_EXP"))) exp;
4ee9c684 2349 struct tree_ssa_name GTY ((tag ("TS_SSA_NAME"))) ssa_name;
2350 struct tree_phi_node GTY ((tag ("TS_PHI_NODE"))) phi;
1f3233d1 2351 struct tree_block GTY ((tag ("TS_BLOCK"))) block;
3cb98335 2352 struct tree_binfo GTY ((tag ("TS_BINFO"))) binfo;
4ee9c684 2353 struct tree_statement_list GTY ((tag ("TS_STATEMENT_LIST"))) stmt_list;
6354ec2d 2354 struct tree_value_handle GTY ((tag ("TS_VALUE_HANDLE"))) value_handle;
4ee9c684 2355};
5059aa85 2356\f
775e7cc0 2357/* Standard named or nameless data types of the C compiler. */
2358
2359enum tree_index
2360{
2361 TI_ERROR_MARK,
2362 TI_INTQI_TYPE,
2363 TI_INTHI_TYPE,
2364 TI_INTSI_TYPE,
2365 TI_INTDI_TYPE,
2366 TI_INTTI_TYPE,
2367
2368 TI_UINTQI_TYPE,
2369 TI_UINTHI_TYPE,
2370 TI_UINTSI_TYPE,
2371 TI_UINTDI_TYPE,
2372 TI_UINTTI_TYPE,
6c34d0c2 2373
775e7cc0 2374 TI_INTEGER_ZERO,
2375 TI_INTEGER_ONE,
c87787ad 2376 TI_INTEGER_MINUS_ONE,
775e7cc0 2377 TI_NULL_POINTER,
2378
2379 TI_SIZE_ZERO,
2380 TI_SIZE_ONE,
02e7a332 2381
2382 TI_BITSIZE_ZERO,
2383 TI_BITSIZE_ONE,
2384 TI_BITSIZE_UNIT,
2385
2c584053 2386 TI_PUBLIC,
2387 TI_PROTECTED,
2388 TI_PRIVATE,
2389
3c2239cf 2390 TI_BOOLEAN_FALSE,
2391 TI_BOOLEAN_TRUE,
2392
775e7cc0 2393 TI_COMPLEX_INTEGER_TYPE,
2394 TI_COMPLEX_FLOAT_TYPE,
2395 TI_COMPLEX_DOUBLE_TYPE,
2396 TI_COMPLEX_LONG_DOUBLE_TYPE,
2397
2398 TI_FLOAT_TYPE,
2399 TI_DOUBLE_TYPE,
2400 TI_LONG_DOUBLE_TYPE,
2401
4070bd43 2402 TI_FLOAT_PTR_TYPE,
2403 TI_DOUBLE_PTR_TYPE,
2404 TI_LONG_DOUBLE_PTR_TYPE,
2405 TI_INTEGER_PTR_TYPE,
2406
775e7cc0 2407 TI_VOID_TYPE,
2408 TI_PTR_TYPE,
2409 TI_CONST_PTR_TYPE,
654ef926 2410 TI_SIZE_TYPE,
73673831 2411 TI_PID_TYPE,
775e7cc0 2412 TI_PTRDIFF_TYPE,
2413 TI_VA_LIST_TYPE,
3c2239cf 2414 TI_BOOLEAN_TYPE,
e256d445 2415 TI_FILEPTR_TYPE,
775e7cc0 2416
83f69b41 2417 TI_VOID_LIST_NODE,
2418
5c62f199 2419 TI_MAIN_IDENTIFIER,
2420
775e7cc0 2421 TI_MAX
2422};
2423
1f3233d1 2424extern GTY(()) tree global_trees[TI_MAX];
775e7cc0 2425
2426#define error_mark_node global_trees[TI_ERROR_MARK]
6c34d0c2 2427
775e7cc0 2428#define intQI_type_node global_trees[TI_INTQI_TYPE]
2429#define intHI_type_node global_trees[TI_INTHI_TYPE]
2430#define intSI_type_node global_trees[TI_INTSI_TYPE]
2431#define intDI_type_node global_trees[TI_INTDI_TYPE]
2432#define intTI_type_node global_trees[TI_INTTI_TYPE]
2433
2434#define unsigned_intQI_type_node global_trees[TI_UINTQI_TYPE]
2435#define unsigned_intHI_type_node global_trees[TI_UINTHI_TYPE]
2436#define unsigned_intSI_type_node global_trees[TI_UINTSI_TYPE]
2437#define unsigned_intDI_type_node global_trees[TI_UINTDI_TYPE]
2438#define unsigned_intTI_type_node global_trees[TI_UINTTI_TYPE]
2439
775e7cc0 2440#define integer_zero_node global_trees[TI_INTEGER_ZERO]
2441#define integer_one_node global_trees[TI_INTEGER_ONE]
c87787ad 2442#define integer_minus_one_node global_trees[TI_INTEGER_MINUS_ONE]
775e7cc0 2443#define size_zero_node global_trees[TI_SIZE_ZERO]
2444#define size_one_node global_trees[TI_SIZE_ONE]
02e7a332 2445#define bitsize_zero_node global_trees[TI_BITSIZE_ZERO]
2446#define bitsize_one_node global_trees[TI_BITSIZE_ONE]
2447#define bitsize_unit_node global_trees[TI_BITSIZE_UNIT]
2448
95f3173a 2449/* Base access nodes. */
2c584053 2450#define access_public_node global_trees[TI_PUBLIC]
2451#define access_protected_node global_trees[TI_PROTECTED]
2452#define access_private_node global_trees[TI_PRIVATE]
95f3173a 2453
775e7cc0 2454#define null_pointer_node global_trees[TI_NULL_POINTER]
2455
2456#define float_type_node global_trees[TI_FLOAT_TYPE]
2457#define double_type_node global_trees[TI_DOUBLE_TYPE]
2458#define long_double_type_node global_trees[TI_LONG_DOUBLE_TYPE]
2459
4070bd43 2460#define float_ptr_type_node global_trees[TI_FLOAT_PTR_TYPE]
2461#define double_ptr_type_node global_trees[TI_DOUBLE_PTR_TYPE]
2462#define long_double_ptr_type_node global_trees[TI_LONG_DOUBLE_PTR_TYPE]
2463#define integer_ptr_type_node global_trees[TI_INTEGER_PTR_TYPE]
2464
775e7cc0 2465#define complex_integer_type_node global_trees[TI_COMPLEX_INTEGER_TYPE]
2466#define complex_float_type_node global_trees[TI_COMPLEX_FLOAT_TYPE]
2467#define complex_double_type_node global_trees[TI_COMPLEX_DOUBLE_TYPE]
2468#define complex_long_double_type_node global_trees[TI_COMPLEX_LONG_DOUBLE_TYPE]
2469
2470#define void_type_node global_trees[TI_VOID_TYPE]
39b6af4b 2471/* The C type `void *'. */
775e7cc0 2472#define ptr_type_node global_trees[TI_PTR_TYPE]
39b6af4b 2473/* The C type `const void *'. */
775e7cc0 2474#define const_ptr_type_node global_trees[TI_CONST_PTR_TYPE]
654ef926 2475/* The C type `size_t'. */
2476#define size_type_node global_trees[TI_SIZE_TYPE]
73673831 2477#define pid_type_node global_trees[TI_PID_TYPE]
775e7cc0 2478#define ptrdiff_type_node global_trees[TI_PTRDIFF_TYPE]
2479#define va_list_type_node global_trees[TI_VA_LIST_TYPE]
e256d445 2480/* The C type `FILE *'. */
2481#define fileptr_type_node global_trees[TI_FILEPTR_TYPE]
b06898ca 2482
3c2239cf 2483#define boolean_type_node global_trees[TI_BOOLEAN_TYPE]
2484#define boolean_false_node global_trees[TI_BOOLEAN_FALSE]
2485#define boolean_true_node global_trees[TI_BOOLEAN_TRUE]
2486
83f69b41 2487/* The node that should be placed at the end of a parameter list to
2488 indicate that the function does not take a variable number of
2489 arguments. The TREE_VALUE will be void_type_node and there will be
2490 no TREE_CHAIN. Language-independent code should not assume
2491 anything else about this node. */
2492#define void_list_node global_trees[TI_VOID_LIST_NODE]
2493
5c62f199 2494#define main_identifier_node global_trees[TI_MAIN_IDENTIFIER]
2495#define MAIN_NAME_P(NODE) (IDENTIFIER_NODE_CHECK (NODE) == main_identifier_node)
2496
b06898ca 2497/* An enumeration of the standard C integer types. These must be
f5ec8cb5 2498 ordered so that shorter types appear before longer ones, and so
2499 that signed types appear before unsigned ones, for the correct
2500 functioning of interpret_integer() in c-lex.c. */
6c34d0c2 2501enum integer_type_kind
b06898ca 2502{
2503 itk_char,
2504 itk_signed_char,
2505 itk_unsigned_char,
2506 itk_short,
2507 itk_unsigned_short,
2508 itk_int,
2509 itk_unsigned_int,
2510 itk_long,
2511 itk_unsigned_long,
2512 itk_long_long,
2513 itk_unsigned_long_long,
2514 itk_none
2515};
2516
2517typedef enum integer_type_kind integer_type_kind;
2518
2519/* The standard C integer types. Use integer_type_kind to index into
2520 this array. */
1f3233d1 2521extern GTY(()) tree integer_types[itk_none];
b06898ca 2522
2523#define char_type_node integer_types[itk_char]
2524#define signed_char_type_node integer_types[itk_signed_char]
2525#define unsigned_char_type_node integer_types[itk_unsigned_char]
2526#define short_integer_type_node integer_types[itk_short]
2527#define short_unsigned_type_node integer_types[itk_unsigned_short]
2528#define integer_type_node integer_types[itk_int]
2529#define unsigned_type_node integer_types[itk_unsigned_int]
2530#define long_integer_type_node integer_types[itk_long]
2531#define long_unsigned_type_node integer_types[itk_unsigned_long]
2532#define long_long_integer_type_node integer_types[itk_long_long]
2533#define long_long_unsigned_type_node integer_types[itk_unsigned_long_long]
24dfead4 2534\f
2535/* Set to the default thread-local storage (tls) model to use. */
2536
2537enum tls_model {
2538 TLS_MODEL_GLOBAL_DYNAMIC = 1,
2539 TLS_MODEL_LOCAL_DYNAMIC,
2540 TLS_MODEL_INITIAL_EXEC,
2541 TLS_MODEL_LOCAL_EXEC
2542};
b06898ca 2543
24dfead4 2544extern enum tls_model flag_tls_default;
8cf34b34 2545
775e7cc0 2546\f
fc5cb4c0 2547/* A pointer-to-function member type looks like:
2548
2549 struct {
2550 __P __pfn;
2551 ptrdiff_t __delta;
2552 };
2553
2554 If __pfn is NULL, it is a NULL pointer-to-member-function.
2555
2556 (Because the vtable is always the first thing in the object, we
2557 don't need its offset.) If the function is virtual, then PFN is
2558 one plus twice the index into the vtable; otherwise, it is just a
2559 pointer to the function.
2560
2561 Unfortunately, using the lowest bit of PFN doesn't work in
2562 architectures that don't impose alignment requirements on function
2563 addresses, or that use the lowest bit to tell one ISA from another,
2564 for example. For such architectures, we use the lowest bit of
2565 DELTA instead of the lowest bit of the PFN, and DELTA will be
2566 multiplied by 2. */
2567
2568enum ptrmemfunc_vbit_where_t
2569{
2570 ptrmemfunc_vbit_in_pfn,
2571 ptrmemfunc_vbit_in_delta
2572};
2573\f
fb084c16 2574#define NULL_TREE (tree) NULL
2575
c12cb392 2576extern GTY(()) tree frame_base_decl;
60b8c5b3 2577extern tree decl_assembler_name (tree);
d72a838e 2578
6663ac46 2579/* Compute the number of bytes occupied by 'node'. This routine only
2580 looks at TREE_CODE and, if the code is TREE_VEC, TREE_VEC_LENGTH. */
2581
60b8c5b3 2582extern size_t tree_size (tree);
6663ac46 2583
d72a838e 2584/* Lowest level primitive for allocating a node.
2585 The TREE_CODE is the only argument. Contents are initialized
2586 to zero except for a few of the common fields. */
2587
674b05f5 2588extern tree make_node_stat (enum tree_code MEM_STAT_DECL);
2589#define make_node(t) make_node_stat (t MEM_STAT_INFO)
d72a838e 2590
ff6d0dd9 2591/* Make a copy of a node, with all the same contents. */
d72a838e 2592
674b05f5 2593extern tree copy_node_stat (tree MEM_STAT_DECL);
2594#define copy_node(t) copy_node_stat (t MEM_STAT_INFO)
d72a838e 2595
2596/* Make a copy of a chain of TREE_LIST nodes. */
2597
60b8c5b3 2598extern tree copy_list (tree);
d72a838e 2599
3cb98335 2600/* Make a BINFO. */
2601extern tree make_tree_binfo_stat (unsigned MEM_STAT_DECL);
2602#define make_tree_binfo(t) make_tree_binfo_stat (t MEM_STAT_INFO)
2603
d72a838e 2604/* Make a TREE_VEC. */
2605
674b05f5 2606extern tree make_tree_vec_stat (int MEM_STAT_DECL);
2607#define make_tree_vec(t) make_tree_vec_stat (t MEM_STAT_INFO)
d72a838e 2608
4ee9c684 2609/* Tree nodes for SSA analysis. */
2610
2611extern tree make_phi_node (tree, int);
2612extern void init_phinodes (void);
2613extern void fini_phinodes (void);
2614extern void release_phi_node (tree);
2615#ifdef GATHER_STATISTICS
2616extern void phinodes_print_statistics (void);
2617#endif
2618
2619extern void init_ssanames (void);
2620extern void fini_ssanames (void);
2621extern tree make_ssa_name (tree, tree);
3aaaf63f 2622extern tree duplicate_ssa_name (tree, tree);
4ee9c684 2623extern void release_ssa_name (tree);
2624#ifdef GATHER_STATISTICS
2625extern void ssanames_print_statistics (void);
2626#endif
2627
d72a838e 2628/* Return the (unique) IDENTIFIER_NODE node for a given name.
2629 The name is supplied as a char *. */
2630
60b8c5b3 2631extern tree get_identifier (const char *);
d72a838e 2632
69642df2 2633#if GCC_VERSION >= 3000
2634#define get_identifier(str) \
2635 (__builtin_constant_p (str) \
2636 ? get_identifier_with_length ((str), strlen (str)) \
2637 : get_identifier (str))
2638#endif
2639
2640
82863d5e 2641/* Identical to get_identifier, except that the length is assumed
2642 known. */
2643
69642df2 2644extern tree get_identifier_with_length (const char *, size_t);
82863d5e 2645
06fcb3a0 2646/* If an identifier with the name TEXT (a null-terminated string) has
2647 previously been referred to, return that node; otherwise return
2648 NULL_TREE. */
2649
60b8c5b3 2650extern tree maybe_get_identifier (const char *);
06fcb3a0 2651
d72a838e 2652/* Construct various types of nodes. */
2653
76c6f48d 2654#define build_int_2(LO, HI) \
4491f79f 2655 build_int_2_wide ((unsigned HOST_WIDE_INT) (LO), (HOST_WIDE_INT) (HI))
9e6d0a9a 2656
60b8c5b3 2657extern tree build (enum tree_code, tree, ...);
2658extern tree build_nt (enum tree_code, ...);
2659
413a7abf 2660#if GCC_VERSION >= 3000 || __STDC_VERSION__ >= 199901L
2661/* Use preprocessor trickery to map "build" to "buildN" where N is the
2662 expected number of arguments. This is used for both efficiency (no
2663 varargs), and checking (verifying number of passed arguments). */
2664#define build(code, ...) \
2665 _buildN1(build, _buildC1(__VA_ARGS__))(code, __VA_ARGS__)
2666#define _buildN1(BASE, X) _buildN2(BASE, X)
2667#define _buildN2(BASE, X) BASE##X
2668#define _buildC1(...) _buildC2(__VA_ARGS__,9,8,7,6,5,4,3,2,1,0,0)
2669#define _buildC2(x,a1,a2,a3,a4,a5,a6,a7,a8,a9,c,...) c
2670#endif
2671
674b05f5 2672extern tree build0_stat (enum tree_code, tree MEM_STAT_DECL);
2673#define build0(c,t) build0_stat (c,t MEM_STAT_INFO)
2674extern tree build1_stat (enum tree_code, tree, tree MEM_STAT_DECL);
2675#define build1(c,t1,t2) build1_stat (c,t1,t2 MEM_STAT_INFO)
2676extern tree build2_stat (enum tree_code, tree, tree, tree MEM_STAT_DECL);
2677#define build2(c,t1,t2,t3) build2_stat (c,t1,t2,t3 MEM_STAT_INFO)
2678extern tree build3_stat (enum tree_code, tree, tree, tree, tree MEM_STAT_DECL);
2679#define build3(c,t1,t2,t3,t4) build3_stat (c,t1,t2,t3,t4 MEM_STAT_INFO)
2680extern tree build4_stat (enum tree_code, tree, tree, tree, tree,
2681 tree MEM_STAT_DECL);
2682#define build4(c,t1,t2,t3,t4,t5) build4_stat (c,t1,t2,t3,t4,t5 MEM_STAT_INFO)
413a7abf 2683
60b8c5b3 2684extern tree build_int_2_wide (unsigned HOST_WIDE_INT, HOST_WIDE_INT);
2685extern tree build_vector (tree, tree);
2686extern tree build_constructor (tree, tree);
2687extern tree build_real_from_int_cst (tree, tree);
2688extern tree build_complex (tree, tree, tree);
2689extern tree build_string (int, const char *);
674b05f5 2690extern tree build_tree_list_stat (tree, tree MEM_STAT_DECL);
2691#define build_tree_list(t,q) build_tree_list_stat(t,q MEM_STAT_INFO)
2692extern tree build_decl_stat (enum tree_code, tree, tree MEM_STAT_DECL);
2693#define build_decl(c,t,q) build_decl_stat (c,t,q MEM_STAT_INFO)
60b8c5b3 2694extern tree build_block (tree, tree, tree, tree, tree);
fdfe4b3f 2695#ifndef USE_MAPPED_LOCATION
4ee9c684 2696extern void annotate_with_file_line (tree, const char *, int);
2697extern void annotate_with_locus (tree, location_t);
fdfe4b3f 2698#endif
4ee9c684 2699extern tree build_empty_stmt (void);
d72a838e 2700
2701/* Construct various nodes representing data types. */
2702
60b8c5b3 2703extern tree make_signed_type (int);
2704extern tree make_unsigned_type (int);
2705extern void initialize_sizetypes (void);
2706extern void set_sizetype (tree);
2707extern void fixup_unsigned_type (tree);
b24423db 2708extern tree build_pointer_type_for_mode (tree, enum machine_mode, bool);
60b8c5b3 2709extern tree build_pointer_type (tree);
b24423db 2710extern tree build_reference_type_for_mode (tree, enum machine_mode, bool);
60b8c5b3 2711extern tree build_reference_type (tree);
4917c376 2712extern tree build_vector_type_for_mode (tree, enum machine_mode);
2713extern tree build_vector_type (tree innertype, int nunits);
60b8c5b3 2714extern tree build_type_no_quals (tree);
2715extern tree build_index_type (tree);
2716extern tree build_index_2_type (tree, tree);
2717extern tree build_array_type (tree, tree);
2718extern tree build_function_type (tree, tree);
2719extern tree build_function_type_list (tree, ...);
5bfb0742 2720extern tree build_method_type_directly (tree, tree, tree);
60b8c5b3 2721extern tree build_method_type (tree, tree);
2722extern tree build_offset_type (tree, tree);
2723extern tree build_complex_type (tree);
2724extern tree array_type_nelts (tree);
2725
2726extern tree value_member (tree, tree);
2727extern tree purpose_member (tree, tree);
2728extern tree binfo_member (tree, tree);
908e5f41 2729
60b8c5b3 2730extern int attribute_list_equal (tree, tree);
2731extern int attribute_list_contained (tree, tree);
2732extern int tree_int_cst_equal (tree, tree);
2733extern int tree_int_cst_lt (tree, tree);
2734extern int tree_int_cst_compare (tree, tree);
2735extern int host_integerp (tree, int);
2736extern HOST_WIDE_INT tree_low_cst (tree, int);
2737extern int tree_int_cst_msb (tree);
2738extern int tree_int_cst_sgn (tree);
2739extern int tree_expr_nonnegative_p (tree);
2740extern int rtl_expr_nonnegative_p (rtx);
2741extern tree get_inner_array_type (tree);
296a500c 2742
fb084c16 2743/* From expmed.c. Since rtl.h is included after tree.h, we can't
2744 put the prototype here. Rtl.h does declare the prototype if
2745 tree.h had been included. */
2746
60b8c5b3 2747extern tree make_tree (tree, rtx);
d72a838e 2748\f
a12eeaaf 2749/* Return a type like TTYPE except that its TYPE_ATTRIBUTES
2750 is ATTRIBUTE.
2751
2752 Such modified types already made are recorded so that duplicates
88b5b080 2753 are not made. */
a12eeaaf 2754
60b8c5b3 2755extern tree build_type_attribute_variant (tree, tree);
2756extern tree build_decl_attribute_variant (tree, tree);
a12eeaaf 2757
e3c541f0 2758/* Structure describing an attribute and a function to handle it. */
2759struct attribute_spec
2760{
2761 /* The name of the attribute (without any leading or trailing __),
2762 or NULL to mark the end of a table of attributes. */
e99c3a1d 2763 const char *const name;
e3c541f0 2764 /* The minimum length of the list of arguments of the attribute. */
e99c3a1d 2765 const int min_length;
e3c541f0 2766 /* The maximum length of the list of arguments of the attribute
2767 (-1 for no maximum). */
e99c3a1d 2768 const int max_length;
e3c541f0 2769 /* Whether this attribute requires a DECL. If it does, it will be passed
2770 from types of DECLs, function return types and array element types to
2771 the DECLs, function types and array types respectively; but when
2772 applied to a type in any other circumstances, it will be ignored with
2773 a warning. (If greater control is desired for a given attribute,
2774 this should be false, and the flags argument to the handler may be
2775 used to gain greater control in that case.) */
e99c3a1d 2776 const bool decl_required;
e3c541f0 2777 /* Whether this attribute requires a type. If it does, it will be passed
2778 from a DECL to the type of that DECL. */
e99c3a1d 2779 const bool type_required;
e3c541f0 2780 /* Whether this attribute requires a function (or method) type. If it does,
2781 it will be passed from a function pointer type to the target type,
2782 and from a function return type (which is not itself a function
2783 pointer type) to the function type. */
e99c3a1d 2784 const bool function_type_required;
e3c541f0 2785 /* Function to handle this attribute. NODE points to the node to which
2786 the attribute is to be applied. If a DECL, it should be modified in
2787 place; if a TYPE, a copy should be created. NAME is the name of the
2788 attribute (possibly with leading or trailing __). ARGS is the TREE_LIST
2789 of the arguments (which may be NULL). FLAGS gives further information
2790 about the context of the attribute. Afterwards, the attributes will
2791 be added to the DECL_ATTRIBUTES or TYPE_ATTRIBUTES, as appropriate,
2792 unless *NO_ADD_ATTRS is set to true (which should be done on error,
2793 as well as in any other cases when the attributes should not be added
2794 to the DECL or TYPE). Depending on FLAGS, any attributes to be
2795 applied to another type or DECL later may be returned;
2796 otherwise the return value should be NULL_TREE. This pointer may be
2797 NULL if no special handling is required beyond the checks implied
2798 by the rest of this structure. */
60b8c5b3 2799 tree (*const handler) (tree *node, tree name, tree args,
2800 int flags, bool *no_add_attrs);
e3c541f0 2801};
2802
e3c541f0 2803/* Flags that may be passed in the third argument of decl_attributes, and
2804 to handler functions for attributes. */
2805enum attribute_flags
2806{
2807 /* The type passed in is the type of a DECL, and any attributes that
2808 should be passed in again to be applied to the DECL rather than the
2809 type should be returned. */
2810 ATTR_FLAG_DECL_NEXT = 1,
2811 /* The type passed in is a function return type, and any attributes that
2812 should be passed in again to be applied to the function type rather
2813 than the return type should be returned. */
2814 ATTR_FLAG_FUNCTION_NEXT = 2,
2815 /* The type passed in is an array element type, and any attributes that
2816 should be passed in again to be applied to the array type rather
2817 than the element type should be returned. */
2818 ATTR_FLAG_ARRAY_NEXT = 4,
2819 /* The type passed in is a structure, union or enumeration type being
2820 created, and should be modified in place. */
7d3b509a 2821 ATTR_FLAG_TYPE_IN_PLACE = 8,
2822 /* The attributes are being applied by default to a library function whose
2823 name indicates known behavior, and should be silently ignored if they
2824 are not in fact compatible with the function type. */
2825 ATTR_FLAG_BUILT_IN = 16
e3c541f0 2826};
2827
ed5635e4 2828/* Default versions of target-overridable functions. */
2829
60b8c5b3 2830extern tree merge_decl_attributes (tree, tree);
2831extern tree merge_type_attributes (tree, tree);
2832extern void default_register_cpp_builtins (struct cpp_reader *);
0bf60c2b 2833
2834/* Split a list of declspecs and attributes into two. */
2835
aecda0d6 2836extern void split_specs_attrs (tree, tree *, tree *);
0bf60c2b 2837
2838/* Strip attributes from a list of combined specs and attrs. */
2839
aecda0d6 2840extern tree strip_attrs (tree);
0bf60c2b 2841
fe78f852 2842/* Return 1 if an attribute and its arguments are valid for a decl or type. */
2843
60b8c5b3 2844extern int valid_machine_attribute (tree, tree, tree, tree);
fe78f852 2845
f712a0dc 2846/* Given a tree node and a string, return nonzero if the tree node is
fe78f852 2847 a valid attribute name for the string. */
2848
60b8c5b3 2849extern int is_attribute_p (const char *, tree);
fe78f852 2850
2851/* Given an attribute name and a list of attributes, return the list element
2852 of the attribute or NULL_TREE if not found. */
2853
60b8c5b3 2854extern tree lookup_attribute (const char *, tree);
4ab0a739 2855
2856/* Given two attributes lists, return a list of their union. */
2857
60b8c5b3 2858extern tree merge_attributes (tree, tree);
fe78f852 2859
a767736d 2860#ifdef TARGET_DLLIMPORT_DECL_ATTRIBUTES
2861/* Given two Windows decl attributes lists, possibly including
2862 dllimport, return a list of their union . */
60b8c5b3 2863extern tree merge_dllimport_decl_attributes (tree, tree);
a767736d 2864#endif
2865
e40000f4 2866/* Check whether CAND is suitable to be returned from get_qualified_type
2867 (BASE, TYPE_QUALS). */
2868
2869extern bool check_qualified_type (tree, tree, int);
2870
051b8c96 2871/* Return a version of the TYPE, qualified as indicated by the
2872 TYPE_QUALS, if one exists. If no qualified version exists yet,
2873 return NULL_TREE. */
2874
60b8c5b3 2875extern tree get_qualified_type (tree, int);
051b8c96 2876
2877/* Like get_qualified_type, but creates the type if it does not
2878 exist. This function never returns NULL_TREE. */
a5b1863e 2879
60b8c5b3 2880extern tree build_qualified_type (tree, int);
a5b1863e 2881
2882/* Like build_qualified_type, but only deals with the `const' and
2883 `volatile' qualifiers. This interface is retained for backwards
de132707 2884 compatibility with the various front-ends; new code should use
a5b1863e 2885 build_qualified_type instead. */
d72a838e 2886
a5b1863e 2887#define build_type_variant(TYPE, CONST_P, VOLATILE_P) \
76c6f48d 2888 build_qualified_type ((TYPE), \
a5b1863e 2889 ((CONST_P) ? TYPE_QUAL_CONST : 0) \
2890 | ((VOLATILE_P) ? TYPE_QUAL_VOLATILE : 0))
d72a838e 2891
11121344 2892/* Make a copy of a type node. */
2893
60b8c5b3 2894extern tree build_type_copy (tree);
11121344 2895
805e22b2 2896/* Finish up a builtin RECORD_TYPE. Give it a name and provide its
2897 fields. Optionally specify an alignment, and then lsy it out. */
2898
60b8c5b3 2899extern void finish_builtin_struct (tree, const char *,
2900 tree, tree);
805e22b2 2901
d72a838e 2902/* Given a ..._TYPE node, calculate the TYPE_SIZE, TYPE_SIZE_UNIT,
99f4e085 2903 TYPE_ALIGN and TYPE_MODE fields. If called more than once on one
2904 node, does nothing except for the first time. */
d72a838e 2905
60b8c5b3 2906extern void layout_type (tree);
d72a838e 2907
99f4e085 2908/* These functions allow a front-end to perform a manual layout of a
2909 RECORD_TYPE. (For instance, if the placement of subsequent fields
2910 depends on the placement of fields so far.) Begin by calling
02e7a332 2911 start_record_layout. Then, call place_field for each of the
99f4e085 2912 fields. Then, call finish_record_layout. See layout_type for the
2913 default way in which these functions are used. */
2914
ad847b26 2915typedef struct record_layout_info_s
99f4e085 2916{
2917 /* The RECORD_TYPE that we are laying out. */
2918 tree t;
02e7a332 2919 /* The offset into the record so far, in bytes, not including bits in
2920 BITPOS. */
2921 tree offset;
2922 /* The last known alignment of SIZE. */
2923 unsigned int offset_align;
2924 /* The bit position within the last OFFSET_ALIGN bits, in bits. */
2925 tree bitpos;
99f4e085 2926 /* The alignment of the record so far, in bits. */
2927 unsigned int record_align;
f5712181 2928 /* The alignment of the record so far, ignoring #pragma pack and
2929 __attribute__ ((packed)), in bits. */
02e7a332 2930 unsigned int unpacked_align;
f04f096b 2931 /* The previous field layed out. */
2932 tree prev_field;
99f4e085 2933 /* The static variables (i.e., class variables, as opposed to
2934 instance variables) encountered in T. */
2935 tree pending_statics;
8642f3d3 2936 /* Bits remaining in the current alignment group */
2937 int remaining_in_alignment;
f5712181 2938 /* True if we've seen a packed field that didn't have normal
2939 alignment anyway. */
99f4e085 2940 int packed_maybe_necessary;
02e7a332 2941} *record_layout_info;
99f4e085 2942
60b8c5b3 2943extern void set_lang_adjust_rli (void (*) (record_layout_info));
2944extern record_layout_info start_record_layout (tree);
2945extern tree bit_from_pos (tree, tree);
2946extern tree byte_from_pos (tree, tree);
2947extern void pos_from_bit (tree *, tree *, unsigned int, tree);
2948extern void normalize_offset (tree *, tree *, unsigned int);
2949extern tree rli_size_unit_so_far (record_layout_info);
2950extern tree rli_size_so_far (record_layout_info);
2951extern void normalize_rli (record_layout_info);
2952extern void place_field (record_layout_info, tree);
2953extern void compute_record_mode (tree);
2954extern void finish_record_layout (record_layout_info, int);
99f4e085 2955
d72a838e 2956/* Given a hashcode and a ..._TYPE node (for which the hashcode was made),
2957 return a canonicalized ..._TYPE node, so that duplicates are not made.
2958 How the hash code is computed is up to the caller, as long as any two
2959 callers that could hash identical-looking type nodes agree. */
2960
60b8c5b3 2961extern tree type_hash_canon (unsigned int, tree);
d72a838e 2962
2963/* Given a VAR_DECL, PARM_DECL, RESULT_DECL or FIELD_DECL node,
2964 calculates the DECL_SIZE, DECL_SIZE_UNIT, DECL_ALIGN and DECL_MODE
2965 fields. Call this only once for any given decl node.
2966
2967 Second argument is the boundary that this field can be assumed to
2968 be starting at (in bits). Zero means it can be assumed aligned
2969 on any boundary that may be needed. */
2970
60b8c5b3 2971extern void layout_decl (tree, unsigned);
d72a838e 2972
0fc6aef1 2973/* Return the mode for data of a given size SIZE and mode class CLASS.
2974 If LIMIT is nonzero, then don't use modes bigger than MAX_FIXED_MODE_SIZE.
2975 The value is BLKmode if no other mode is found. This is like
2976 mode_for_size, but is passed a tree. */
2977
60b8c5b3 2978extern enum machine_mode mode_for_size_tree (tree, enum mode_class, int);
0fc6aef1 2979
d72a838e 2980/* Return an expr equal to X but certainly not valid as an lvalue. */
2981
60b8c5b3 2982extern tree non_lvalue (tree);
2983extern tree pedantic_non_lvalue (tree);
2984
2985extern tree convert (tree, tree);
2986extern unsigned int expr_align (tree);
2987extern tree expr_first (tree);
2988extern tree expr_last (tree);
4ee9c684 2989extern tree expr_only (tree);
60b8c5b3 2990extern tree size_in_bytes (tree);
2991extern HOST_WIDE_INT int_size_in_bytes (tree);
2992extern tree bit_position (tree);
2993extern HOST_WIDE_INT int_bit_position (tree);
2994extern tree byte_position (tree);
2995extern HOST_WIDE_INT int_byte_position (tree);
902de8ed 2996
2997/* Define data structures, macros, and functions for handling sizes
2998 and the various types used to represent sizes. */
2999
3000enum size_type_kind
3001{
88b5b080 3002 SIZETYPE, /* Normal representation of sizes in bytes. */
3003 SSIZETYPE, /* Signed representation of sizes in bytes. */
902de8ed 3004 USIZETYPE, /* Unsigned representation of sizes in bytes. */
3005 BITSIZETYPE, /* Normal representation of sizes in bits. */
3006 SBITSIZETYPE, /* Signed representation of sizes in bits. */
91c82c20 3007 UBITSIZETYPE, /* Unsigned representation of sizes in bits. */
902de8ed 3008 TYPE_KIND_LAST};
3009
1f3233d1 3010extern GTY(()) tree sizetype_tab[(int) TYPE_KIND_LAST];
902de8ed 3011
3012#define sizetype sizetype_tab[(int) SIZETYPE]
3013#define bitsizetype sizetype_tab[(int) BITSIZETYPE]
3014#define ssizetype sizetype_tab[(int) SSIZETYPE]
3015#define usizetype sizetype_tab[(int) USIZETYPE]
3016#define sbitsizetype sizetype_tab[(int) SBITSIZETYPE]
3017#define ubitsizetype sizetype_tab[(int) UBITSIZETYPE]
3018
60b8c5b3 3019extern tree size_binop (enum tree_code, tree, tree);
3020extern tree size_diffop (tree, tree);
3021extern tree size_int_wide (HOST_WIDE_INT, enum size_type_kind);
3022extern tree size_int_type_wide (HOST_WIDE_INT, tree);
b278476e 3023
902de8ed 3024#define size_int_type(L, T) size_int_type_wide ((HOST_WIDE_INT) (L), T)
3025#define size_int(L) size_int_wide ((HOST_WIDE_INT) (L), SIZETYPE)
3026#define ssize_int(L) size_int_wide ((HOST_WIDE_INT) (L), SSIZETYPE)
3027#define bitsize_int(L) size_int_wide ((HOST_WIDE_INT) (L), BITSIZETYPE)
3028#define sbitsize_int(L) size_int_wide ((HOST_WIDE_INT) (L), SBITSIZETYPE)
30384dcf 3029
60b8c5b3 3030extern tree round_up (tree, int);
3031extern tree round_down (tree, int);
3032extern tree get_pending_sizes (void);
60b8c5b3 3033extern void put_pending_size (tree);
3034extern void put_pending_sizes (tree);
d72a838e 3035
3036/* Type for sizes of data-type. */
3037
30384dcf 3038#define BITS_PER_UNIT_LOG \
3039 ((BITS_PER_UNIT > 1) + (BITS_PER_UNIT > 2) + (BITS_PER_UNIT > 4) \
3040 + (BITS_PER_UNIT > 8) + (BITS_PER_UNIT > 16) + (BITS_PER_UNIT > 32) \
3041 + (BITS_PER_UNIT > 64) + (BITS_PER_UNIT > 128) + (BITS_PER_UNIT > 256))
3042
88b5b080 3043/* If nonzero, an upper limit on alignment of structure fields, in bits. */
fe352cf1 3044extern unsigned int maximum_field_alignment;
64233515 3045
f712a0dc 3046/* If nonzero, the alignment of a bitstring or (power-)set value, in bits. */
fe352cf1 3047extern unsigned int set_alignment;
64233515 3048
d72a838e 3049/* Concatenate two lists (chains of TREE_LIST nodes) X and Y
3050 by making the last node in X point to Y.
3051 Returns X, except if X is 0 returns Y. */
3052
60b8c5b3 3053extern tree chainon (tree, tree);
d72a838e 3054
3055/* Make a new TREE_LIST node from specified PURPOSE, VALUE and CHAIN. */
3056
674b05f5 3057extern tree tree_cons_stat (tree, tree, tree MEM_STAT_DECL);
3058#define tree_cons(t,q,w) tree_cons_stat (t,q,w MEM_STAT_INFO)
d72a838e 3059
3060/* Return the last tree node in a chain. */
3061
60b8c5b3 3062extern tree tree_last (tree);
d72a838e 3063
3064/* Reverse the order of elements in a chain, and return the new head. */
3065
60b8c5b3 3066extern tree nreverse (tree);
d72a838e 3067
3068/* Returns the length of a chain of nodes
3069 (number of chain pointers to follow before reaching a null pointer). */
3070
60b8c5b3 3071extern int list_length (tree);
d72a838e 3072
efd3939c 3073/* Returns the number of FIELD_DECLs in a type. */
3074
60b8c5b3 3075extern int fields_length (tree);
efd3939c 3076
e19896a4 3077/* Given an initializer INIT, return TRUE if INIT is zero or some
3078 aggregate of zeros. Otherwise return FALSE. */
3079
60b8c5b3 3080extern bool initializer_zerop (tree);
e19896a4 3081
4ee9c684 3082extern void categorize_ctor_elements (tree, HOST_WIDE_INT *, HOST_WIDE_INT *);
3083extern HOST_WIDE_INT count_type_elements (tree);
957697db 3084extern int mostly_zeros_p (tree);
3085
4ee9c684 3086/* add_var_to_bind_expr (bind_expr, var) binds var to bind_expr. */
3087
3088extern void add_var_to_bind_expr (tree, tree);
3089
d72a838e 3090/* integer_zerop (tree x) is nonzero if X is an integer constant of value 0 */
3091
60b8c5b3 3092extern int integer_zerop (tree);
d72a838e 3093
3094/* integer_onep (tree x) is nonzero if X is an integer constant of value 1 */
3095
60b8c5b3 3096extern int integer_onep (tree);
d72a838e 3097
3098/* integer_all_onesp (tree x) is nonzero if X is an integer constant
3099 all of whose significant bits are 1. */
3100
60b8c5b3 3101extern int integer_all_onesp (tree);
d72a838e 3102
3103/* integer_pow2p (tree x) is nonzero is X is an integer constant with
3104 exactly one bit 1. */
3105
60b8c5b3 3106extern int integer_pow2p (tree);
d72a838e 3107
805e22b2 3108/* integer_nonzerop (tree x) is nonzero if X is an integer constant
3109 with a nonzero value. */
3110
60b8c5b3 3111extern int integer_nonzerop (tree);
805e22b2 3112
d72a838e 3113/* staticp (tree x) is nonzero if X is a reference to data allocated
3114 at a fixed address in memory. */
3115
60b8c5b3 3116extern int staticp (tree);
d72a838e 3117
d72a838e 3118/* save_expr (EXP) returns an expression equivalent to EXP
3119 but it can be used multiple times within context CTX
3120 and only evaluate EXP once. */
3121
60b8c5b3 3122extern tree save_expr (tree);
d72a838e 3123
414bee42 3124/* Look inside EXPR and into any simple arithmetic operations. Return
3125 the innermost non-arithmetic node. */
3126
60b8c5b3 3127extern tree skip_simple_arithmetic (tree);
414bee42 3128
bc280274 3129/* Returns the index of the first non-tree operand for CODE, or the number
3130 of operands if all are trees. */
3131
60b8c5b3 3132extern int first_rtl_op (enum tree_code);
bc280274 3133
1f3233d1 3134/* Return which tree structure is used by T. */
3135
60b8c5b3 3136enum tree_node_structure_enum tree_node_structure (tree);
1f3233d1 3137
0e676ec9 3138/* unsave_expr (EXP) returns an expression equivalent to EXP but it
4a2fac76 3139 can be used multiple times and will evaluate EXP in its entirety
0e676ec9 3140 each time. */
3141
60b8c5b3 3142extern tree unsave_expr (tree);
0e676ec9 3143
de132707 3144/* Reset EXP in place so that it can be expanded again. Does not
4a2fac76 3145 recurse into subtrees. */
3146
60b8c5b3 3147extern void unsave_expr_1 (tree);
4a2fac76 3148
4f8af819 3149/* Return 0 if it is safe to evaluate EXPR multiple times,
3150 return 1 if it is safe if EXPR is unsaved afterward, or
3151 return 2 if it is completely unsafe. */
60b8c5b3 3152extern int unsafe_for_reeval (tree);
c63e27d8 3153
9f354f8d 3154/* Return 1 if EXP contains a PLACEHOLDER_EXPR; i.e., if it represents a size
3155 or offset that depends on a field within a record.
3156
3157 Note that we only allow such expressions within simple arithmetic
3158 or a COND_EXPR. */
3159
60b8c5b3 3160extern bool contains_placeholder_p (tree);
ce3fb06e 3161
3162/* This macro calls the above function but short-circuits the common
3163 case of a constant to save time. Also check for null. */
3164
3165#define CONTAINS_PLACEHOLDER_P(EXP) \
3166 ((EXP) != 0 && ! TREE_CONSTANT (EXP) && contains_placeholder_p (EXP))
3167
3168/* Return 1 if any part of the computation of TYPE involves a PLACEHOLDER_EXPR.
3169 This includes size, bounds, qualifiers (for QUAL_UNION_TYPE) and field
3170 positions. */
3171
60b8c5b3 3172extern bool type_contains_placeholder_p (tree);
9f354f8d 3173
bc280274 3174/* Return 1 if EXP contains any expressions that produce cleanups for an
3175 outer scope to deal with. Used by fold. */
3176
60b8c5b3 3177extern int has_cleanups (tree);
bc280274 3178
9f354f8d 3179/* Given a tree EXP, a FIELD_DECL F, and a replacement value R,
3180 return a tree with all occurrences of references to F in a
3181 PLACEHOLDER_EXPR replaced by R. Note that we assume here that EXP
3182 contains only arithmetic expressions. */
3183
60b8c5b3 3184extern tree substitute_in_expr (tree, tree, tree);
9f354f8d 3185
55f9d7dc 3186/* This macro calls the above function but short-circuits the common
3187 case of a constant to save time and also checks for NULL. */
3188
3189#define SUBSTITUTE_IN_EXPR(EXP, F, R) \
3190 ((EXP) == 0 || TREE_CONSTANT (EXP) ? (EXP) : substitute_in_expr (EXP, F, R))
3191
3192/* Similar, but look for a PLACEHOLDER_EXPR in EXP and find a replacement
3193 for it within OBJ, a tree that is an object or a chain of references. */
3194
3195extern tree substitute_placeholder_in_expr (tree, tree);
3196
3197/* This macro calls the above function but short-circuits the common
3198 case of a constant to save time and also checks for NULL. */
3199
3200#define SUBSTITUTE_PLACEHOLDER_IN_EXPR(EXP, OBJ) \
3201 ((EXP) == 0 || TREE_CONSTANT (EXP) ? (EXP) \
3202 : substitute_placeholder_in_expr (EXP, OBJ))
3203
654995a1 3204/* variable_size (EXP) is like save_expr (EXP) except that it
3205 is for the special case of something that is part of a
3206 variable size for a data type. It makes special arrangements
3207 to compute the value at the right time when the data type
3208 belongs to a function parameter. */
3209
60b8c5b3 3210extern tree variable_size (tree);
654995a1 3211
845bebef 3212/* stabilize_reference (EXP) returns a reference equivalent to EXP
d72a838e 3213 but it can be used multiple times
3214 and only evaluate the subexpressions once. */
3215
60b8c5b3 3216extern tree stabilize_reference (tree);
d72a838e 3217
1b6e6303 3218/* Subroutine of stabilize_reference; this is called for subtrees of
3219 references. Any expression with side-effects must be put in a SAVE_EXPR
3220 to ensure that it is only evaluated once. */
3221
60b8c5b3 3222extern tree stabilize_reference_1 (tree);
1b6e6303 3223
d72a838e 3224/* Return EXP, stripped of any conversions to wider types
3225 in such a way that the result of converting to type FOR_TYPE
3226 is the same as if EXP were converted to FOR_TYPE.
3227 If FOR_TYPE is 0, it signifies EXP's type. */
3228
60b8c5b3 3229extern tree get_unwidened (tree, tree);
d72a838e 3230
3231/* Return OP or a simpler expression for a narrower value
3232 which can be sign-extended or zero-extended to give back OP.
3233 Store in *UNSIGNEDP_PTR either 1 if the value should be zero-extended
3234 or 0 if the value should be sign-extended. */
3235
60b8c5b3 3236extern tree get_narrower (tree, int *);
d72a838e 3237
d72a838e 3238/* Given an expression EXP that may be a COMPONENT_REF or an ARRAY_REF,
3239 look for nested component-refs or array-refs at constant positions
3240 and find the ultimate containing object, which is returned. */
3241
60b8c5b3 3242extern tree get_inner_reference (tree, HOST_WIDE_INT *, HOST_WIDE_INT *,
3243 tree *, enum machine_mode *, int *, int *);
d72a838e 3244
f96c43fb 3245/* Return 1 if T is an expression that get_inner_reference handles. */
3246
60b8c5b3 3247extern int handled_component_p (tree);
f96c43fb 3248
6374121b 3249/* Return a tree of sizetype representing the size, in bytes, of the element
3250 of EXP, an ARRAY_REF. */
3251
3252extern tree array_ref_element_size (tree);
3253
3254/* Return a tree representing the lower bound of the array mentioned in
3255 EXP, an ARRAY_REF. */
3256
3257extern tree array_ref_low_bound (tree);
3258
3259/* Return a tree representing the offset, in bytes, of the field referenced
3260 by EXP. This does not include any offset in DECL_FIELD_BIT_OFFSET. */
3261
3262extern tree component_ref_field_offset (tree);
3263
804dff30 3264/* Given a DECL or TYPE, return the scope in which it was declared, or
3265 NUL_TREE if there is no containing scope. */
3266
60b8c5b3 3267extern tree get_containing_scope (tree);
804dff30 3268
d72a838e 3269/* Return the FUNCTION_DECL which provides this _DECL with its context,
3270 or zero if none. */
60b8c5b3 3271extern tree decl_function_context (tree);
d72a838e 3272
7dd9d898 3273/* Return the RECORD_TYPE, UNION_TYPE, or QUAL_UNION_TYPE which provides
3274 this _DECL with its context, or zero if none. */
60b8c5b3 3275extern tree decl_type_context (tree);
d72a838e 3276
03f2a1be 3277/* Return 1 if EXPR is the real constant zero. */
60b8c5b3 3278extern int real_zerop (tree);
d72a838e 3279\f
3280/* Declare commonly used variables for tree structure. */
3281
b3034b6d 3282/* Nonzero means lvalues are limited to those valid in pedantic ANSI C.
3283 Zero means allow extended lvalues. */
3284
3285extern int pedantic_lvalues;
3286
88b5b080 3287/* Points to the FUNCTION_DECL of the function whose body we are reading. */
d72a838e 3288
1f3233d1 3289extern GTY(()) tree current_function_decl;
d72a838e 3290
d0309f39 3291/* Nonzero means a FUNC_BEGIN label was emitted. */
1f3233d1 3292extern GTY(()) tree current_function_func_begin_label;
d0309f39 3293
4ee9c684 3294/* A DECL for the current file-scope context. When using IMA, this heads a
3295 chain of FILE_DECLs; currently only C uses it. */
3296
3297extern GTY(()) tree current_file_decl;
3298
d72a838e 3299/* Nonzero means all ..._TYPE nodes should be allocated permanently. */
3300
3301extern int all_types_permanent;
3302
d61095a9 3303/* Exit a binding level. This function is provided by each language
3304 frontend. */
3305extern tree poplevel (int, int, int);
3306
8305149e 3307/* Declare a predefined function. Return the declaration. This function is
3308 provided by each language frontend. */
60b8c5b3 3309extern tree builtin_function (const char *, tree, int, enum built_in_class,
3310 const char *, tree);
d72a838e 3311\f
bb02c0b3 3312/* In tree.c */
eac18265 3313extern unsigned crc32_string (unsigned, const char *);
60b8c5b3 3314extern void clean_symbol_name (char *);
3315extern tree get_file_function_name_long (const char *);
3316extern tree get_set_constructor_bits (tree, char *, int);
3317extern tree get_set_constructor_bytes (tree, unsigned char *, int);
3318extern tree get_callee_fndecl (tree);
681a883f 3319extern void change_decl_assembler_name (tree, tree);
60b8c5b3 3320extern int type_num_arguments (tree);
3321extern tree lhd_unsave_expr_now (tree);
21dff555 3322extern bool associative_tree_code (enum tree_code);
3323extern bool commutative_tree_code (enum tree_code);
1d347c23 3324
bb02c0b3 3325\f
d72a838e 3326/* In stmt.c */
3327
60b8c5b3 3328extern void expand_expr_stmt (tree);
3329extern void expand_expr_stmt_value (tree, int, int);
c48505a3 3330extern int warn_if_unused_value (tree, location_t);
60b8c5b3 3331extern void expand_decl_init (tree);
60b8c5b3 3332extern void expand_label (tree);
3333extern void expand_goto (tree);
3334extern void expand_asm (tree, int);
3335extern void expand_start_cond (tree, int);
3336extern void expand_end_cond (void);
3337extern void expand_start_else (void);
3338extern void expand_start_elseif (tree);
60b8c5b3 3339
4ee9c684 3340extern void expand_stack_alloc (tree, tree);
3341extern rtx expand_stack_save (void);
3342extern void expand_stack_restore (tree);
60b8c5b3 3343extern void expand_return (tree);
60b8c5b3 3344extern void expand_start_bindings_and_block (int, tree);
89689e23 3345#define expand_start_bindings(flags) \
3346 expand_start_bindings_and_block(flags, NULL_TREE)
60b8c5b3 3347extern void expand_end_bindings (tree, int, int);
3348extern void warn_about_unused_variables (tree);
60b8c5b3 3349extern int is_body_block (tree);
3350
3351extern int conditional_context (void);
3352extern struct nesting * current_nesting_level (void);
60b8c5b3 3353extern void expand_start_case (int, tree, tree, const char *);
3354extern void expand_end_case_type (tree, tree);
79dc3b8e 3355#define expand_end_case(cond) expand_end_case_type (cond, NULL)
4ee9c684 3356extern int add_case_node (tree, tree, tree, tree *, bool);
60b8c5b3 3357extern int pushcase (tree, tree (*) (tree, tree), tree, tree *);
3358extern int pushcase_range (tree, tree, tree (*) (tree, tree), tree, tree *);
3359extern void using_eh_for_cleanups (void);
d72a838e 3360
3361/* In fold-const.c */
3362
9239a87e 3363/* Fold constants as much as possible in an expression.
3364 Returns the simplified expression.
3365 Acts only on the top level of the expression;
3366 if the argument itself cannot be simplified, its
3367 subexpressions are not changed. */
3368
60b8c5b3 3369extern tree fold (tree);
276beea2 3370extern tree fold_initializer (tree);
d7aeca92 3371extern tree fold_convert (tree, tree);
60b8c5b3 3372extern tree fold_single_bit_test (enum tree_code, tree, tree, tree);
d1aade50 3373extern tree fold_abs_const (tree, tree);
60b8c5b3 3374
3375extern int force_fit_type (tree, int);
3376extern int add_double (unsigned HOST_WIDE_INT, HOST_WIDE_INT,
3377 unsigned HOST_WIDE_INT, HOST_WIDE_INT,
3378 unsigned HOST_WIDE_INT *, HOST_WIDE_INT *);
3379extern int neg_double (unsigned HOST_WIDE_INT, HOST_WIDE_INT,
3380 unsigned HOST_WIDE_INT *, HOST_WIDE_INT *);
3381extern int mul_double (unsigned HOST_WIDE_INT, HOST_WIDE_INT,
3382 unsigned HOST_WIDE_INT, HOST_WIDE_INT,
3383 unsigned HOST_WIDE_INT *, HOST_WIDE_INT *);
3384extern void lshift_double (unsigned HOST_WIDE_INT, HOST_WIDE_INT,
3385 HOST_WIDE_INT, unsigned int,
3386 unsigned HOST_WIDE_INT *, HOST_WIDE_INT *, int);
3387extern void rshift_double (unsigned HOST_WIDE_INT, HOST_WIDE_INT,
3388 HOST_WIDE_INT, unsigned int,
3389 unsigned HOST_WIDE_INT *, HOST_WIDE_INT *, int);
3390extern void lrotate_double (unsigned HOST_WIDE_INT, HOST_WIDE_INT,
3391 HOST_WIDE_INT, unsigned int,
3392 unsigned HOST_WIDE_INT *, HOST_WIDE_INT *);
3393extern void rrotate_double (unsigned HOST_WIDE_INT, HOST_WIDE_INT,
3394 HOST_WIDE_INT, unsigned int,
3395 unsigned HOST_WIDE_INT *, HOST_WIDE_INT *);
3396
3397extern int div_and_round_double (enum tree_code, int, unsigned HOST_WIDE_INT,
3398 HOST_WIDE_INT, unsigned HOST_WIDE_INT,
3399 HOST_WIDE_INT, unsigned HOST_WIDE_INT *,
3400 HOST_WIDE_INT *, unsigned HOST_WIDE_INT *,
3401 HOST_WIDE_INT *);
3402
4ee9c684 3403enum operand_equal_flag
3404{
3405 OEP_ONLY_CONST = 1,
3406 OEP_PURE_SAME = 2
3407};
3408
3409extern int operand_equal_p (tree, tree, unsigned int);
3410
60b8c5b3 3411extern tree omit_one_operand (tree, tree, tree);
9bc9f15f 3412extern tree omit_two_operands (tree, tree, tree, tree);
60b8c5b3 3413extern tree invert_truthvalue (tree);
4ee9c684 3414extern tree nondestructive_fold_unary_to_constant (enum tree_code, tree, tree);
3415extern tree nondestructive_fold_binary_to_constant (enum tree_code, tree, tree, tree);
3416extern tree fold_read_from_constant_string (tree);
3417extern tree int_const_binop (enum tree_code, tree, tree, int);
fcdd3ab3 3418extern tree build_fold_addr_expr (tree);
3419extern tree build_fold_addr_expr_with_type (tree, tree);
3420extern tree build_fold_indirect_ref (tree);
e94026da 3421
cc0bdf91 3422extern bool tree_swap_operands_p (tree, tree, bool);
3423extern enum tree_code swap_tree_comparison (enum tree_code);
3424
805e22b2 3425/* In builtins.c */
60b8c5b3 3426extern tree fold_builtin (tree);
3427extern enum built_in_function builtin_mathfn_code (tree);
3428extern tree build_function_call_expr (tree, tree);
3429extern tree mathfn_built_in (tree, enum built_in_function fn);
4ee9c684 3430extern tree strip_float_extensions (tree);
3431extern tree simplify_builtin (tree, int);
3432extern tree c_strlen (tree, int);
df5d7812 3433extern tree std_gimplify_va_arg_expr (tree, tree, tree *, tree *);
03f2a1be 3434
8cce4b41 3435/* In convert.c */
60b8c5b3 3436extern tree strip_float_extensions (tree);
8cce4b41 3437
9501a338 3438/* In alias.c */
60b8c5b3 3439extern void record_component_aliases (tree);
3440extern HOST_WIDE_INT get_alias_set (tree);
3441extern int alias_sets_conflict_p (HOST_WIDE_INT, HOST_WIDE_INT);
c1628b55 3442extern int alias_sets_might_conflict_p (HOST_WIDE_INT, HOST_WIDE_INT);
60b8c5b3 3443extern int readonly_fields_p (tree);
3444extern int objects_must_conflict_p (tree, tree);
83de9b44 3445
f52f7b9e 3446/* In tree.c */
60b8c5b3 3447extern int really_constant_p (tree);
3448extern int int_fits_type_p (tree, tree);
1f8a6ff8 3449extern bool variably_modified_type_p (tree, tree);
60b8c5b3 3450extern int tree_log2 (tree);
3451extern int tree_floor_log2 (tree);
3452extern int simple_cst_equal (tree, tree);
3453extern unsigned int iterative_hash_expr (tree, unsigned int);
3454extern int compare_tree_int (tree, unsigned HOST_WIDE_INT);
3455extern int type_list_equal (tree, tree);
3456extern int chain_member (tree, tree);
3457extern tree type_hash_lookup (unsigned int, tree);
3458extern void type_hash_add (unsigned int, tree);
60b8c5b3 3459extern int simple_cst_list_equal (tree, tree);
3460extern void dump_tree_statistics (void);
3461extern void expand_function_end (void);
82aa4bd5 3462extern void expand_function_start (tree);
60b8c5b3 3463extern void expand_pending_sizes (tree);
4ee9c684 3464extern void recompute_tree_invarant_for_addr_expr (tree);
3465extern bool needs_to_live_in_memory (tree);
3466extern tree make_vector (enum machine_mode, tree, int);
409a160c 3467extern tree reconstruct_complex_type (tree, tree);
60b8c5b3 3468
3469extern int real_onep (tree);
3470extern int real_twop (tree);
3471extern int real_minus_onep (tree);
3472extern void init_ttree (void);
3473extern void build_common_tree_nodes (int);
3474extern void build_common_tree_nodes_2 (int);
4f7f7efd 3475extern tree build_nonstandard_integer_type (unsigned HOST_WIDE_INT, int);
60b8c5b3 3476extern tree build_range_type (tree, tree, tree);
f52f7b9e 3477
3478/* In function.c */
60b8c5b3 3479extern void expand_main_function (void);
3480extern void init_dummy_function_start (void);
3481extern void expand_dummy_function_end (void);
3482extern void init_function_for_compilation (void);
ecc82929 3483extern void allocate_struct_function (tree);
60b8c5b3 3484extern void init_function_start (tree);
e8825bb0 3485extern bool use_register_for_decl (tree);
60b8c5b3 3486extern void assign_parms (tree);
4ee9c684 3487extern void setjmp_vars_warning (tree);
60b8c5b3 3488extern void setjmp_args_warning (void);
60b8c5b3 3489extern void init_temp_slots (void);
3490extern void combine_temp_slots (void);
3491extern void free_temp_slots (void);
3492extern void pop_temp_slots (void);
3493extern void push_temp_slots (void);
3494extern void preserve_temp_slots (rtx);
3495extern void preserve_rtl_expr_temps (tree);
45550790 3496extern int aggregate_value_p (tree, tree);
60b8c5b3 3497extern void push_function_context (void);
3498extern void pop_function_context (void);
3499extern void push_function_context_to (tree);
3500extern void pop_function_context_from (tree);
f52f7b9e 3501
3502/* In print-rtl.c */
3503#ifdef BUFSIZ
60b8c5b3 3504extern void print_rtl (FILE *, rtx);
f52f7b9e 3505#endif
3506
3507/* In print-tree.c */
60b8c5b3 3508extern void debug_tree (tree);
f52f7b9e 3509#ifdef BUFSIZ
60b8c5b3 3510extern void print_node (FILE *, const char *, tree, int);
3511extern void print_node_brief (FILE *, const char *, tree, int);
3512extern void indent_to (FILE *, int);
f52f7b9e 3513#endif
3514
d9671935 3515/* In tree-inline.c: */
3516extern bool debug_find_tree (tree, tree);
3517
f52f7b9e 3518/* In expr.c */
60b8c5b3 3519extern rtx expand_builtin_return_addr (enum built_in_function, int, rtx);
3520extern void check_max_integer_computation_mode (tree);
f52f7b9e 3521
3522/* In emit-rtl.c */
bccd9980 3523extern rtx emit_line_note (location_t);
f52f7b9e 3524
302bf7ba 3525/* In calls.c */
dfe08167 3526
79c31609 3527/* Nonzero if this is a call to a `const' function. */
3528#define ECF_CONST 1
3529/* Nonzero if this is a call to a `volatile' function. */
3530#define ECF_NORETURN 2
3531/* Nonzero if this is a call to malloc or a related function. */
3532#define ECF_MALLOC 4
3533/* Nonzero if it is plausible that this is a call to alloca. */
3534#define ECF_MAY_BE_ALLOCA 8
3535/* Nonzero if this is a call to a function that won't throw an exception. */
3536#define ECF_NOTHROW 16
3537/* Nonzero if this is a call to setjmp or a related function. */
3538#define ECF_RETURNS_TWICE 32
3539/* Nonzero if this is a call to `longjmp'. */
3540#define ECF_LONGJMP 64
3541/* Nonzero if this is a syscall that makes a new process in the image of
3542 the current one. */
73673831 3543#define ECF_SIBCALL 128
79c31609 3544/* Nonzero if this is a call to "pure" function (like const function,
3545 but may read memory. */
73673831 3546#define ECF_PURE 256
79c31609 3547/* Nonzero if this is a call to a function that returns with the stack
3548 pointer depressed. */
73673831 3549#define ECF_SP_DEPRESSED 512
79c31609 3550/* Nonzero if this call is known to always return. */
73673831 3551#define ECF_ALWAYS_RETURN 1024
79c31609 3552/* Create libcall block around the call. */
73673831 3553#define ECF_LIBCALL_BLOCK 2048
79c31609 3554
60b8c5b3 3555extern int flags_from_decl_or_type (tree);
886a914d 3556extern int call_expr_flags (tree);
79c31609 3557
60b8c5b3 3558extern int setjmp_call_p (tree);
3559extern bool alloca_call_p (tree);
302bf7ba 3560
e3f6ce11 3561/* In attribs.c. */
434712c4 3562
3563/* Process the attributes listed in ATTRIBUTES and install them in *NODE,
3564 which is either a DECL (including a TYPE_DECL) or a TYPE. If a DECL,
3565 it should be modified in place; if a TYPE, a copy should be created
3566 unless ATTR_FLAG_TYPE_IN_PLACE is set in FLAGS. FLAGS gives further
3567 information, in the form of a bitwise OR of flags in enum attribute_flags
3568 from tree.h. Depending on these flags, some attributes may be
3569 returned to be applied at a later stage (for example, to apply
3570 a decl attribute to the declaration rather than to its type). */
aecda0d6 3571extern tree decl_attributes (tree *, tree, int);
e3f6ce11 3572
f52f7b9e 3573/* In integrate.c */
60b8c5b3 3574extern void set_decl_abstract_flags (tree, int);
60b8c5b3 3575extern void set_decl_origin_self (tree);
f52f7b9e 3576
f52f7b9e 3577/* In stor-layout.c */
ee1ab431 3578extern void set_min_and_max_values_for_integral_type (tree, int, bool);
60b8c5b3 3579extern void fixup_signed_type (tree);
3580extern void internal_reference_types (void);
4ee9c684 3581extern unsigned int update_alignment_for_field (record_layout_info, tree,
3582 unsigned int);
f52f7b9e 3583/* varasm.c */
60b8c5b3 3584extern void make_decl_rtl (tree, const char *);
3585extern void make_decl_one_only (tree);
3586extern int supports_one_only (void);
3587extern void variable_section (tree, int);
3588enum tls_model decl_tls_model (tree);
60b8c5b3 3589extern void resolve_unique_section (tree, int, int);
3590extern void mark_referenced (tree);
4490a821 3591extern void mark_decl_referenced (tree);
3cad5dd7 3592extern void notice_global_symbol (tree);
f52f7b9e 3593
f52f7b9e 3594/* In stmt.c */
60b8c5b3 3595extern void emit_nop (void);
3596extern void expand_computed_goto (tree);
3597extern bool parse_output_constraint (const char **, int, int, int,
3598 bool *, bool *, bool *);
d7e38994 3599extern bool parse_input_constraint (const char **, int, int, int, int,
3600 const char * const *, bool *, bool *);
867bd639 3601extern void expand_asm_operands (tree, tree, tree, tree, int, location_t);
4ee9c684 3602extern void expand_asm_expr (tree);
3603extern bool asm_op_is_mem_input (tree, tree);
ef13e68f 3604extern tree resolve_asm_operand_names (tree, tree, tree);
60b8c5b3 3605extern void init_stmt_for_function (void);
3606extern void expand_start_target_temps (void);
3607extern void expand_end_target_temps (void);
3608extern void expand_elseif (tree);
60b8c5b3 3609extern void expand_decl (tree);
60b8c5b3 3610extern void expand_anon_union_decl (tree, tree, tree);
4ee9c684 3611
3612/* In gimplify.c. */
3613extern tree create_artificial_label (void);
3614extern void gimplify_function_tree (tree);
3615extern const char *get_name (tree);
3616extern tree unshare_expr (tree);
da41aa8e 3617extern void sort_case_labels (tree);
f52f7b9e 3618
c0c62896 3619/* If KIND=='I', return a suitable global initializer (constructor) name.
3620 If KIND=='D', return a suitable global clean-up (destructor) name. */
60b8c5b3 3621extern tree get_file_function_name (int);
a50b6670 3622\f
3623/* Interface of the DWARF2 unwind info support. */
3624
a50b6670 3625/* Generate a new label for the CFI info to refer to. */
3626
60b8c5b3 3627extern char *dwarf2out_cfi_label (void);
a50b6670 3628
3629/* Entry point to update the canonical frame address (CFA). */
3630
c043c821 3631extern void dwarf2out_def_cfa (const char *, unsigned, HOST_WIDE_INT);
a50b6670 3632
3633/* Add the CFI for saving a register window. */
3634
60b8c5b3 3635extern void dwarf2out_window_save (const char *);
a50b6670 3636
3637/* Add a CFI to update the running total of the size of arguments pushed
3638 onto the stack. */
3639
c043c821 3640extern void dwarf2out_args_size (const char *, HOST_WIDE_INT);
a50b6670 3641
3642/* Entry point for saving a register to the stack. */
3643
c043c821 3644extern void dwarf2out_reg_save (const char *, unsigned, HOST_WIDE_INT);
a50b6670 3645
3646/* Entry point for saving the return address in the stack. */
3647
c043c821 3648extern void dwarf2out_return_save (const char *, HOST_WIDE_INT);
a50b6670 3649
3650/* Entry point for saving the return address in a register. */
3651
60b8c5b3 3652extern void dwarf2out_return_reg (const char *, unsigned);
a50b6670 3653
4ee9c684 3654/* The type of a callback function for walking over tree structure. */
1431bff6 3655
60b8c5b3 3656typedef tree (*walk_tree_fn) (tree *, int *, void *);
4ee9c684 3657tree walk_tree (tree*, walk_tree_fn, void*, void*);
3658tree walk_tree_without_duplicates (tree*, walk_tree_fn, void*);
1431bff6 3659
3119c950 3660/* In tree-dump.c */
3661
3662/* Different tree dump places. When you add new tree dump places,
4ee9c684 3663 extend the DUMP_FILES array in tree-dump.c. */
3119c950 3664enum tree_dump_index
3665{
4ee9c684 3666 TDI_none, /* No dump */
3667 TDI_tu, /* dump the whole translation unit. */
3668 TDI_class, /* dump class hierarchy. */
3119c950 3669 TDI_original, /* dump each function before optimizing it */
4ee9c684 3670 TDI_generic, /* dump each function after genericizing it */
3671 TDI_nested, /* dump each function after unnesting it */
3119c950 3672 TDI_inlined, /* dump each function after inlining
3673 within it. */
4ee9c684 3674 TDI_vcg, /* create a VCG graph file for each
3675 function's flowgraph. */
0bed3869 3676 TDI_xml, /* dump function call graph. */
4ee9c684 3677 TDI_all, /* enable all the dumps. */
3119c950 3678 TDI_end
3679};
3680
3681/* Bit masks to control tree dumping. Not all values are applicable to
3682 all tree dumps. Add new ones at the end. When you define new
3683 values, extend the DUMP_OPTIONS array in tree-dump.c */
3684#define TDF_ADDRESS (1 << 0) /* dump node addresses */
3685#define TDF_SLIM (1 << 1) /* don't go wild following links */
4ee9c684 3686#define TDF_RAW (1 << 2) /* don't unparse the function */
3687#define TDF_DETAILS (1 << 3) /* show more detailed info about
3688 each pass */
3689#define TDF_STATS (1 << 4) /* dump various statistics about
3690 each pass */
3691#define TDF_BLOCKS (1 << 5) /* display basic block boundaries */
3692#define TDF_VOPS (1 << 6) /* display virtual operands */
3693#define TDF_LINENO (1 << 7) /* display statement line numbers */
3694#define TDF_UID (1 << 8) /* display decl UIDs */
3695
3119c950 3696
3697typedef struct dump_info *dump_info_p;
3698
60b8c5b3 3699extern int dump_flag (dump_info_p, int, tree);
3700extern int dump_enabled_p (enum tree_dump_index);
3701extern FILE *dump_begin (enum tree_dump_index, int *);
3702extern void dump_end (enum tree_dump_index, FILE *);
3703extern void dump_node (tree, int, FILE *);
3704extern int dump_switch_p (const char *);
3705extern const char *dump_flag_name (enum tree_dump_index);
ca74b940 3706/* Assign the RTX to declaration. */
3707
60b8c5b3 3708extern void set_decl_rtl (tree, rtx);
ebfc27f5 3709extern void set_decl_incoming_rtl (tree, rtx);
bdcbc557 3710\f
dda90815 3711/* Redefine abort to report an internal error w/o coredump, and
3712 reporting the location of the error in the source file. This logic
3713 is duplicated in rtl.h and tree.h because every file that needs the
3714 special abort includes one or both. toplev.h gets too few files,
3715 system.h gets too many. */
3716
60b8c5b3 3717extern void fancy_abort (const char *, int, const char *)
dda90815 3718 ATTRIBUTE_NORETURN;
19fafbd3 3719#define abort() fancy_abort (__FILE__, __LINE__, __FUNCTION__)
b229f760 3720
b7257530 3721/* Enum and arrays used for tree allocation stats.
b4b174c3 3722 Keep in sync with tree.c:tree_node_kind_names. */
b7257530 3723typedef enum
3724{
3725 d_kind,
3726 t_kind,
3727 b_kind,
3728 s_kind,
3729 r_kind,
3730 e_kind,
3731 c_kind,
3732 id_kind,
3733 perm_list_kind,
3734 temp_list_kind,
3735 vec_kind,
3cb98335 3736 binfo_kind,
4ee9c684 3737 phi_kind,
3738 ssa_name_kind,
b7257530 3739 x_kind,
3740 lang_decl,
3741 lang_type,
3742 all_kinds
3743} tree_node_kind;
3744
3745extern int tree_node_counts[];
3746extern int tree_node_sizes[];
4ee9c684 3747
3748/* True if we are in gimple form and the actions of the folders need to
3749 be restricted. False if we are not in gimple form and folding is not
3750 restricted to creating gimple expressions. */
3751extern bool in_gimple_form;
b7257530 3752
b229f760 3753#endif /* GCC_TREE_H */