comparison gcc/tree.h @ 69:1b10fe6932e1

merge 69
author Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
date Sun, 21 Aug 2011 07:53:12 +0900
parents 326d9e06c2e3 f6334be47118
children f26ecf70364b
comparison
equal deleted inserted replaced
66:b362627d71ba 69:1b10fe6932e1
1 /* Front-end tree definitions for GNU compiler. 1 /* Front-end tree definitions for GNU compiler.
2 Copyright (C) 1989, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2 Copyright (C) 1989, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
3 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 3 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
4 Free Software Foundation, Inc. 4 Free Software Foundation, Inc.
5 5
6 This file is part of GCC. 6 This file is part of GCC.
7 7
8 GCC is free software; you can redistribute it and/or modify it under 8 GCC is free software; you can redistribute it and/or modify it under
25 #include "hashtab.h" 25 #include "hashtab.h"
26 #include "machmode.h" 26 #include "machmode.h"
27 #include "input.h" 27 #include "input.h"
28 #include "statistics.h" 28 #include "statistics.h"
29 #include "vec.h" 29 #include "vec.h"
30 #include "vecir.h"
30 #include "double-int.h" 31 #include "double-int.h"
32 #include "real.h"
33 #include "fixed-value.h"
31 #include "alias.h" 34 #include "alias.h"
32 #include "options.h" 35 #include "flags.h"
33 36
34 /* Codes of tree nodes */ 37 /* Codes of tree nodes */
35 38
36 #define DEFTREECODE(SYM, STRING, TYPE, NARGS) SYM, 39 #define DEFTREECODE(SYM, STRING, TYPE, NARGS) SYM,
37 #define END_OF_BASE_TREE_CODES LAST_AND_UNUSED_TREE_CODE, 40 #define END_OF_BASE_TREE_CODES LAST_AND_UNUSED_TREE_CODE,
112 115
113 /* Nonzero if CODE represents a INDIRECT_REF. Keep these checks in 116 /* Nonzero if CODE represents a INDIRECT_REF. Keep these checks in
114 ascending code order. */ 117 ascending code order. */
115 118
116 #define INDIRECT_REF_P(CODE)\ 119 #define INDIRECT_REF_P(CODE)\
117 (TREE_CODE (CODE) == INDIRECT_REF \ 120 (TREE_CODE (CODE) == INDIRECT_REF)
118 || TREE_CODE (CODE) == ALIGN_INDIRECT_REF \
119 || TREE_CODE (CODE) == MISALIGNED_INDIRECT_REF)
120 121
121 /* Nonzero if CODE represents a reference. */ 122 /* Nonzero if CODE represents a reference. */
122 123
123 #define REFERENCE_CLASS_P(CODE)\ 124 #define REFERENCE_CLASS_P(CODE)\
124 (TREE_CODE_CLASS (TREE_CODE (CODE)) == tcc_reference) 125 (TREE_CODE_CLASS (TREE_CODE (CODE)) == tcc_reference)
175 #define TREE_CODE_LENGTH(CODE) tree_code_length[(int) (CODE)] 176 #define TREE_CODE_LENGTH(CODE) tree_code_length[(int) (CODE)]
176 177
177 /* Names of tree components. */ 178 /* Names of tree components. */
178 179
179 extern const char *const tree_code_name[]; 180 extern const char *const tree_code_name[];
180
181 /* A vectors of trees. */
182 DEF_VEC_P(tree);
183 DEF_VEC_ALLOC_P(tree,gc);
184 DEF_VEC_ALLOC_P(tree,heap);
185 181
186 /* We have to be able to tell cgraph about the needed-ness of the target 182 /* We have to be able to tell cgraph about the needed-ness of the target
187 of an alias. This requires that the decl have been defined. Aliases 183 of an alias. This requires that the decl have been defined. Aliases
188 that precede their definition have to be queued for later processing. */ 184 that precede their definition have to be queued for later processing. */
189 185
186 /* The deferred processing proceeds in several passes. We memorize the
187 diagnostics emitted for a pair to prevent repeating messages when the
188 queue gets re-scanned after possible updates. */
189
190 typedef enum {
191 ALIAS_DIAG_NONE = 0x0,
192 ALIAS_DIAG_TO_UNDEF = 0x1,
193 ALIAS_DIAG_TO_EXTERN = 0x2
194 } alias_diag_flags;
195
190 typedef struct GTY(()) alias_pair 196 typedef struct GTY(()) alias_pair
191 { 197 {
192 tree decl; 198 tree decl;
193 tree target; 199 tree target;
200 int emitted_diags; /* alias_diags already emitted for this pair. */
194 } alias_pair; 201 } alias_pair;
195 202
196 /* Define gc'd vector type. */ 203 /* Define gc'd vector type. */
197 DEF_VEC_O(alias_pair); 204 DEF_VEC_O(alias_pair);
198 DEF_VEC_ALLOC_O(alias_pair,gc); 205 DEF_VEC_ALLOC_O(alias_pair,gc);
388 unsigned lang_flag_6 : 1; 395 unsigned lang_flag_6 : 1;
389 396
390 unsigned visited : 1; 397 unsigned visited : 1;
391 unsigned packed_flag : 1; 398 unsigned packed_flag : 1;
392 unsigned user_align : 1; 399 unsigned user_align : 1;
393 400 unsigned nameless_flag : 1;
394 unsigned spare : 13; 401
402 unsigned spare : 12;
395 403
396 /* This field is only used with type nodes; the only reason it is present 404 /* This field is only used with type nodes; the only reason it is present
397 in tree_base instead of tree_type is to save space. The size of the 405 in tree_base instead of tree_type is to save space. The size of the
398 field must be large enough to hold addr_space_t values. */ 406 field must be large enough to hold addr_space_t values. */
399 unsigned address_space : 8; 407 unsigned address_space : 8;
409 for which types of nodes they are defined. 417 for which types of nodes they are defined.
410 418
411 addressable_flag: 419 addressable_flag:
412 420
413 TREE_ADDRESSABLE in 421 TREE_ADDRESSABLE in
414 VAR_DECL, FUNCTION_DECL, FIELD_DECL, LABEL_DECL 422 VAR_DECL, PARM_DECL, RESULT_DECL, FUNCTION_DECL, LABEL_DECL
415 all types 423 all types
416 CONSTRUCTOR, IDENTIFIER_NODE 424 CONSTRUCTOR, IDENTIFIER_NODE
417 STMT_EXPR, it means we want the result of the enclosed expression 425 STMT_EXPR, it means we want the result of the enclosed expression
418 426
419 CALL_EXPR_TAILCALL in 427 CALL_EXPR_TAILCALL in
455 CASE_HIGH_SEEN in 463 CASE_HIGH_SEEN in
456 CASE_LABEL_EXPR 464 CASE_LABEL_EXPR
457 465
458 CALL_CANNOT_INLINE_P in 466 CALL_CANNOT_INLINE_P in
459 CALL_EXPR 467 CALL_EXPR
468
469 ENUM_IS_SCOPED in
470 ENUMERAL_TYPE
460 471
461 public_flag: 472 public_flag:
462 473
463 TREE_OVERFLOW in 474 TREE_OVERFLOW in
464 INTEGER_CST, REAL_CST, COMPLEX_CST, VECTOR_CST 475 INTEGER_CST, REAL_CST, COMPLEX_CST, VECTOR_CST
499 OMP_PARALLEL_COMBINED in 510 OMP_PARALLEL_COMBINED in
500 OMP_PARALLEL 511 OMP_PARALLEL
501 OMP_CLAUSE_PRIVATE_OUTER_REF in 512 OMP_CLAUSE_PRIVATE_OUTER_REF in
502 OMP_CLAUSE_PRIVATE 513 OMP_CLAUSE_PRIVATE
503 514
515 TYPE_REF_IS_RVALUE in
516 REFERENCE_TYPE
517
504 protected_flag: 518 protected_flag:
505 519
506 TREE_PROTECTED in 520 TREE_PROTECTED in
507 BLOCK 521 BLOCK
508 all decls 522 all decls
509 523
510 CALL_FROM_THUNK_P in 524 CALL_FROM_THUNK_P and
525 ALLOCA_FOR_VAR_P in
511 CALL_EXPR 526 CALL_EXPR
512 527
513 side_effects_flag: 528 side_effects_flag:
514 529
515 TREE_SIDE_EFFECTS in 530 TREE_SIDE_EFFECTS in
584 599
585 TYPE_ALIGN_OK in 600 TYPE_ALIGN_OK in
586 all types 601 all types
587 602
588 TREE_THIS_NOTRAP in 603 TREE_THIS_NOTRAP in
589 (ALIGN/MISALIGNED_)INDIRECT_REF, ARRAY_REF, ARRAY_RANGE_REF 604 INDIRECT_REF, MEM_REF, TARGET_MEM_REF, ARRAY_REF, ARRAY_RANGE_REF
590 605
591 deprecated_flag: 606 deprecated_flag:
592 607
593 TREE_DEPRECATED in 608 TREE_DEPRECATED in
594 all decls 609 all decls
833 if (__i < 0 || __i >= TREE_OPERAND_LENGTH (__t)) \ 848 if (__i < 0 || __i >= TREE_OPERAND_LENGTH (__t)) \
834 tree_operand_check_failed (__i, __t, \ 849 tree_operand_check_failed (__i, __t, \
835 __FILE__, __LINE__, __FUNCTION__); \ 850 __FILE__, __LINE__, __FUNCTION__); \
836 &__t->exp.operands[__i]; })) 851 &__t->exp.operands[__i]; }))
837 852
838 #define TREE_RTL_OPERAND_CHECK(T, CODE, I) __extension__ \
839 (*(rtx *) \
840 ({__typeof (T) const __t = (T); \
841 const int __i = (I); \
842 if (TREE_CODE (__t) != (CODE)) \
843 tree_check_failed (__t, __FILE__, __LINE__, __FUNCTION__, (CODE), 0); \
844 if (__i < 0 || __i >= TREE_OPERAND_LENGTH (__t)) \
845 tree_operand_check_failed (__i, __t, \
846 __FILE__, __LINE__, __FUNCTION__); \
847 &__t->exp.operands[__i]; }))
848
849 /* Nodes are chained together for many purposes. 853 /* Nodes are chained together for many purposes.
850 Types are chained together to record them for being output to the debugger 854 Types are chained together to record them for being output to the debugger
851 (see the function `chain_type'). 855 (see the function `chain_type').
852 Decls in the same scope are chained together to record the contents 856 Decls in the same scope are chained together to record the contents
853 of the scope. 857 of the scope.
879 extern void tree_class_check_failed (const_tree, const enum tree_code_class, 883 extern void tree_class_check_failed (const_tree, const enum tree_code_class,
880 const char *, int, const char *) 884 const char *, int, const char *)
881 ATTRIBUTE_NORETURN; 885 ATTRIBUTE_NORETURN;
882 extern void tree_range_check_failed (const_tree, const char *, int, 886 extern void tree_range_check_failed (const_tree, const char *, int,
883 const char *, enum tree_code, 887 const char *, enum tree_code,
884 enum tree_code); 888 enum tree_code)
889 ATTRIBUTE_NORETURN;
885 extern void tree_not_class_check_failed (const_tree, 890 extern void tree_not_class_check_failed (const_tree,
886 const enum tree_code_class, 891 const enum tree_code_class,
887 const char *, int, const char *) 892 const char *, int, const char *)
888 ATTRIBUTE_NORETURN; 893 ATTRIBUTE_NORETURN;
889 extern void tree_vec_elt_check_failed (int, int, const char *, 894 extern void tree_vec_elt_check_failed (int, int, const char *,
924 #define EXPR_CHECK(T) (T) 929 #define EXPR_CHECK(T) (T)
925 #define NON_TYPE_CHECK(T) (T) 930 #define NON_TYPE_CHECK(T) (T)
926 #define TREE_VEC_ELT_CHECK(T, I) ((T)->vec.a[I]) 931 #define TREE_VEC_ELT_CHECK(T, I) ((T)->vec.a[I])
927 #define TREE_OPERAND_CHECK(T, I) ((T)->exp.operands[I]) 932 #define TREE_OPERAND_CHECK(T, I) ((T)->exp.operands[I])
928 #define TREE_OPERAND_CHECK_CODE(T, CODE, I) ((T)->exp.operands[I]) 933 #define TREE_OPERAND_CHECK_CODE(T, CODE, I) ((T)->exp.operands[I])
929 #define TREE_RTL_OPERAND_CHECK(T, CODE, I) (*(rtx *) &((T)->exp.operands[I]))
930 #define OMP_CLAUSE_ELT_CHECK(T, i) ((T)->omp_clause.ops[i]) 934 #define OMP_CLAUSE_ELT_CHECK(T, i) ((T)->omp_clause.ops[i])
931 #define OMP_CLAUSE_RANGE_CHECK(T, CODE1, CODE2) (T) 935 #define OMP_CLAUSE_RANGE_CHECK(T, CODE1, CODE2) (T)
932 #define OMP_CLAUSE_SUBCODE_CHECK(T, CODE) (T) 936 #define OMP_CLAUSE_SUBCODE_CHECK(T, CODE) (T)
933 937
934 #define TREE_CHAIN(NODE) ((NODE)->common.chain) 938 #define TREE_CHAIN(NODE) ((NODE)->common.chain)
1098 (COMPLETE_TYPE_P (TREE_CODE (NODE) == ARRAY_TYPE ? TREE_TYPE (NODE) : (NODE))) 1102 (COMPLETE_TYPE_P (TREE_CODE (NODE) == ARRAY_TYPE ? TREE_TYPE (NODE) : (NODE)))
1099 1103
1100 1104
1101 /* Define many boolean fields that all tree nodes have. */ 1105 /* Define many boolean fields that all tree nodes have. */
1102 1106
1103 /* In VAR_DECL nodes, nonzero means address of this is needed. 1107 /* In VAR_DECL, PARM_DECL and RESULT_DECL nodes, nonzero means address
1104 So it cannot be in a register. 1108 of this is needed. So it cannot be in a register.
1105 In a FUNCTION_DECL, nonzero means its address is needed. 1109 In a FUNCTION_DECL it has no meaning.
1106 So it must be compiled even if it is an inline function.
1107 In a FIELD_DECL node, it means that the programmer is permitted to
1108 construct the address of this field. This is used for aliasing
1109 purposes: see record_component_aliases.
1110 In CONSTRUCTOR nodes, it means object constructed must be in memory. 1110 In CONSTRUCTOR nodes, it means object constructed must be in memory.
1111 In LABEL_DECL nodes, it means a goto for this label has been seen 1111 In LABEL_DECL nodes, it means a goto for this label has been seen
1112 from a place outside all binding contours that restore stack levels. 1112 from a place outside all binding contours that restore stack levels.
1113 In ..._TYPE nodes, it means that objects of this type must 1113 In ..._TYPE nodes, it means that objects of this type must be fully
1114 be fully addressable. This means that pieces of this 1114 addressable. This means that pieces of this object cannot go into
1115 object cannot go into register parameters, for example. 1115 register parameters, for example. If this a function type, this
1116 means that the value must be returned in memory.
1116 In IDENTIFIER_NODEs, this means that some extern decl for this name 1117 In IDENTIFIER_NODEs, this means that some extern decl for this name
1117 had its address taken. That matters for inline functions. */ 1118 had its address taken. That matters for inline functions. */
1118 #define TREE_ADDRESSABLE(NODE) ((NODE)->base.addressable_flag) 1119 #define TREE_ADDRESSABLE(NODE) ((NODE)->base.addressable_flag)
1119 1120
1120 /* Set on a CALL_EXPR if the call is in a tail position, ie. just before the 1121 /* Set on a CALL_EXPR if the call is in a tail position, ie. just before the
1158 #define CASE_HIGH_SEEN(NODE) \ 1159 #define CASE_HIGH_SEEN(NODE) \
1159 (CASE_LABEL_EXPR_CHECK (NODE)->base.static_flag) 1160 (CASE_LABEL_EXPR_CHECK (NODE)->base.static_flag)
1160 1161
1161 /* Used to mark a CALL_EXPR as not suitable for inlining. */ 1162 /* Used to mark a CALL_EXPR as not suitable for inlining. */
1162 #define CALL_CANNOT_INLINE_P(NODE) (CALL_EXPR_CHECK (NODE)->base.static_flag) 1163 #define CALL_CANNOT_INLINE_P(NODE) (CALL_EXPR_CHECK (NODE)->base.static_flag)
1164
1165 /* Used to mark scoped enums. */
1166 #define ENUM_IS_SCOPED(NODE) (ENUMERAL_TYPE_CHECK (NODE)->base.static_flag)
1167
1168 /* Determines whether an ENUMERAL_TYPE has defined the list of constants. */
1169 #define ENUM_IS_OPAQUE(NODE) (ENUMERAL_TYPE_CHECK (NODE)->base.private_flag)
1163 1170
1164 /* In an expr node (usually a conversion) this means the node was made 1171 /* In an expr node (usually a conversion) this means the node was made
1165 implicitly and should not lead to any sort of warning. In a decl node, 1172 implicitly and should not lead to any sort of warning. In a decl node,
1166 warnings concerning the decl should be suppressed. This is used at 1173 warnings concerning the decl should be suppressed. This is used at
1167 least for used-before-set warnings, and it set after one warning is 1174 least for used-before-set warnings, and it set after one warning is
1242 #define TREE_THIS_VOLATILE(NODE) ((NODE)->base.volatile_flag) 1249 #define TREE_THIS_VOLATILE(NODE) ((NODE)->base.volatile_flag)
1243 1250
1244 /* Nonzero means this node will not trap. In an INDIRECT_REF, means 1251 /* Nonzero means this node will not trap. In an INDIRECT_REF, means
1245 accessing the memory pointed to won't generate a trap. However, 1252 accessing the memory pointed to won't generate a trap. However,
1246 this only applies to an object when used appropriately: it doesn't 1253 this only applies to an object when used appropriately: it doesn't
1247 mean that writing a READONLY mem won't trap. Similarly for 1254 mean that writing a READONLY mem won't trap.
1248 ALIGN_INDIRECT_REF and MISALIGNED_INDIRECT_REF.
1249 1255
1250 In ARRAY_REF and ARRAY_RANGE_REF means that we know that the index 1256 In ARRAY_REF and ARRAY_RANGE_REF means that we know that the index
1251 (or slice of the array) always belongs to the range of the array. 1257 (or slice of the array) always belongs to the range of the array.
1252 I.e. that the access will not trap, provided that the access to 1258 I.e. that the access will not trap, provided that the access to
1253 the base to the array will not trap. */ 1259 the base to the array will not trap. */
1254 #define TREE_THIS_NOTRAP(NODE) ((NODE)->base.nothrow_flag) 1260 #define TREE_THIS_NOTRAP(NODE) \
1261 (TREE_CHECK5 (NODE, INDIRECT_REF, MEM_REF, TARGET_MEM_REF, ARRAY_REF, \
1262 ARRAY_RANGE_REF)->base.nothrow_flag)
1255 1263
1256 /* In a VAR_DECL, PARM_DECL or FIELD_DECL, or any kind of ..._REF node, 1264 /* In a VAR_DECL, PARM_DECL or FIELD_DECL, or any kind of ..._REF node,
1257 nonzero means it may not be the lhs of an assignment. 1265 nonzero means it may not be the lhs of an assignment.
1258 Nonzero in a FUNCTION_DECL means this function should be treated 1266 Nonzero in a FUNCTION_DECL means this function should be treated
1259 as "const" function (can only read its arguments). */ 1267 as "const" function (can only read its arguments). */
1290 In IDENTIFIER_NODEs, this means that some extern decl for this name 1298 In IDENTIFIER_NODEs, this means that some extern decl for this name
1291 was used. 1299 was used.
1292 In a BLOCK, this means that the block contains variables that are used. */ 1300 In a BLOCK, this means that the block contains variables that are used. */
1293 #define TREE_USED(NODE) ((NODE)->base.used_flag) 1301 #define TREE_USED(NODE) ((NODE)->base.used_flag)
1294 1302
1295 /* In a FUNCTION_DECL, nonzero means a call to the function cannot throw 1303 /* In a FUNCTION_DECL, nonzero means a call to the function cannot
1296 an exception. In a CALL_EXPR, nonzero means the call cannot throw. */ 1304 throw an exception. In a CALL_EXPR, nonzero means the call cannot
1305 throw. We can't easily check the node type here as the C++
1306 frontend also uses this flag (for AGGR_INIT_EXPR). */
1297 #define TREE_NOTHROW(NODE) ((NODE)->base.nothrow_flag) 1307 #define TREE_NOTHROW(NODE) ((NODE)->base.nothrow_flag)
1298 1308
1299 /* In a CALL_EXPR, means that it's safe to use the target of the call 1309 /* In a CALL_EXPR, means that it's safe to use the target of the call
1300 expansion as the return slot for a call that returns in memory. */ 1310 expansion as the return slot for a call that returns in memory. */
1301 #define CALL_EXPR_RETURN_SLOT_OPT(NODE) \ 1311 #define CALL_EXPR_RETURN_SLOT_OPT(NODE) \
1315 such variables). */ 1325 such variables). */
1316 #define DECL_RESTRICTED_P(NODE) \ 1326 #define DECL_RESTRICTED_P(NODE) \
1317 (TREE_CHECK3 (NODE, VAR_DECL, PARM_DECL, \ 1327 (TREE_CHECK3 (NODE, VAR_DECL, PARM_DECL, \
1318 RESULT_DECL)->decl_common.decl_restricted_flag) 1328 RESULT_DECL)->decl_common.decl_restricted_flag)
1319 1329
1330 #define DECL_READ_P(NODE) \
1331 (TREE_CHECK2 (NODE, VAR_DECL, PARM_DECL)->decl_common.decl_read_flag)
1332
1320 /* In a CALL_EXPR, means that the call is the jump from a thunk to the 1333 /* In a CALL_EXPR, means that the call is the jump from a thunk to the
1321 thunked-to function. */ 1334 thunked-to function. */
1322 #define CALL_FROM_THUNK_P(NODE) (CALL_EXPR_CHECK (NODE)->base.protected_flag) 1335 #define CALL_FROM_THUNK_P(NODE) (CALL_EXPR_CHECK (NODE)->base.protected_flag)
1336
1337 /* In a CALL_EXPR, if the function being called is BUILT_IN_ALLOCA, means that
1338 it has been built for the declaration of a variable-sized object. */
1339 #define ALLOCA_FOR_VAR_P(NODE) (CALL_EXPR_CHECK (NODE)->base.protected_flag)
1323 1340
1324 /* In a type, nonzero means that all objects of the type are guaranteed by the 1341 /* In a type, nonzero means that all objects of the type are guaranteed by the
1325 language or front-end to be properly aligned, so we can indicate that a MEM 1342 language or front-end to be properly aligned, so we can indicate that a MEM
1326 of this type is aligned at least to the alignment of the type, even if it 1343 of this type is aligned at least to the alignment of the type, even if it
1327 doesn't appear that it is. We see this, for example, in object-oriented 1344 doesn't appear that it is. We see this, for example, in object-oriented
1334 1351
1335 /* Used in classes in C++. */ 1352 /* Used in classes in C++. */
1336 #define TREE_PRIVATE(NODE) ((NODE)->base.private_flag) 1353 #define TREE_PRIVATE(NODE) ((NODE)->base.private_flag)
1337 /* Used in classes in C++. */ 1354 /* Used in classes in C++. */
1338 #define TREE_PROTECTED(NODE) ((NODE)->base.protected_flag) 1355 #define TREE_PROTECTED(NODE) ((NODE)->base.protected_flag)
1356
1357 /* True if reference type NODE is a C++ rvalue reference. */
1358 #define TYPE_REF_IS_RVALUE(NODE) \
1359 (REFERENCE_TYPE_CHECK (NODE)->base.private_flag)
1339 1360
1340 /* Nonzero in a _DECL if the use of the name is defined as a 1361 /* Nonzero in a _DECL if the use of the name is defined as a
1341 deprecated feature by __attribute__((deprecated)). */ 1362 deprecated feature by __attribute__((deprecated)). */
1342 #define TREE_DEPRECATED(NODE) \ 1363 #define TREE_DEPRECATED(NODE) \
1343 ((NODE)->base.deprecated_flag) 1364 ((NODE)->base.deprecated_flag)
1400 }; 1421 };
1401 1422
1402 /* In a FIXED_CST node. */ 1423 /* In a FIXED_CST node. */
1403 struct fixed_value; 1424 struct fixed_value;
1404 1425
1405 #define TREE_FIXED_CST_PTR(NODE) (FIXED_CST_CHECK (NODE)->fixed_cst.fixed_cst_ptr) 1426 #define TREE_FIXED_CST_PTR(NODE) \
1427 (FIXED_CST_CHECK (NODE)->fixed_cst.fixed_cst_ptr)
1406 #define TREE_FIXED_CST(NODE) (*TREE_FIXED_CST_PTR (NODE)) 1428 #define TREE_FIXED_CST(NODE) (*TREE_FIXED_CST_PTR (NODE))
1407 1429
1408 struct GTY(()) tree_fixed_cst { 1430 struct GTY(()) tree_fixed_cst {
1409 struct tree_common common; 1431 struct tree_common common;
1410 struct fixed_value * fixed_cst_ptr; 1432 struct fixed_value * fixed_cst_ptr;
1487 1509
1488 /* In a CONSTRUCTOR node. */ 1510 /* In a CONSTRUCTOR node. */
1489 #define CONSTRUCTOR_ELTS(NODE) (CONSTRUCTOR_CHECK (NODE)->constructor.elts) 1511 #define CONSTRUCTOR_ELTS(NODE) (CONSTRUCTOR_CHECK (NODE)->constructor.elts)
1490 #define CONSTRUCTOR_ELT(NODE,IDX) \ 1512 #define CONSTRUCTOR_ELT(NODE,IDX) \
1491 (VEC_index (constructor_elt, CONSTRUCTOR_ELTS (NODE), IDX)) 1513 (VEC_index (constructor_elt, CONSTRUCTOR_ELTS (NODE), IDX))
1492 #define CONSTRUCTOR_NELTS(NODE) (VEC_length (constructor_elt, CONSTRUCTOR_ELTS (NODE))) 1514 #define CONSTRUCTOR_NELTS(NODE) \
1515 (VEC_length (constructor_elt, CONSTRUCTOR_ELTS (NODE)))
1493 1516
1494 /* Iterate through the vector V of CONSTRUCTOR_ELT elements, yielding the 1517 /* Iterate through the vector V of CONSTRUCTOR_ELT elements, yielding the
1495 value of each element (stored within VAL). IX must be a scratch variable 1518 value of each element (stored within VAL). IX must be a scratch variable
1496 of unsigned integer type. */ 1519 of unsigned integer type. */
1497 #define FOR_EACH_CONSTRUCTOR_VALUE(V, IX, VAL) \ 1520 #define FOR_EACH_CONSTRUCTOR_VALUE(V, IX, VAL) \
1505 the value of each element (stored within VAL) and its index (stored 1528 the value of each element (stored within VAL) and its index (stored
1506 within INDEX). IX must be a scratch variable of unsigned integer type. */ 1529 within INDEX). IX must be a scratch variable of unsigned integer type. */
1507 #define FOR_EACH_CONSTRUCTOR_ELT(V, IX, INDEX, VAL) \ 1530 #define FOR_EACH_CONSTRUCTOR_ELT(V, IX, INDEX, VAL) \
1508 for (IX = 0; (IX >= VEC_length (constructor_elt, V)) \ 1531 for (IX = 0; (IX >= VEC_length (constructor_elt, V)) \
1509 ? false \ 1532 ? false \
1510 : ((VAL = VEC_index (constructor_elt, V, IX)->value), \ 1533 : (((void) (VAL = VEC_index (constructor_elt, V, IX)->value)), \
1511 (INDEX = VEC_index (constructor_elt, V, IX)->index), \ 1534 (INDEX = VEC_index (constructor_elt, V, IX)->index), \
1512 true); \ 1535 true); \
1513 (IX)++) 1536 (IX)++)
1514 1537
1515 /* Append a new constructor element to V, with the specified INDEX and VAL. */ 1538 /* Append a new constructor element to V, with the specified INDEX and VAL. */
1516 #define CONSTRUCTOR_APPEND_ELT(V, INDEX, VALUE) \ 1539 #define CONSTRUCTOR_APPEND_ELT(V, INDEX, VALUE) \
1517 do { \ 1540 do { \
1568 #define LOOP_EXPR_BODY(NODE) TREE_OPERAND_CHECK_CODE (NODE, LOOP_EXPR, 0) 1591 #define LOOP_EXPR_BODY(NODE) TREE_OPERAND_CHECK_CODE (NODE, LOOP_EXPR, 0)
1569 1592
1570 /* The source location of this expression. Non-tree_exp nodes such as 1593 /* The source location of this expression. Non-tree_exp nodes such as
1571 decls and constants can be shared among multiple locations, so 1594 decls and constants can be shared among multiple locations, so
1572 return nothing. */ 1595 return nothing. */
1573 #define EXPR_LOCATION(NODE) (EXPR_P ((NODE)) ? (NODE)->exp.locus : UNKNOWN_LOCATION) 1596 #define EXPR_LOCATION(NODE) \
1597 (EXPR_P ((NODE)) ? (NODE)->exp.locus : UNKNOWN_LOCATION)
1574 #define SET_EXPR_LOCATION(NODE, LOCUS) EXPR_CHECK ((NODE))->exp.locus = (LOCUS) 1598 #define SET_EXPR_LOCATION(NODE, LOCUS) EXPR_CHECK ((NODE))->exp.locus = (LOCUS)
1575 #define EXPR_HAS_LOCATION(NODE) (EXPR_LOCATION (NODE) != UNKNOWN_LOCATION) 1599 #define EXPR_HAS_LOCATION(NODE) (EXPR_LOCATION (NODE) != UNKNOWN_LOCATION)
1600 #define EXPR_LOC_OR_HERE(NODE) (EXPR_HAS_LOCATION (NODE) ? (NODE)->exp.locus : input_location)
1576 #define EXPR_FILENAME(NODE) LOCATION_FILE (EXPR_CHECK ((NODE))->exp.locus) 1601 #define EXPR_FILENAME(NODE) LOCATION_FILE (EXPR_CHECK ((NODE))->exp.locus)
1577 #define EXPR_LINENO(NODE) LOCATION_LINE (EXPR_CHECK (NODE)->exp.locus) 1602 #define EXPR_LINENO(NODE) LOCATION_LINE (EXPR_CHECK (NODE)->exp.locus)
1578 1603
1579 /* True if a tree is an expression or statement that can have a 1604 /* True if a tree is an expression or statement that can have a
1580 location. */ 1605 location. */
1610 of a case label, respectively. */ 1635 of a case label, respectively. */
1611 #define CASE_LOW(NODE) TREE_OPERAND (CASE_LABEL_EXPR_CHECK (NODE), 0) 1636 #define CASE_LOW(NODE) TREE_OPERAND (CASE_LABEL_EXPR_CHECK (NODE), 0)
1612 #define CASE_HIGH(NODE) TREE_OPERAND (CASE_LABEL_EXPR_CHECK (NODE), 1) 1637 #define CASE_HIGH(NODE) TREE_OPERAND (CASE_LABEL_EXPR_CHECK (NODE), 1)
1613 #define CASE_LABEL(NODE) TREE_OPERAND (CASE_LABEL_EXPR_CHECK (NODE), 2) 1638 #define CASE_LABEL(NODE) TREE_OPERAND (CASE_LABEL_EXPR_CHECK (NODE), 2)
1614 1639
1615 /* The operands of a TARGET_MEM_REF. */ 1640 /* The operands of a TARGET_MEM_REF. Operands 0 and 1 have to match
1616 #define TMR_SYMBOL(NODE) (TREE_OPERAND (TARGET_MEM_REF_CHECK (NODE), 0)) 1641 corresponding MEM_REF operands. */
1617 #define TMR_BASE(NODE) (TREE_OPERAND (TARGET_MEM_REF_CHECK (NODE), 1)) 1642 #define TMR_BASE(NODE) (TREE_OPERAND (TARGET_MEM_REF_CHECK (NODE), 0))
1643 #define TMR_OFFSET(NODE) (TREE_OPERAND (TARGET_MEM_REF_CHECK (NODE), 1))
1618 #define TMR_INDEX(NODE) (TREE_OPERAND (TARGET_MEM_REF_CHECK (NODE), 2)) 1644 #define TMR_INDEX(NODE) (TREE_OPERAND (TARGET_MEM_REF_CHECK (NODE), 2))
1619 #define TMR_STEP(NODE) (TREE_OPERAND (TARGET_MEM_REF_CHECK (NODE), 3)) 1645 #define TMR_STEP(NODE) (TREE_OPERAND (TARGET_MEM_REF_CHECK (NODE), 3))
1620 #define TMR_OFFSET(NODE) (TREE_OPERAND (TARGET_MEM_REF_CHECK (NODE), 4)) 1646 #define TMR_INDEX2(NODE) (TREE_OPERAND (TARGET_MEM_REF_CHECK (NODE), 4))
1621 #define TMR_ORIGINAL(NODE) (TREE_OPERAND (TARGET_MEM_REF_CHECK (NODE), 5))
1622 1647
1623 /* The operands of a BIND_EXPR. */ 1648 /* The operands of a BIND_EXPR. */
1624 #define BIND_EXPR_VARS(NODE) (TREE_OPERAND (BIND_EXPR_CHECK (NODE), 0)) 1649 #define BIND_EXPR_VARS(NODE) (TREE_OPERAND (BIND_EXPR_CHECK (NODE), 0))
1625 #define BIND_EXPR_BODY(NODE) (TREE_OPERAND (BIND_EXPR_CHECK (NODE), 1)) 1650 #define BIND_EXPR_BODY(NODE) (TREE_OPERAND (BIND_EXPR_CHECK (NODE), 1))
1626 #define BIND_EXPR_BLOCK(NODE) (TREE_OPERAND (BIND_EXPR_CHECK (NODE), 2)) 1651 #define BIND_EXPR_BLOCK(NODE) (TREE_OPERAND (BIND_EXPR_CHECK (NODE), 2))
1680 1705
1681 /* CALL_EXPR accessors. 1706 /* CALL_EXPR accessors.
1682 */ 1707 */
1683 #define CALL_EXPR_FN(NODE) TREE_OPERAND (CALL_EXPR_CHECK (NODE), 1) 1708 #define CALL_EXPR_FN(NODE) TREE_OPERAND (CALL_EXPR_CHECK (NODE), 1)
1684 #define CALL_EXPR_STATIC_CHAIN(NODE) TREE_OPERAND (CALL_EXPR_CHECK (NODE), 2) 1709 #define CALL_EXPR_STATIC_CHAIN(NODE) TREE_OPERAND (CALL_EXPR_CHECK (NODE), 2)
1685 #define CALL_EXPR_ARGS(NODE) call_expr_arglist (NODE)
1686 #define CALL_EXPR_ARG(NODE, I) TREE_OPERAND (CALL_EXPR_CHECK (NODE), (I) + 3) 1710 #define CALL_EXPR_ARG(NODE, I) TREE_OPERAND (CALL_EXPR_CHECK (NODE), (I) + 3)
1687 #define call_expr_nargs(NODE) (VL_EXP_OPERAND_LENGTH(NODE) - 3) 1711 #define call_expr_nargs(NODE) (VL_EXP_OPERAND_LENGTH(NODE) - 3)
1688 1712
1689 /* CALL_EXPR_ARGP returns a pointer to the argument vector for NODE. 1713 /* CALL_EXPR_ARGP returns a pointer to the argument vector for NODE.
1690 We can't use &CALL_EXPR_ARG (NODE, 0) because that will complain if 1714 We can't use &CALL_EXPR_ARG (NODE, 0) because that will complain if
1863 /* Nonzero if this SSA_NAME is the default definition for the 1887 /* Nonzero if this SSA_NAME is the default definition for the
1864 underlying symbol. A default SSA name is created for symbol S if 1888 underlying symbol. A default SSA name is created for symbol S if
1865 the very first reference to S in the function is a read operation. 1889 the very first reference to S in the function is a read operation.
1866 Default definitions are always created by an empty statement and 1890 Default definitions are always created by an empty statement and
1867 belong to no basic block. */ 1891 belong to no basic block. */
1868 #define SSA_NAME_IS_DEFAULT_DEF(NODE) \ 1892 #define SSA_NAME_IS_DEFAULT_DEF(NODE) \
1869 SSA_NAME_CHECK (NODE)->base.default_def_flag 1893 SSA_NAME_CHECK (NODE)->base.default_def_flag
1870 1894
1871 /* Attributes for SSA_NAMEs for pointer-type variables. */ 1895 /* Attributes for SSA_NAMEs for pointer-type variables. */
1872 #define SSA_NAME_PTR_INFO(N) \ 1896 #define SSA_NAME_PTR_INFO(N) \
1873 SSA_NAME_CHECK (N)->ssa_name.ptr_info 1897 SSA_NAME_CHECK (N)->ssa_name.ptr_info
1874 1898
1875 #ifndef _TREE_FLOW_H 1899 /* Defined in tree-flow.h. */
1876 struct ptr_info_def; 1900 struct ptr_info_def;
1877 #endif
1878
1879
1880 1901
1881 /* Immediate use linking structure. This structure is used for maintaining 1902 /* Immediate use linking structure. This structure is used for maintaining
1882 a doubly linked list of uses of an SSA_NAME. */ 1903 a doubly linked list of uses of an SSA_NAME. */
1883 typedef struct GTY(()) ssa_use_operand_d { 1904 typedef struct GTY(()) ssa_use_operand_d {
1884 struct ssa_use_operand_d* GTY((skip(""))) prev; 1905 struct ssa_use_operand_d* GTY((skip(""))) prev;
1952 1973
1953 tree GTY ((length ("omp_clause_num_ops[OMP_CLAUSE_CODE ((tree)&%h)]"))) ops[1]; 1974 tree GTY ((length ("omp_clause_num_ops[OMP_CLAUSE_CODE ((tree)&%h)]"))) ops[1];
1954 }; 1975 };
1955 1976
1956 1977
1957 struct varray_head_tag;
1958
1959 /* In a BLOCK node. */ 1978 /* In a BLOCK node. */
1960 #define BLOCK_VARS(NODE) (BLOCK_CHECK (NODE)->block.vars) 1979 #define BLOCK_VARS(NODE) (BLOCK_CHECK (NODE)->block.vars)
1961 #define BLOCK_NONLOCALIZED_VARS(NODE) (BLOCK_CHECK (NODE)->block.nonlocalized_vars) 1980 #define BLOCK_NONLOCALIZED_VARS(NODE) \
1962 #define BLOCK_NUM_NONLOCALIZED_VARS(NODE) VEC_length (tree, BLOCK_NONLOCALIZED_VARS (NODE)) 1981 (BLOCK_CHECK (NODE)->block.nonlocalized_vars)
1963 #define BLOCK_NONLOCALIZED_VAR(NODE,N) VEC_index (tree, BLOCK_NONLOCALIZED_VARS (NODE), N) 1982 #define BLOCK_NUM_NONLOCALIZED_VARS(NODE) \
1983 VEC_length (tree, BLOCK_NONLOCALIZED_VARS (NODE))
1984 #define BLOCK_NONLOCALIZED_VAR(NODE,N) \
1985 VEC_index (tree, BLOCK_NONLOCALIZED_VARS (NODE), N)
1964 #define BLOCK_SUBBLOCKS(NODE) (BLOCK_CHECK (NODE)->block.subblocks) 1986 #define BLOCK_SUBBLOCKS(NODE) (BLOCK_CHECK (NODE)->block.subblocks)
1965 #define BLOCK_SUPERCONTEXT(NODE) (BLOCK_CHECK (NODE)->block.supercontext) 1987 #define BLOCK_SUPERCONTEXT(NODE) (BLOCK_CHECK (NODE)->block.supercontext)
1966 /* Note: when changing this, make sure to find the places 1988 /* Note: when changing this, make sure to find the places
1967 that use chainon or nreverse. */ 1989 that use chainon or nreverse. */
1968 #define BLOCK_CHAIN(NODE) TREE_CHAIN (BLOCK_CHECK (NODE)) 1990 #define BLOCK_CHAIN(NODE) TREE_CHAIN (BLOCK_CHECK (NODE))
2039 #define TYPE_SIZE_UNIT(NODE) (TYPE_CHECK (NODE)->type.size_unit) 2061 #define TYPE_SIZE_UNIT(NODE) (TYPE_CHECK (NODE)->type.size_unit)
2040 #define TYPE_VALUES(NODE) (ENUMERAL_TYPE_CHECK (NODE)->type.values) 2062 #define TYPE_VALUES(NODE) (ENUMERAL_TYPE_CHECK (NODE)->type.values)
2041 #define TYPE_DOMAIN(NODE) (ARRAY_TYPE_CHECK (NODE)->type.values) 2063 #define TYPE_DOMAIN(NODE) (ARRAY_TYPE_CHECK (NODE)->type.values)
2042 #define TYPE_FIELDS(NODE) (RECORD_OR_UNION_CHECK (NODE)->type.values) 2064 #define TYPE_FIELDS(NODE) (RECORD_OR_UNION_CHECK (NODE)->type.values)
2043 #define TYPE_CACHED_VALUES(NODE) (TYPE_CHECK(NODE)->type.values) 2065 #define TYPE_CACHED_VALUES(NODE) (TYPE_CHECK(NODE)->type.values)
2044 #define TYPE_ORIG_SIZE_TYPE(NODE) \
2045 (INTEGER_TYPE_CHECK (NODE)->type.values \
2046 ? TREE_TYPE ((NODE)->type.values) : NULL_TREE)
2047 #define TYPE_METHODS(NODE) (RECORD_OR_UNION_CHECK (NODE)->type.maxval) 2066 #define TYPE_METHODS(NODE) (RECORD_OR_UNION_CHECK (NODE)->type.maxval)
2048 #define TYPE_VFIELD(NODE) (RECORD_OR_UNION_CHECK (NODE)->type.minval) 2067 #define TYPE_VFIELD(NODE) (RECORD_OR_UNION_CHECK (NODE)->type.minval)
2049 #define TYPE_ARG_TYPES(NODE) (FUNC_OR_METHOD_CHECK (NODE)->type.values) 2068 #define TYPE_ARG_TYPES(NODE) (FUNC_OR_METHOD_CHECK (NODE)->type.values)
2050 #define TYPE_METHOD_BASETYPE(NODE) (FUNC_OR_METHOD_CHECK (NODE)->type.maxval) 2069 #define TYPE_METHOD_BASETYPE(NODE) (FUNC_OR_METHOD_CHECK (NODE)->type.maxval)
2051 #define TYPE_OFFSET_BASETYPE(NODE) (OFFSET_TYPE_CHECK (NODE)->type.maxval) 2070 #define TYPE_OFFSET_BASETYPE(NODE) (OFFSET_TYPE_CHECK (NODE)->type.maxval)
2054 #define TYPE_NEXT_PTR_TO(NODE) (POINTER_TYPE_CHECK (NODE)->type.minval) 2073 #define TYPE_NEXT_PTR_TO(NODE) (POINTER_TYPE_CHECK (NODE)->type.minval)
2055 #define TYPE_NEXT_REF_TO(NODE) (REFERENCE_TYPE_CHECK (NODE)->type.minval) 2074 #define TYPE_NEXT_REF_TO(NODE) (REFERENCE_TYPE_CHECK (NODE)->type.minval)
2056 #define TYPE_MIN_VALUE(NODE) (NUMERICAL_TYPE_CHECK (NODE)->type.minval) 2075 #define TYPE_MIN_VALUE(NODE) (NUMERICAL_TYPE_CHECK (NODE)->type.minval)
2057 #define TYPE_MAX_VALUE(NODE) (NUMERICAL_TYPE_CHECK (NODE)->type.maxval) 2076 #define TYPE_MAX_VALUE(NODE) (NUMERICAL_TYPE_CHECK (NODE)->type.maxval)
2058 #define TYPE_PRECISION(NODE) (TYPE_CHECK (NODE)->type.precision) 2077 #define TYPE_PRECISION(NODE) (TYPE_CHECK (NODE)->type.precision)
2059 #define TYPE_SYMTAB_ADDRESS(NODE) (TYPE_CHECK (NODE)->type.symtab.address)
2060 #define TYPE_SYMTAB_POINTER(NODE) (TYPE_CHECK (NODE)->type.symtab.pointer)
2061 #define TYPE_SYMTAB_DIE(NODE) (TYPE_CHECK (NODE)->type.symtab.die)
2062 #define TYPE_NAME(NODE) (TYPE_CHECK (NODE)->type.name) 2078 #define TYPE_NAME(NODE) (TYPE_CHECK (NODE)->type.name)
2063 #define TYPE_NEXT_VARIANT(NODE) (TYPE_CHECK (NODE)->type.next_variant) 2079 #define TYPE_NEXT_VARIANT(NODE) (TYPE_CHECK (NODE)->type.next_variant)
2064 #define TYPE_MAIN_VARIANT(NODE) (TYPE_CHECK (NODE)->type.main_variant) 2080 #define TYPE_MAIN_VARIANT(NODE) (TYPE_CHECK (NODE)->type.main_variant)
2065 #define TYPE_CONTEXT(NODE) (TYPE_CHECK (NODE)->type.context) 2081 #define TYPE_CONTEXT(NODE) (TYPE_CHECK (NODE)->type.context)
2066 #define TYPE_MAXVAL(NODE) (TYPE_CHECK (NODE)->type.maxval) 2082 #define TYPE_MAXVAL(NODE) (TYPE_CHECK (NODE)->type.maxval)
2072 (TREE_CODE (TYPE_CHECK (NODE)) == VECTOR_TYPE \ 2088 (TREE_CODE (TYPE_CHECK (NODE)) == VECTOR_TYPE \
2073 ? vector_type_mode (NODE) : (NODE)->type.mode) 2089 ? vector_type_mode (NODE) : (NODE)->type.mode)
2074 #define SET_TYPE_MODE(NODE, MODE) \ 2090 #define SET_TYPE_MODE(NODE, MODE) \
2075 (TYPE_CHECK (NODE)->type.mode = (MODE)) 2091 (TYPE_CHECK (NODE)->type.mode = (MODE))
2076 2092
2077 /* The "canonical" type for this type node, which can be used to 2093 /* The "canonical" type for this type node, which is used by frontends to
2078 compare the type for equality with another type. If two types are 2094 compare the type for equality with another type. If two types are
2079 equal (based on the semantics of the language), then they will have 2095 equal (based on the semantics of the language), then they will have
2080 equivalent TYPE_CANONICAL entries. 2096 equivalent TYPE_CANONICAL entries.
2081 2097
2082 As a special case, if TYPE_CANONICAL is NULL_TREE, then it cannot 2098 As a special case, if TYPE_CANONICAL is NULL_TREE, and thus
2083 be used for comparison against other types. Instead, the type is 2099 TYPE_STRUCTURAL_EQUALITY_P is true, then it cannot
2100 be used for comparison against other types. Instead, the type is
2084 said to require structural equality checks, described in 2101 said to require structural equality checks, described in
2085 TYPE_STRUCTURAL_EQUALITY_P. */ 2102 TYPE_STRUCTURAL_EQUALITY_P.
2103
2104 For unqualified aggregate and function types the middle-end relies on
2105 TYPE_CANONICAL to tell whether two variables can be assigned
2106 to each other without a conversion. The middle-end also makes sure
2107 to assign the same alias-sets to the type partition with equal
2108 TYPE_CANONICAL of their unqualified variants. */
2086 #define TYPE_CANONICAL(NODE) (TYPE_CHECK (NODE)->type.canonical) 2109 #define TYPE_CANONICAL(NODE) (TYPE_CHECK (NODE)->type.canonical)
2087 /* Indicates that the type node requires structural equality 2110 /* Indicates that the type node requires structural equality
2088 checks. The compiler will need to look at the composition of the 2111 checks. The compiler will need to look at the composition of the
2089 type to determine whether it is equal to another type, rather than 2112 type to determine whether it is equal to another type, rather than
2090 just comparing canonical type pointers. For instance, we would need 2113 just comparing canonical type pointers. For instance, we would need
2091 to look at the return and parameter types of a FUNCTION_TYPE 2114 to look at the return and parameter types of a FUNCTION_TYPE
2092 node. */ 2115 node. */
2093 #define TYPE_STRUCTURAL_EQUALITY_P(NODE) (TYPE_CANONICAL (NODE) == NULL_TREE) 2116 #define TYPE_STRUCTURAL_EQUALITY_P(NODE) (TYPE_CANONICAL (NODE) == NULL_TREE)
2094 /* Sets the TYPE_CANONICAL field to NULL_TREE, indicating that the 2117 /* Sets the TYPE_CANONICAL field to NULL_TREE, indicating that the
2095 type node requires structural equality. */ 2118 type node requires structural equality. */
2096 #define SET_TYPE_STRUCTURAL_EQUALITY(NODE) (TYPE_CANONICAL (NODE) = NULL_TREE) 2119 #define SET_TYPE_STRUCTURAL_EQUALITY(NODE) (TYPE_CANONICAL (NODE) = NULL_TREE)
2120
2097 #define TYPE_LANG_SPECIFIC(NODE) (TYPE_CHECK (NODE)->type.lang_specific) 2121 #define TYPE_LANG_SPECIFIC(NODE) (TYPE_CHECK (NODE)->type.lang_specific)
2098 #define TYPE_IBIT(NODE) (GET_MODE_IBIT (TYPE_MODE (NODE))) 2122 #define TYPE_IBIT(NODE) (GET_MODE_IBIT (TYPE_MODE (NODE)))
2099 #define TYPE_FBIT(NODE) (GET_MODE_FBIT (TYPE_MODE (NODE))) 2123 #define TYPE_FBIT(NODE) (GET_MODE_FBIT (TYPE_MODE (NODE)))
2100
2101 /* For a VECTOR_TYPE node, this describes a different type which is emitted
2102 in the debugging output. We use this to describe a vector as a
2103 structure containing an array. */
2104 #define TYPE_DEBUG_REPRESENTATION_TYPE(NODE) (VECTOR_TYPE_CHECK (NODE)->type.values)
2105 2124
2106 /* For record and union types, information about this type, as a base type 2125 /* For record and union types, information about this type, as a base type
2107 for itself. */ 2126 for itself. */
2108 #define TYPE_BINFO(NODE) (RECORD_OR_UNION_CHECK(NODE)->type.binfo) 2127 #define TYPE_BINFO(NODE) (RECORD_OR_UNION_CHECK(NODE)->type.binfo)
2109 2128
2169 2188
2170 /* If nonzero, this type is `restrict'-qualified, in the C sense of 2189 /* If nonzero, this type is `restrict'-qualified, in the C sense of
2171 the term. */ 2190 the term. */
2172 #define TYPE_RESTRICT(NODE) (TYPE_CHECK (NODE)->type.restrict_flag) 2191 #define TYPE_RESTRICT(NODE) (TYPE_CHECK (NODE)->type.restrict_flag)
2173 2192
2193 /* If nonzero, type's name shouldn't be emitted into debug info. */
2194 #define TYPE_NAMELESS(NODE) (TYPE_CHECK (NODE)->base.nameless_flag)
2195
2174 /* The address space the type is in. */ 2196 /* The address space the type is in. */
2175 #define TYPE_ADDR_SPACE(NODE) (TYPE_CHECK (NODE)->base.address_space) 2197 #define TYPE_ADDR_SPACE(NODE) (TYPE_CHECK (NODE)->base.address_space)
2176 2198
2177 /* There is a TYPE_QUAL value for each type qualifier. They can be 2199 /* There is a TYPE_QUAL value for each type qualifier. They can be
2178 combined by bitwise-or to form the complete set of qualifiers for a 2200 combined by bitwise-or to form the complete set of qualifiers for a
2249 /* Indicates that objects of this type must be initialized by calling a 2271 /* Indicates that objects of this type must be initialized by calling a
2250 function when they are created. */ 2272 function when they are created. */
2251 #define TYPE_NEEDS_CONSTRUCTING(NODE) \ 2273 #define TYPE_NEEDS_CONSTRUCTING(NODE) \
2252 (TYPE_CHECK (NODE)->type.needs_constructing_flag) 2274 (TYPE_CHECK (NODE)->type.needs_constructing_flag)
2253 2275
2254 /* Indicates that objects of this type (a UNION_TYPE), should be passed 2276 /* Indicates that a UNION_TYPE object should be passed the same way that
2255 the same way that the first union alternative would be passed. */ 2277 the first union alternative would be passed, or that a RECORD_TYPE
2256 #define TYPE_TRANSPARENT_UNION(NODE) \ 2278 object should be passed the same way that the first (and only) member
2257 (UNION_TYPE_CHECK (NODE)->type.transparent_union_flag) 2279 would be passed. */
2280 #define TYPE_TRANSPARENT_AGGR(NODE) \
2281 (RECORD_OR_UNION_CHECK (NODE)->type.transparent_aggr_flag)
2258 2282
2259 /* For an ARRAY_TYPE, indicates that it is not permitted to take the 2283 /* For an ARRAY_TYPE, indicates that it is not permitted to take the
2260 address of a component of the type. This is the counterpart of 2284 address of a component of the type. This is the counterpart of
2261 DECL_NONADDRESSABLE_P for arrays, see the definition of this flag. */ 2285 DECL_NONADDRESSABLE_P for arrays, see the definition of this flag. */
2262 #define TYPE_NONALIASED_COMPONENT(NODE) \ 2286 #define TYPE_NONALIASED_COMPONENT(NODE) \
2263 (ARRAY_TYPE_CHECK (NODE)->type.transparent_union_flag) 2287 (ARRAY_TYPE_CHECK (NODE)->type.transparent_aggr_flag)
2264 2288
2265 /* Indicated that objects of this type should be laid out in as 2289 /* Indicated that objects of this type should be laid out in as
2266 compact a way as possible. */ 2290 compact a way as possible. */
2267 #define TYPE_PACKED(NODE) (TYPE_CHECK (NODE)->common.base.packed_flag) 2291 #define TYPE_PACKED(NODE) (TYPE_CHECK (NODE)->common.base.packed_flag)
2268 2292
2269 /* Used by type_contains_placeholder_p to avoid recomputation. 2293 /* Used by type_contains_placeholder_p to avoid recomputation.
2270 Values are: 0 (unknown), 1 (false), 2 (true). Never access 2294 Values are: 0 (unknown), 1 (false), 2 (true). Never access
2271 this field directly. */ 2295 this field directly. */
2272 #define TYPE_CONTAINS_PLACEHOLDER_INTERNAL(NODE) \ 2296 #define TYPE_CONTAINS_PLACEHOLDER_INTERNAL(NODE) \
2273 (TYPE_CHECK (NODE)->type.contains_placeholder_bits) 2297 (TYPE_CHECK (NODE)->type.contains_placeholder_bits)
2298
2299 /* The debug output functions use the symtab union field to store
2300 information specific to the debugging format. The different debug
2301 output hooks store different types in the union field. These three
2302 macros are used to access different fields in the union. The debug
2303 hooks are responsible for consistently using only a specific
2304 macro. */
2305
2306 /* Symtab field as an integer. Used by stabs generator in dbxout.c to
2307 hold the type's number in the generated stabs. */
2308 #define TYPE_SYMTAB_ADDRESS(NODE) (TYPE_CHECK (NODE)->type.symtab.address)
2309
2310 /* Symtab field as a string. Used by COFF generator in sdbout.c to
2311 hold struct/union type tag names. */
2312 #define TYPE_SYMTAB_POINTER(NODE) (TYPE_CHECK (NODE)->type.symtab.pointer)
2313
2314 /* Symtab field as a pointer to a DWARF DIE. Used by DWARF generator
2315 in dwarf2out.c to point to the DIE generated for the type. */
2316 #define TYPE_SYMTAB_DIE(NODE) (TYPE_CHECK (NODE)->type.symtab.die)
2317
2318 /* The garbage collector needs to know the interpretation of the
2319 symtab field. These constants represent the different types in the
2320 union. */
2321
2322 #define TYPE_SYMTAB_IS_ADDRESS (0)
2323 #define TYPE_SYMTAB_IS_POINTER (1)
2324 #define TYPE_SYMTAB_IS_DIE (2)
2274 2325
2275 struct die_struct; 2326 struct die_struct;
2276 2327
2277 struct GTY(()) tree_type { 2328 struct GTY(()) tree_type {
2278 struct tree_common common; 2329 struct tree_common common;
2283 unsigned int uid; 2334 unsigned int uid;
2284 2335
2285 unsigned int precision : 10; 2336 unsigned int precision : 10;
2286 unsigned no_force_blk_flag : 1; 2337 unsigned no_force_blk_flag : 1;
2287 unsigned needs_constructing_flag : 1; 2338 unsigned needs_constructing_flag : 1;
2288 unsigned transparent_union_flag : 1; 2339 unsigned transparent_aggr_flag : 1;
2289 unsigned restrict_flag : 1; 2340 unsigned restrict_flag : 1;
2290 unsigned contains_placeholder_bits : 2; 2341 unsigned contains_placeholder_bits : 2;
2291 2342
2292 ENUM_BITFIELD(machine_mode) mode : 8; 2343 ENUM_BITFIELD(machine_mode) mode : 8;
2293 2344
2303 unsigned int align; 2354 unsigned int align;
2304 alias_set_type alias_set; 2355 alias_set_type alias_set;
2305 tree pointer_to; 2356 tree pointer_to;
2306 tree reference_to; 2357 tree reference_to;
2307 union tree_type_symtab { 2358 union tree_type_symtab {
2308 int GTY ((tag ("0"))) address; 2359 int GTY ((tag ("TYPE_SYMTAB_IS_ADDRESS"))) address;
2309 const char * GTY ((tag ("1"))) pointer; 2360 const char * GTY ((tag ("TYPE_SYMTAB_IS_POINTER"))) pointer;
2310 struct die_struct * GTY ((tag ("2"))) die; 2361 struct die_struct * GTY ((tag ("TYPE_SYMTAB_IS_DIE"))) die;
2311 } GTY ((desc ("debug_hooks == &sdb_debug_hooks ? 1 : debug_hooks == &dwarf2_debug_hooks ? 2 : 0"), 2362 } GTY ((desc ("debug_hooks->tree_type_symtab_field"))) symtab;
2312 descbits ("2"))) symtab;
2313 tree name; 2363 tree name;
2314 tree minval; 2364 tree minval;
2315 tree maxval; 2365 tree maxval;
2316 tree next_variant; 2366 tree next_variant;
2317 tree main_variant; 2367 tree main_variant;
2469 }; 2519 };
2470 #endif 2520 #endif
2471 2521
2472 struct function; 2522 struct function;
2473 2523
2524 #define DECL_CHAIN(NODE) (TREE_CHAIN (DECL_MINIMAL_CHECK (NODE)))
2474 2525
2475 /* This is the name of the object as written by the user. 2526 /* This is the name of the object as written by the user.
2476 It is an IDENTIFIER_NODE. */ 2527 It is an IDENTIFIER_NODE. */
2477 #define DECL_NAME(NODE) (DECL_MINIMAL_CHECK (NODE)->decl_minimal.name) 2528 #define DECL_NAME(NODE) (DECL_MINIMAL_CHECK (NODE)->decl_minimal.name)
2478 2529
2480 #define DECL_UID(NODE) (DECL_MINIMAL_CHECK (NODE)->decl_minimal.uid) 2531 #define DECL_UID(NODE) (DECL_MINIMAL_CHECK (NODE)->decl_minimal.uid)
2481 2532
2482 /* DEBUG_EXPR_DECLs get negative UID numbers, to catch erroneous 2533 /* DEBUG_EXPR_DECLs get negative UID numbers, to catch erroneous
2483 uses. */ 2534 uses. */
2484 #define DEBUG_TEMP_UID(NODE) (-DECL_UID (TREE_CHECK ((NODE), DEBUG_EXPR_DECL))) 2535 #define DEBUG_TEMP_UID(NODE) (-DECL_UID (TREE_CHECK ((NODE), DEBUG_EXPR_DECL)))
2536
2537 /* Every ..._DECL node gets a unique number that stays the same even
2538 when the decl is copied by the inliner once it is set. */
2539 #define DECL_PT_UID(NODE) \
2540 (DECL_COMMON_CHECK (NODE)->decl_common.pt_uid == -1u \
2541 ? (NODE)->decl_minimal.uid : (NODE)->decl_common.pt_uid)
2542 /* Initialize the ..._DECL node pt-uid to the decls uid. */
2543 #define SET_DECL_PT_UID(NODE, UID) \
2544 (DECL_COMMON_CHECK (NODE)->decl_common.pt_uid = (UID))
2545 /* Whether the ..._DECL node pt-uid has been initialized and thus needs to
2546 be preserved when copyin the decl. */
2547 #define DECL_PT_UID_SET_P(NODE) \
2548 (DECL_COMMON_CHECK (NODE)->decl_common.pt_uid != -1u)
2485 2549
2486 /* These two fields describe where in the source code the declaration 2550 /* These two fields describe where in the source code the declaration
2487 was. If the declaration appears in several places (as for a C 2551 was. If the declaration appears in several places (as for a C
2488 function that is declared first and then defined later), this 2552 function that is declared first and then defined later), this
2489 information should refer to the definition. */ 2553 information should refer to the definition. */
2490 #define DECL_SOURCE_LOCATION(NODE) (DECL_MINIMAL_CHECK (NODE)->decl_minimal.locus) 2554 #define DECL_SOURCE_LOCATION(NODE) \
2555 (DECL_MINIMAL_CHECK (NODE)->decl_minimal.locus)
2491 #define DECL_SOURCE_FILE(NODE) LOCATION_FILE (DECL_SOURCE_LOCATION (NODE)) 2556 #define DECL_SOURCE_FILE(NODE) LOCATION_FILE (DECL_SOURCE_LOCATION (NODE))
2492 #define DECL_SOURCE_LINE(NODE) LOCATION_LINE (DECL_SOURCE_LOCATION (NODE)) 2557 #define DECL_SOURCE_LINE(NODE) LOCATION_LINE (DECL_SOURCE_LOCATION (NODE))
2493 #define DECL_IS_BUILTIN(DECL) \ 2558 #define DECL_IS_BUILTIN(DECL) \
2494 (DECL_SOURCE_LOCATION (DECL) <= BUILTINS_LOCATION) 2559 (DECL_SOURCE_LOCATION (DECL) <= BUILTINS_LOCATION)
2495 2560
2499 nodes, this points to either the FUNCTION_DECL for the containing 2564 nodes, this points to either the FUNCTION_DECL for the containing
2500 function, the RECORD_TYPE or UNION_TYPE for the containing type, or 2565 function, the RECORD_TYPE or UNION_TYPE for the containing type, or
2501 NULL_TREE or a TRANSLATION_UNIT_DECL if the given decl has "file 2566 NULL_TREE or a TRANSLATION_UNIT_DECL if the given decl has "file
2502 scope". */ 2567 scope". */
2503 #define DECL_CONTEXT(NODE) (DECL_MINIMAL_CHECK (NODE)->decl_minimal.context) 2568 #define DECL_CONTEXT(NODE) (DECL_MINIMAL_CHECK (NODE)->decl_minimal.context)
2504 #define DECL_FIELD_CONTEXT(NODE) (FIELD_DECL_CHECK (NODE)->decl_minimal.context) 2569 #define DECL_FIELD_CONTEXT(NODE) \
2570 (FIELD_DECL_CHECK (NODE)->decl_minimal.context)
2571
2572 /* If nonzero, decl's name shouldn't be emitted into debug info. */
2573 #define DECL_NAMELESS(NODE) (DECL_MINIMAL_CHECK (NODE)->base.nameless_flag)
2574
2505 struct GTY(()) tree_decl_minimal { 2575 struct GTY(()) tree_decl_minimal {
2506 struct tree_common common; 2576 struct tree_common common;
2507 location_t locus; 2577 location_t locus;
2508 unsigned int uid; 2578 unsigned int uid;
2509 tree name; 2579 tree name;
2515 decl node which this decl is an inlined/cloned instance of, or else it 2585 decl node which this decl is an inlined/cloned instance of, or else it
2516 is NULL indicating that this decl is not an instance of some other decl. 2586 is NULL indicating that this decl is not an instance of some other decl.
2517 2587
2518 The C front-end also uses this in a nested declaration of an inline 2588 The C front-end also uses this in a nested declaration of an inline
2519 function, to point back to the definition. */ 2589 function, to point back to the definition. */
2520 #define DECL_ABSTRACT_ORIGIN(NODE) (DECL_COMMON_CHECK (NODE)->decl_common.abstract_origin) 2590 #define DECL_ABSTRACT_ORIGIN(NODE) \
2591 (DECL_COMMON_CHECK (NODE)->decl_common.abstract_origin)
2521 2592
2522 /* Like DECL_ABSTRACT_ORIGIN, but returns NODE if there's no abstract 2593 /* Like DECL_ABSTRACT_ORIGIN, but returns NODE if there's no abstract
2523 origin. This is useful when setting the DECL_ABSTRACT_ORIGIN. */ 2594 origin. This is useful when setting the DECL_ABSTRACT_ORIGIN. */
2524 #define DECL_ORIGIN(NODE) \ 2595 #define DECL_ORIGIN(NODE) \
2525 (DECL_ABSTRACT_ORIGIN (NODE) ? DECL_ABSTRACT_ORIGIN (NODE) : (NODE)) 2596 (DECL_ABSTRACT_ORIGIN (NODE) ? DECL_ABSTRACT_ORIGIN (NODE) : (NODE))
2526 2597
2527 /* Nonzero for any sort of ..._DECL node means this decl node represents an 2598 /* Nonzero for any sort of ..._DECL node means this decl node represents an
2528 inline instance of some original (abstract) decl from an inline function; 2599 inline instance of some original (abstract) decl from an inline function;
2529 suppress any warnings about shadowing some other variable. FUNCTION_DECL 2600 suppress any warnings about shadowing some other variable. FUNCTION_DECL
2530 nodes can also have their abstract origin set to themselves. */ 2601 nodes can also have their abstract origin set to themselves. */
2531 #define DECL_FROM_INLINE(NODE) (DECL_ABSTRACT_ORIGIN (NODE) != NULL_TREE \ 2602 #define DECL_FROM_INLINE(NODE) \
2532 && DECL_ABSTRACT_ORIGIN (NODE) != (NODE)) 2603 (DECL_ABSTRACT_ORIGIN (NODE) != NULL_TREE \
2604 && DECL_ABSTRACT_ORIGIN (NODE) != (NODE))
2533 2605
2534 /* In a DECL this is the field where attributes are stored. */ 2606 /* In a DECL this is the field where attributes are stored. */
2535 #define DECL_ATTRIBUTES(NODE) (DECL_COMMON_CHECK (NODE)->decl_common.attributes) 2607 #define DECL_ATTRIBUTES(NODE) \
2608 (DECL_COMMON_CHECK (NODE)->decl_common.attributes)
2536 2609
2537 /* For a FUNCTION_DECL, holds the tree of BINDINGs. 2610 /* For a FUNCTION_DECL, holds the tree of BINDINGs.
2538 For a TRANSLATION_UNIT_DECL, holds the namespace's BLOCK. 2611 For a TRANSLATION_UNIT_DECL, holds the namespace's BLOCK.
2539 For a VAR_DECL, holds the initial value. 2612 For a VAR_DECL, holds the initial value.
2540 For a PARM_DECL, used for DECL_ARG_TYPE--default 2613 For a PARM_DECL, used for DECL_ARG_TYPE--default
2555 #define DECL_ALIGN(NODE) (DECL_COMMON_CHECK (NODE)->decl_common.align) 2628 #define DECL_ALIGN(NODE) (DECL_COMMON_CHECK (NODE)->decl_common.align)
2556 /* The alignment of NODE, in bytes. */ 2629 /* The alignment of NODE, in bytes. */
2557 #define DECL_ALIGN_UNIT(NODE) (DECL_ALIGN (NODE) / BITS_PER_UNIT) 2630 #define DECL_ALIGN_UNIT(NODE) (DECL_ALIGN (NODE) / BITS_PER_UNIT)
2558 /* Set if the alignment of this DECL has been set by the user, for 2631 /* Set if the alignment of this DECL has been set by the user, for
2559 example with an 'aligned' attribute. */ 2632 example with an 'aligned' attribute. */
2560 #define DECL_USER_ALIGN(NODE) (DECL_COMMON_CHECK (NODE)->common.base.user_align) 2633 #define DECL_USER_ALIGN(NODE) \
2634 (DECL_COMMON_CHECK (NODE)->common.base.user_align)
2561 /* Holds the machine mode corresponding to the declaration of a variable or 2635 /* Holds the machine mode corresponding to the declaration of a variable or
2562 field. Always equal to TYPE_MODE (TREE_TYPE (decl)) except for a 2636 field. Always equal to TYPE_MODE (TREE_TYPE (decl)) except for a
2563 FIELD_DECL. */ 2637 FIELD_DECL. */
2564 #define DECL_MODE(NODE) (DECL_COMMON_CHECK (NODE)->decl_common.mode) 2638 #define DECL_MODE(NODE) (DECL_COMMON_CHECK (NODE)->decl_common.mode)
2565 2639
2574 2648
2575 #define DECL_FUNCTION_PERSONALITY(NODE) \ 2649 #define DECL_FUNCTION_PERSONALITY(NODE) \
2576 (FUNCTION_DECL_CHECK (NODE)->function_decl.personality) 2650 (FUNCTION_DECL_CHECK (NODE)->function_decl.personality)
2577 2651
2578 /* Nonzero for a given ..._DECL node means that the name of this node should 2652 /* Nonzero for a given ..._DECL node means that the name of this node should
2579 be ignored for symbolic debug purposes. Moreover, for a FUNCTION_DECL, 2653 be ignored for symbolic debug purposes. For a TYPE_DECL, this means that
2580 the body of the function should also be ignored. */ 2654 the associated type should be ignored. For a FUNCTION_DECL, the body of
2581 #define DECL_IGNORED_P(NODE) (DECL_COMMON_CHECK (NODE)->decl_common.ignored_flag) 2655 the function should also be ignored. */
2656 #define DECL_IGNORED_P(NODE) \
2657 (DECL_COMMON_CHECK (NODE)->decl_common.ignored_flag)
2582 2658
2583 /* Nonzero for a given ..._DECL node means that this node represents an 2659 /* Nonzero for a given ..._DECL node means that this node represents an
2584 "abstract instance" of the given declaration (e.g. in the original 2660 "abstract instance" of the given declaration (e.g. in the original
2585 declaration of an inline function). When generating symbolic debugging 2661 declaration of an inline function). When generating symbolic debugging
2586 information, we mustn't try to generate any address information for nodes 2662 information, we mustn't try to generate any address information for nodes
2587 marked as "abstract instances" because we don't actually generate 2663 marked as "abstract instances" because we don't actually generate
2588 any code or allocate any data space for such instances. */ 2664 any code or allocate any data space for such instances. */
2589 #define DECL_ABSTRACT(NODE) (DECL_COMMON_CHECK (NODE)->decl_common.abstract_flag) 2665 #define DECL_ABSTRACT(NODE) \
2666 (DECL_COMMON_CHECK (NODE)->decl_common.abstract_flag)
2590 2667
2591 /* Language-specific decl information. */ 2668 /* Language-specific decl information. */
2592 #define DECL_LANG_SPECIFIC(NODE) (DECL_COMMON_CHECK (NODE)->decl_common.lang_specific) 2669 #define DECL_LANG_SPECIFIC(NODE) \
2670 (DECL_COMMON_CHECK (NODE)->decl_common.lang_specific)
2593 2671
2594 /* In a VAR_DECL or FUNCTION_DECL, nonzero means external reference: 2672 /* In a VAR_DECL or FUNCTION_DECL, nonzero means external reference:
2595 do not allocate storage, and refer to a definition elsewhere. Note that 2673 do not allocate storage, and refer to a definition elsewhere. Note that
2596 this does not necessarily imply the entity represented by NODE 2674 this does not necessarily imply the entity represented by NODE
2597 has no program source-level definition in this translation unit. For 2675 has no program source-level definition in this translation unit. For
2605 2683
2606 For LABEL_DECL nodes, nonzero if nonlocal gotos to the label are permitted. 2684 For LABEL_DECL nodes, nonzero if nonlocal gotos to the label are permitted.
2607 2685
2608 Also set in some languages for variables, etc., outside the normal 2686 Also set in some languages for variables, etc., outside the normal
2609 lexical scope, such as class instance variables. */ 2687 lexical scope, such as class instance variables. */
2610 #define DECL_NONLOCAL(NODE) (DECL_COMMON_CHECK (NODE)->decl_common.nonlocal_flag) 2688 #define DECL_NONLOCAL(NODE) \
2689 (DECL_COMMON_CHECK (NODE)->decl_common.nonlocal_flag)
2611 2690
2612 /* Used in VAR_DECLs to indicate that the variable is a vtable. 2691 /* Used in VAR_DECLs to indicate that the variable is a vtable.
2613 Used in FIELD_DECLs for vtable pointers. 2692 Used in FIELD_DECLs for vtable pointers.
2614 Used in FUNCTION_DECLs to indicate that the function is virtual. */ 2693 Used in FUNCTION_DECLs to indicate that the function is virtual. */
2615 #define DECL_VIRTUAL_P(NODE) (DECL_COMMON_CHECK (NODE)->decl_common.virtual_flag) 2694 #define DECL_VIRTUAL_P(NODE) \
2695 (DECL_COMMON_CHECK (NODE)->decl_common.virtual_flag)
2616 2696
2617 /* Used to indicate that this DECL represents a compiler-generated entity. */ 2697 /* Used to indicate that this DECL represents a compiler-generated entity. */
2618 #define DECL_ARTIFICIAL(NODE) (DECL_COMMON_CHECK (NODE)->decl_common.artificial_flag) 2698 #define DECL_ARTIFICIAL(NODE) \
2699 (DECL_COMMON_CHECK (NODE)->decl_common.artificial_flag)
2619 2700
2620 /* Additional flags for language-specific uses. */ 2701 /* Additional flags for language-specific uses. */
2621 #define DECL_LANG_FLAG_0(NODE) (DECL_COMMON_CHECK (NODE)->decl_common.lang_flag_0) 2702 #define DECL_LANG_FLAG_0(NODE) \
2622 #define DECL_LANG_FLAG_1(NODE) (DECL_COMMON_CHECK (NODE)->decl_common.lang_flag_1) 2703 (DECL_COMMON_CHECK (NODE)->decl_common.lang_flag_0)
2623 #define DECL_LANG_FLAG_2(NODE) (DECL_COMMON_CHECK (NODE)->decl_common.lang_flag_2) 2704 #define DECL_LANG_FLAG_1(NODE) \
2624 #define DECL_LANG_FLAG_3(NODE) (DECL_COMMON_CHECK (NODE)->decl_common.lang_flag_3) 2705 (DECL_COMMON_CHECK (NODE)->decl_common.lang_flag_1)
2625 #define DECL_LANG_FLAG_4(NODE) (DECL_COMMON_CHECK (NODE)->decl_common.lang_flag_4) 2706 #define DECL_LANG_FLAG_2(NODE) \
2626 #define DECL_LANG_FLAG_5(NODE) (DECL_COMMON_CHECK (NODE)->decl_common.lang_flag_5) 2707 (DECL_COMMON_CHECK (NODE)->decl_common.lang_flag_2)
2627 #define DECL_LANG_FLAG_6(NODE) (DECL_COMMON_CHECK (NODE)->decl_common.lang_flag_6) 2708 #define DECL_LANG_FLAG_3(NODE) \
2628 #define DECL_LANG_FLAG_7(NODE) (DECL_COMMON_CHECK (NODE)->decl_common.lang_flag_7) 2709 (DECL_COMMON_CHECK (NODE)->decl_common.lang_flag_3)
2629 #define DECL_LANG_FLAG_8(NODE) (DECL_COMMON_CHECK (NODE)->decl_common.lang_flag_8) 2710 #define DECL_LANG_FLAG_4(NODE) \
2630 2711 (DECL_COMMON_CHECK (NODE)->decl_common.lang_flag_4)
2712 #define DECL_LANG_FLAG_5(NODE) \
2713 (DECL_COMMON_CHECK (NODE)->decl_common.lang_flag_5)
2714 #define DECL_LANG_FLAG_6(NODE) \
2715 (DECL_COMMON_CHECK (NODE)->decl_common.lang_flag_6)
2716 #define DECL_LANG_FLAG_7(NODE) \
2717 (DECL_COMMON_CHECK (NODE)->decl_common.lang_flag_7)
2718 #define DECL_LANG_FLAG_8(NODE) \
2719 (DECL_COMMON_CHECK (NODE)->decl_common.lang_flag_8)
2720
2721 /* Nonzero for a scope which is equal to file scope. */
2722 #define SCOPE_FILE_SCOPE_P(EXP) \
2723 (! (EXP) || TREE_CODE (EXP) == TRANSLATION_UNIT_DECL)
2631 /* Nonzero for a decl which is at file scope. */ 2724 /* Nonzero for a decl which is at file scope. */
2632 #define DECL_FILE_SCOPE_P(EXP) \ 2725 #define DECL_FILE_SCOPE_P(EXP) SCOPE_FILE_SCOPE_P (DECL_CONTEXT (EXP))
2633 (! DECL_CONTEXT (EXP) \ 2726 /* Nonzero for a type which is at file scope. */
2634 || TREE_CODE (DECL_CONTEXT (EXP)) == TRANSLATION_UNIT_DECL) 2727 #define TYPE_FILE_SCOPE_P(EXP) SCOPE_FILE_SCOPE_P (TYPE_CONTEXT (EXP))
2635 2728
2636 /* Nonzero for a decl that is decorated using attribute used. 2729 /* Nonzero for a decl that is decorated using attribute used.
2637 This indicates compiler tools that this decl needs to be preserved. */ 2730 This indicates to compiler tools that this decl needs to be preserved. */
2638 #define DECL_PRESERVE_P(DECL) \ 2731 #define DECL_PRESERVE_P(DECL) \
2639 DECL_COMMON_CHECK (DECL)->decl_common.preserve_flag 2732 DECL_COMMON_CHECK (DECL)->decl_common.preserve_flag
2640 2733
2641 /* For function local variables of COMPLEX and VECTOR types, 2734 /* For function local variables of COMPLEX and VECTOR types,
2642 indicates that the variable is not aliased, and that all 2735 indicates that the variable is not aliased, and that all
2677 /* In FIELD_DECL, this is DECL_BIT_FIELD 2770 /* In FIELD_DECL, this is DECL_BIT_FIELD
2678 In VAR_DECL and FUNCTION_DECL, this is DECL_EXTERNAL. 2771 In VAR_DECL and FUNCTION_DECL, this is DECL_EXTERNAL.
2679 In TYPE_DECL, this is TYPE_DECL_SUPPRESS_DEBUG. */ 2772 In TYPE_DECL, this is TYPE_DECL_SUPPRESS_DEBUG. */
2680 unsigned decl_flag_1 : 1; 2773 unsigned decl_flag_1 : 1;
2681 /* In FIELD_DECL, this is DECL_NONADDRESSABLE_P 2774 /* In FIELD_DECL, this is DECL_NONADDRESSABLE_P
2682 In VAR_DECL and PARM_DECL, this is DECL_HAS_VALUE_EXPR_P. */ 2775 In VAR_DECL, PARM_DECL and RESULT_DECL, this is
2776 DECL_HAS_VALUE_EXPR_P. */
2683 unsigned decl_flag_2 : 1; 2777 unsigned decl_flag_2 : 1;
2684 /* Logically, these two would go in a theoretical base shared by var and 2778 /* Logically, these two would go in a theoretical base shared by var and
2685 parm decl. */ 2779 parm decl. */
2686 unsigned gimple_reg_flag : 1; 2780 unsigned gimple_reg_flag : 1;
2687 /* In VAR_DECL, PARM_DECL and RESULT_DECL, this is DECL_BY_REFERENCE. */ 2781 /* In VAR_DECL, PARM_DECL and RESULT_DECL, this is DECL_BY_REFERENCE. */
2688 unsigned decl_by_reference_flag : 1; 2782 unsigned decl_by_reference_flag : 1;
2689 /* In VAR_DECL, PARM_DECL and RESULT_DECL, this is DECL_RESTRICTED_P. */ 2783 /* In VAR_DECL, PARM_DECL and RESULT_DECL, this is DECL_RESTRICTED_P. */
2690 unsigned decl_restricted_flag : 1; 2784 unsigned decl_restricted_flag : 1;
2691 2785
2786 /* In VAR_DECL and PARM_DECL set when the decl has been used except for
2787 being set. */
2788 unsigned decl_read_flag : 1;
2789
2692 /* Padding so that 'off_align' can be on a 32-bit boundary. */ 2790 /* Padding so that 'off_align' can be on a 32-bit boundary. */
2693 unsigned decl_common_unused : 2; 2791 unsigned decl_common_unused : 1;
2694 2792
2695 /* DECL_OFFSET_ALIGN, used only for FIELD_DECLs. */ 2793 /* DECL_OFFSET_ALIGN, used only for FIELD_DECLs. */
2696 unsigned int off_align : 8; 2794 unsigned int off_align : 8;
2697 2795
2698 /* 24-bits unused. */ 2796 /* 24-bits unused. */
2699 2797
2700 /* DECL_ALIGN. It should have the same size as TYPE_ALIGN. */ 2798 /* DECL_ALIGN. It should have the same size as TYPE_ALIGN. */
2701 unsigned int align; 2799 unsigned int align;
2800
2801 /* UID for points-to sets, stable over copying from inlining. */
2802 unsigned int pt_uid;
2702 2803
2703 tree size_unit; 2804 tree size_unit;
2704 tree initial; 2805 tree initial;
2705 tree attributes; 2806 tree attributes;
2706 tree abstract_origin; 2807 tree abstract_origin;
2715 /* In a VAR_DECL or PARM_DECL, the location at which the value may be found, 2816 /* In a VAR_DECL or PARM_DECL, the location at which the value may be found,
2716 if transformations have made this more complicated than evaluating the 2817 if transformations have made this more complicated than evaluating the
2717 decl itself. This should only be used for debugging; once this field has 2818 decl itself. This should only be used for debugging; once this field has
2718 been set, the decl itself may not legitimately appear in the function. */ 2819 been set, the decl itself may not legitimately appear in the function. */
2719 #define DECL_HAS_VALUE_EXPR_P(NODE) \ 2820 #define DECL_HAS_VALUE_EXPR_P(NODE) \
2720 (TREE_CHECK2 (NODE, VAR_DECL, PARM_DECL)->decl_common.decl_flag_2) 2821 (TREE_CHECK3 (NODE, VAR_DECL, PARM_DECL, RESULT_DECL) \
2822 ->decl_common.decl_flag_2)
2721 #define DECL_VALUE_EXPR(NODE) \ 2823 #define DECL_VALUE_EXPR(NODE) \
2722 (decl_value_expr_lookup (DECL_WRTL_CHECK (NODE))) 2824 (decl_value_expr_lookup (DECL_WRTL_CHECK (NODE)))
2723 #define SET_DECL_VALUE_EXPR(NODE, VAL) \ 2825 #define SET_DECL_VALUE_EXPR(NODE, VAL) \
2724 (decl_value_expr_insert (DECL_WRTL_CHECK (NODE), VAL)) 2826 (decl_value_expr_insert (DECL_WRTL_CHECK (NODE), VAL))
2725 2827
2726 /* Holds the RTL expression for the value of a variable or function. 2828 /* Holds the RTL expression for the value of a variable or function.
2727 This value can be evaluated lazily for functions, variables with 2829 This value can be evaluated lazily for functions, variables with
2728 static storage duration, and labels. */ 2830 static storage duration, and labels. */
2736 2838
2737 /* Returns nonzero if NODE is a tree node that can contain RTL. */ 2839 /* Returns nonzero if NODE is a tree node that can contain RTL. */
2738 #define HAS_RTL_P(NODE) (CODE_CONTAINS_STRUCT (TREE_CODE (NODE), TS_DECL_WRTL)) 2840 #define HAS_RTL_P(NODE) (CODE_CONTAINS_STRUCT (TREE_CODE (NODE), TS_DECL_WRTL))
2739 2841
2740 /* Returns nonzero if the DECL_RTL for NODE has already been set. */ 2842 /* Returns nonzero if the DECL_RTL for NODE has already been set. */
2741 #define DECL_RTL_SET_P(NODE) (HAS_RTL_P (NODE) && DECL_WRTL_CHECK (NODE)->decl_with_rtl.rtl != NULL) 2843 #define DECL_RTL_SET_P(NODE) \
2844 (HAS_RTL_P (NODE) && DECL_WRTL_CHECK (NODE)->decl_with_rtl.rtl != NULL)
2742 2845
2743 /* Copy the RTL from NODE1 to NODE2. If the RTL was not set for 2846 /* Copy the RTL from NODE1 to NODE2. If the RTL was not set for
2744 NODE1, it will not be set for NODE2; this is a lazy copy. */ 2847 NODE1, it will not be set for NODE2; this is a lazy copy. */
2745 #define COPY_DECL_RTL(NODE1, NODE2) \ 2848 #define COPY_DECL_RTL(NODE1, NODE2) \
2746 (DECL_WRTL_CHECK (NODE2)->decl_with_rtl.rtl = DECL_WRTL_CHECK (NODE1)->decl_with_rtl.rtl) 2849 (DECL_WRTL_CHECK (NODE2)->decl_with_rtl.rtl \
2850 = DECL_WRTL_CHECK (NODE1)->decl_with_rtl.rtl)
2747 2851
2748 /* The DECL_RTL for NODE, if it is set, or NULL, if it is not set. */ 2852 /* The DECL_RTL for NODE, if it is set, or NULL, if it is not set. */
2749 #define DECL_RTL_IF_SET(NODE) (DECL_RTL_SET_P (NODE) ? DECL_RTL (NODE) : NULL) 2853 #define DECL_RTL_IF_SET(NODE) (DECL_RTL_SET_P (NODE) ? DECL_RTL (NODE) : NULL)
2750 2854
2751 /* In VAR_DECL and PARM_DECL nodes, nonzero means declared `register'. */ 2855 /* In VAR_DECL and PARM_DECL nodes, nonzero means declared `register'. */
2763 2867
2764 /* In a FIELD_DECL, this is the offset, in bits, of the first bit of the 2868 /* In a FIELD_DECL, this is the offset, in bits, of the first bit of the
2765 field from DECL_FIELD_OFFSET. This field may be nonzero even for fields 2869 field from DECL_FIELD_OFFSET. This field may be nonzero even for fields
2766 that are not bit fields (since DECL_OFFSET_ALIGN may be larger than the 2870 that are not bit fields (since DECL_OFFSET_ALIGN may be larger than the
2767 natural alignment of the field's type). */ 2871 natural alignment of the field's type). */
2768 #define DECL_FIELD_BIT_OFFSET(NODE) (FIELD_DECL_CHECK (NODE)->field_decl.bit_offset) 2872 #define DECL_FIELD_BIT_OFFSET(NODE) \
2873 (FIELD_DECL_CHECK (NODE)->field_decl.bit_offset)
2769 2874
2770 /* In a FIELD_DECL, this indicates whether the field was a bit-field and 2875 /* In a FIELD_DECL, this indicates whether the field was a bit-field and
2771 if so, the type that was originally specified for it. 2876 if so, the type that was originally specified for it.
2772 TREE_TYPE may have been modified (in finish_struct). */ 2877 TREE_TYPE may have been modified (in finish_struct). */
2773 #define DECL_BIT_FIELD_TYPE(NODE) (FIELD_DECL_CHECK (NODE)->field_decl.bit_field_type) 2878 #define DECL_BIT_FIELD_TYPE(NODE) \
2879 (FIELD_DECL_CHECK (NODE)->field_decl.bit_field_type)
2774 2880
2775 /* For a FIELD_DECL in a QUAL_UNION_TYPE, records the expression, which 2881 /* For a FIELD_DECL in a QUAL_UNION_TYPE, records the expression, which
2776 if nonzero, indicates that the field occupies the type. */ 2882 if nonzero, indicates that the field occupies the type. */
2777 #define DECL_QUALIFIER(NODE) (FIELD_DECL_CHECK (NODE)->field_decl.qualifier) 2883 #define DECL_QUALIFIER(NODE) (FIELD_DECL_CHECK (NODE)->field_decl.qualifier)
2778 2884
2783 #define DECL_OFFSET_ALIGN(NODE) \ 2889 #define DECL_OFFSET_ALIGN(NODE) \
2784 (((unsigned HOST_WIDE_INT)1) << FIELD_DECL_CHECK (NODE)->decl_common.off_align) 2890 (((unsigned HOST_WIDE_INT)1) << FIELD_DECL_CHECK (NODE)->decl_common.off_align)
2785 2891
2786 /* Specify that DECL_ALIGN(NODE) is a multiple of X. */ 2892 /* Specify that DECL_ALIGN(NODE) is a multiple of X. */
2787 #define SET_DECL_OFFSET_ALIGN(NODE, X) \ 2893 #define SET_DECL_OFFSET_ALIGN(NODE, X) \
2788 (FIELD_DECL_CHECK (NODE)->decl_common.off_align = exact_log2 ((X) & -(X))) 2894 (FIELD_DECL_CHECK (NODE)->decl_common.off_align = ffs_hwi (X) - 1)
2789 /* 1 if the alignment for this type was requested by "aligned" attribute,
2790 0 if it is the default for this type. */
2791 2895
2792 /* For FIELD_DECLS, DECL_FCONTEXT is the *first* baseclass in 2896 /* For FIELD_DECLS, DECL_FCONTEXT is the *first* baseclass in
2793 which this FIELD_DECL is defined. This information is needed when 2897 which this FIELD_DECL is defined. This information is needed when
2794 writing debugging information about vfield and vbase decls for C++. */ 2898 writing debugging information about vfield and vbase decls for C++. */
2795 #define DECL_FCONTEXT(NODE) (FIELD_DECL_CHECK (NODE)->field_decl.fcontext) 2899 #define DECL_FCONTEXT(NODE) (FIELD_DECL_CHECK (NODE)->field_decl.fcontext)
2865 which may be different from the type seen in the program. */ 2969 which may be different from the type seen in the program. */
2866 #define DECL_ARG_TYPE(NODE) (PARM_DECL_CHECK (NODE)->decl_common.initial) 2970 #define DECL_ARG_TYPE(NODE) (PARM_DECL_CHECK (NODE)->decl_common.initial)
2867 2971
2868 /* For PARM_DECL, holds an RTL for the stack slot or register 2972 /* For PARM_DECL, holds an RTL for the stack slot or register
2869 where the data was actually passed. */ 2973 where the data was actually passed. */
2870 #define DECL_INCOMING_RTL(NODE) (PARM_DECL_CHECK (NODE)->parm_decl.incoming_rtl) 2974 #define DECL_INCOMING_RTL(NODE) \
2975 (PARM_DECL_CHECK (NODE)->parm_decl.incoming_rtl)
2871 2976
2872 struct GTY(()) tree_parm_decl { 2977 struct GTY(()) tree_parm_decl {
2873 struct tree_decl_with_rtl common; 2978 struct tree_decl_with_rtl common;
2874 rtx incoming_rtl; 2979 rtx incoming_rtl;
2875 struct var_ann_d *ann; 2980 struct var_ann_d *ann;
2876 }; 2981 };
2877 2982
2878 2983
2879 /* Nonzero in a decl means that the gimplifier has seen (or placed)
2880 this variable in a BIND_EXPR. */
2881 #define DECL_SEEN_IN_BIND_EXPR_P(NODE) \
2882 (DECL_WITH_VIS_CHECK (NODE)->decl_with_vis.seen_in_bind_expr)
2883
2884 /* Used to indicate that the linkage status of this DECL is not yet known,
2885 so it should not be output now. */
2886 #define DECL_DEFER_OUTPUT(NODE) (DECL_WITH_VIS_CHECK (NODE)->decl_with_vis.defer_output)
2887
2888 /* Nonzero for a given ..._DECL node means that no warnings should be 2984 /* Nonzero for a given ..._DECL node means that no warnings should be
2889 generated just because this node is unused. */ 2985 generated just because this node is unused. */
2890 #define DECL_IN_SYSTEM_HEADER(NODE) \ 2986 #define DECL_IN_SYSTEM_HEADER(NODE) \
2891 (in_system_header_at (DECL_SOURCE_LOCATION (NODE))) 2987 (in_system_header_at (DECL_SOURCE_LOCATION (NODE)))
2892 2988
2989 /* Used to indicate that the linkage status of this DECL is not yet known,
2990 so it should not be output now. */
2991 #define DECL_DEFER_OUTPUT(NODE) \
2992 (DECL_WITH_VIS_CHECK (NODE)->decl_with_vis.defer_output)
2993
2994 /* In a VAR_DECL that's static,
2995 nonzero if the space is in the text section. */
2996 #define DECL_IN_TEXT_SECTION(NODE) \
2997 (VAR_DECL_CHECK (NODE)->decl_with_vis.in_text_section)
2998
2999 /* In a VAR_DECL that's static,
3000 nonzero if it belongs to the global constant pool. */
3001 #define DECL_IN_CONSTANT_POOL(NODE) \
3002 (VAR_DECL_CHECK (NODE)->decl_with_vis.in_constant_pool)
3003
3004 /* Nonzero for a given ..._DECL node means that this node should be
3005 put in .common, if possible. If a DECL_INITIAL is given, and it
3006 is not error_mark_node, then the decl cannot be put in .common. */
3007 #define DECL_COMMON(NODE) \
3008 (DECL_WITH_VIS_CHECK (NODE)->decl_with_vis.common_flag)
3009
3010 /* In a VAR_DECL, nonzero if the decl is a register variable with
3011 an explicit asm specification. */
3012 #define DECL_HARD_REGISTER(NODE) \
3013 (VAR_DECL_CHECK (NODE)->decl_with_vis.hard_register)
3014
2893 /* Used to indicate that this DECL has weak linkage. */ 3015 /* Used to indicate that this DECL has weak linkage. */
2894 #define DECL_WEAK(NODE) (DECL_WITH_VIS_CHECK (NODE)->decl_with_vis.weak_flag) 3016 #define DECL_WEAK(NODE) (DECL_WITH_VIS_CHECK (NODE)->decl_with_vis.weak_flag)
2895 3017
2896 /* Used to indicate that the DECL is a dllimport. */ 3018 /* Used to indicate that the DECL is a dllimport. */
2897 #define DECL_DLLIMPORT_P(NODE) (DECL_WITH_VIS_CHECK (NODE)->decl_with_vis.dllimport_flag) 3019 #define DECL_DLLIMPORT_P(NODE) \
3020 (DECL_WITH_VIS_CHECK (NODE)->decl_with_vis.dllimport_flag)
2898 3021
2899 /* Used in a DECL to indicate that, even if it TREE_PUBLIC, it need 3022 /* Used in a DECL to indicate that, even if it TREE_PUBLIC, it need
2900 not be put out unless it is needed in this translation unit. 3023 not be put out unless it is needed in this translation unit.
2901 Entities like this are shared across translation units (like weak 3024 Entities like this are shared across translation units (like weak
2902 entities), but are guaranteed to be generated by any translation 3025 entities), but are guaranteed to be generated by any translation
2903 unit that needs them, and therefore need not be put out anywhere 3026 unit that needs them, and therefore need not be put out anywhere
2904 where they are not needed. DECL_COMDAT is just a hint to the 3027 where they are not needed. DECL_COMDAT is just a hint to the
2905 back-end; it is up to front-ends which set this flag to ensure 3028 back-end; it is up to front-ends which set this flag to ensure
2906 that there will never be any harm, other than bloat, in putting out 3029 that there will never be any harm, other than bloat, in putting out
2907 something which is DECL_COMDAT. */ 3030 something which is DECL_COMDAT. */
2908 #define DECL_COMDAT(NODE) (DECL_WITH_VIS_CHECK (NODE)->decl_with_vis.comdat_flag) 3031 #define DECL_COMDAT(NODE) \
2909 3032 (DECL_WITH_VIS_CHECK (NODE)->decl_with_vis.comdat_flag)
2910 #define DECL_COMDAT_GROUP(NODE) (DECL_WITH_VIS_CHECK (NODE)->decl_with_vis.comdat_group) 3033
2911 3034 #define DECL_COMDAT_GROUP(NODE) \
2912 /* A replaceable function is one which may be replaced at link-time 3035 (DECL_WITH_VIS_CHECK (NODE)->decl_with_vis.comdat_group)
2913 with an entirely different definition, provided that the 3036
2914 replacement has the same type. For example, functions declared 3037 /* Used in TREE_PUBLIC decls to indicate that copies of this DECL in
2915 with __attribute__((weak)) on most systems are replaceable. 3038 multiple translation units should be merged. */
2916 3039 #define DECL_ONE_ONLY(NODE) (DECL_COMDAT_GROUP (NODE) != NULL_TREE)
2917 COMDAT functions are not replaceable, since all definitions of the
2918 function must be equivalent. It is important that COMDAT functions
2919 not be treated as replaceable so that use of C++ template
2920 instantiations is not penalized.
2921
2922 For example, DECL_REPLACEABLE is used to determine whether or not a
2923 function (including a template instantiation) which is not
2924 explicitly declared "inline" can be inlined. If the function is
2925 DECL_REPLACEABLE then it is not safe to do the inlining, since the
2926 implementation chosen at link-time may be different. However, a
2927 function that is not DECL_REPLACEABLE can be inlined, since all
2928 versions of the function will be functionally identical. */
2929 #define DECL_REPLACEABLE_P(NODE) \
2930 (!DECL_COMDAT (NODE) && !targetm.binds_local_p (NODE))
2931 3040
2932 /* The name of the object as the assembler will see it (but before any 3041 /* The name of the object as the assembler will see it (but before any
2933 translations made by ASM_OUTPUT_LABELREF). Often this is the same 3042 translations made by ASM_OUTPUT_LABELREF). Often this is the same
2934 as DECL_NAME. It is an IDENTIFIER_NODE. */ 3043 as DECL_NAME. It is an IDENTIFIER_NODE. */
2935 #define DECL_ASSEMBLER_NAME(NODE) decl_assembler_name (NODE) 3044 #define DECL_ASSEMBLER_NAME(NODE) decl_assembler_name (NODE)
2941 3050
2942 /* Returns nonzero if the DECL_ASSEMBLER_NAME for NODE has been set. If zero, 3051 /* Returns nonzero if the DECL_ASSEMBLER_NAME for NODE has been set. If zero,
2943 the NODE might still have a DECL_ASSEMBLER_NAME -- it just hasn't been set 3052 the NODE might still have a DECL_ASSEMBLER_NAME -- it just hasn't been set
2944 yet. */ 3053 yet. */
2945 #define DECL_ASSEMBLER_NAME_SET_P(NODE) \ 3054 #define DECL_ASSEMBLER_NAME_SET_P(NODE) \
2946 (HAS_DECL_ASSEMBLER_NAME_P (NODE) && DECL_WITH_VIS_CHECK (NODE)->decl_with_vis.assembler_name != NULL_TREE) 3055 (HAS_DECL_ASSEMBLER_NAME_P (NODE) \
3056 && DECL_WITH_VIS_CHECK (NODE)->decl_with_vis.assembler_name != NULL_TREE)
2947 3057
2948 /* Set the DECL_ASSEMBLER_NAME for NODE to NAME. */ 3058 /* Set the DECL_ASSEMBLER_NAME for NODE to NAME. */
2949 #define SET_DECL_ASSEMBLER_NAME(NODE, NAME) \ 3059 #define SET_DECL_ASSEMBLER_NAME(NODE, NAME) \
2950 (DECL_WITH_VIS_CHECK (NODE)->decl_with_vis.assembler_name = (NAME)) 3060 (DECL_WITH_VIS_CHECK (NODE)->decl_with_vis.assembler_name = (NAME))
2951 3061
2964 DECL_ASSEMBLER_NAME (DECL1)) \ 3074 DECL_ASSEMBLER_NAME (DECL1)) \
2965 : (void) 0) 3075 : (void) 0)
2966 3076
2967 /* Records the section name in a section attribute. Used to pass 3077 /* Records the section name in a section attribute. Used to pass
2968 the name from decl_attributes to make_function_rtl and make_decl_rtl. */ 3078 the name from decl_attributes to make_function_rtl and make_decl_rtl. */
2969 #define DECL_SECTION_NAME(NODE) (DECL_WITH_VIS_CHECK (NODE)->decl_with_vis.section_name) 3079 #define DECL_SECTION_NAME(NODE) \
3080 (DECL_WITH_VIS_CHECK (NODE)->decl_with_vis.section_name)
3081
3082 /* Nonzero in a decl means that the gimplifier has seen (or placed)
3083 this variable in a BIND_EXPR. */
3084 #define DECL_SEEN_IN_BIND_EXPR_P(NODE) \
3085 (DECL_WITH_VIS_CHECK (NODE)->decl_with_vis.seen_in_bind_expr)
2970 3086
2971 /* Value of the decls's visibility attribute */ 3087 /* Value of the decls's visibility attribute */
2972 #define DECL_VISIBILITY(NODE) (DECL_WITH_VIS_CHECK (NODE)->decl_with_vis.visibility) 3088 #define DECL_VISIBILITY(NODE) \
3089 (DECL_WITH_VIS_CHECK (NODE)->decl_with_vis.visibility)
2973 3090
2974 /* Nonzero means that the decl had its visibility specified rather than 3091 /* Nonzero means that the decl had its visibility specified rather than
2975 being inferred. */ 3092 being inferred. */
2976 #define DECL_VISIBILITY_SPECIFIED(NODE) (DECL_WITH_VIS_CHECK (NODE)->decl_with_vis.visibility_specified) 3093 #define DECL_VISIBILITY_SPECIFIED(NODE) \
2977 3094 (DECL_WITH_VIS_CHECK (NODE)->decl_with_vis.visibility_specified)
2978 /* Used in TREE_PUBLIC decls to indicate that copies of this DECL in 3095
2979 multiple translation units should be merged. */ 3096 /* In a VAR_DECL, the model to use if the data should be allocated from
2980 #define DECL_ONE_ONLY(NODE) (DECL_COMDAT_GROUP (NODE) != NULL_TREE) 3097 thread-local storage. */
3098 #define DECL_TLS_MODEL(NODE) (VAR_DECL_CHECK (NODE)->decl_with_vis.tls_model)
3099
3100 /* In a VAR_DECL, nonzero if the data should be allocated from
3101 thread-local storage. */
3102 #define DECL_THREAD_LOCAL_P(NODE) \
3103 (VAR_DECL_CHECK (NODE)->decl_with_vis.tls_model >= TLS_MODEL_REAL)
3104
3105 /* In a non-local VAR_DECL with static storage duration, true if the
3106 variable has an initialization priority. If false, the variable
3107 will be initialized at the DEFAULT_INIT_PRIORITY. */
3108 #define DECL_HAS_INIT_PRIORITY_P(NODE) \
3109 (VAR_DECL_CHECK (NODE)->decl_with_vis.init_priority_p)
3110
3111 /* Specify whether the section name was set by user or by
3112 compiler via -ffunction-sections. */
3113 #define DECL_HAS_IMPLICIT_SECTION_NAME_P(NODE) \
3114 (DECL_WITH_VIS_CHECK (NODE)->decl_with_vis.implicit_section_name_p)
2981 3115
2982 struct GTY(()) tree_decl_with_vis { 3116 struct GTY(()) tree_decl_with_vis {
2983 struct tree_decl_with_rtl common; 3117 struct tree_decl_with_rtl common;
2984 tree assembler_name; 3118 tree assembler_name;
2985 tree section_name; 3119 tree section_name;
2989 unsigned defer_output : 1; 3123 unsigned defer_output : 1;
2990 unsigned hard_register : 1; 3124 unsigned hard_register : 1;
2991 unsigned thread_local : 1; 3125 unsigned thread_local : 1;
2992 unsigned common_flag : 1; 3126 unsigned common_flag : 1;
2993 unsigned in_text_section : 1; 3127 unsigned in_text_section : 1;
3128 unsigned in_constant_pool : 1;
2994 unsigned dllimport_flag : 1; 3129 unsigned dllimport_flag : 1;
2995 /* Used by C++. Might become a generic decl flag. */
2996 unsigned shadowed_for_var_p : 1;
2997 /* Don't belong to VAR_DECL exclusively. */ 3130 /* Don't belong to VAR_DECL exclusively. */
2998 unsigned weak_flag : 1; 3131 unsigned weak_flag : 1;
2999 3132
3000 unsigned seen_in_bind_expr : 1; 3133 unsigned seen_in_bind_expr : 1;
3001 unsigned comdat_flag : 1; 3134 unsigned comdat_flag : 1;
3004 /* Belongs to VAR_DECL exclusively. */ 3137 /* Belongs to VAR_DECL exclusively. */
3005 ENUM_BITFIELD(tls_model) tls_model : 3; 3138 ENUM_BITFIELD(tls_model) tls_model : 3;
3006 3139
3007 /* Belong to FUNCTION_DECL exclusively. */ 3140 /* Belong to FUNCTION_DECL exclusively. */
3008 unsigned init_priority_p : 1; 3141 unsigned init_priority_p : 1;
3009 /* 15 unused bits. */ 3142 /* Used by C++ only. Might become a generic decl flag. */
3143 unsigned shadowed_for_var_p : 1;
3144 /* When SECTION_NAME is implied by -ffunsection-section. */
3145 unsigned implicit_section_name_p : 1;
3146 /* 13 unused bits. */
3010 }; 3147 };
3011
3012 /* In a VAR_DECL that's static,
3013 nonzero if the space is in the text section. */
3014 #define DECL_IN_TEXT_SECTION(NODE) (VAR_DECL_CHECK (NODE)->decl_with_vis.in_text_section)
3015
3016 /* Nonzero for a given ..._DECL node means that this node should be
3017 put in .common, if possible. If a DECL_INITIAL is given, and it
3018 is not error_mark_node, then the decl cannot be put in .common. */
3019 #define DECL_COMMON(NODE) (DECL_WITH_VIS_CHECK (NODE)->decl_with_vis.common_flag)
3020
3021 /* In a VAR_DECL, nonzero if the decl is a register variable with
3022 an explicit asm specification. */
3023 #define DECL_HARD_REGISTER(NODE) (VAR_DECL_CHECK (NODE)->decl_with_vis.hard_register)
3024 3148
3025 extern tree decl_debug_expr_lookup (tree); 3149 extern tree decl_debug_expr_lookup (tree);
3026 extern void decl_debug_expr_insert (tree, tree); 3150 extern void decl_debug_expr_insert (tree, tree);
3027 /* For VAR_DECL, this is set to either an expression that it was split 3151 /* For VAR_DECL, this is set to either an expression that it was split
3028 from (if DECL_DEBUG_EXPR_IS_FROM is true), otherwise a tree_list of 3152 from (if DECL_DEBUG_EXPR_IS_FROM is true), otherwise a tree_list of
3039 extern priority_type decl_init_priority_lookup (tree); 3163 extern priority_type decl_init_priority_lookup (tree);
3040 extern priority_type decl_fini_priority_lookup (tree); 3164 extern priority_type decl_fini_priority_lookup (tree);
3041 extern void decl_init_priority_insert (tree, priority_type); 3165 extern void decl_init_priority_insert (tree, priority_type);
3042 extern void decl_fini_priority_insert (tree, priority_type); 3166 extern void decl_fini_priority_insert (tree, priority_type);
3043 3167
3044 /* In a non-local VAR_DECL with static storage duration, true if the
3045 variable has an initialization priority. If false, the variable
3046 will be initialized at the DEFAULT_INIT_PRIORITY. */
3047 #define DECL_HAS_INIT_PRIORITY_P(NODE) \
3048 (VAR_DECL_CHECK (NODE)->decl_with_vis.init_priority_p)
3049
3050 /* For a VAR_DECL or FUNCTION_DECL the initialization priority of 3168 /* For a VAR_DECL or FUNCTION_DECL the initialization priority of
3051 NODE. */ 3169 NODE. */
3052 #define DECL_INIT_PRIORITY(NODE) \ 3170 #define DECL_INIT_PRIORITY(NODE) \
3053 (decl_init_priority_lookup (NODE)) 3171 (decl_init_priority_lookup (NODE))
3054 /* Set the initialization priority for NODE to VAL. */ 3172 /* Set the initialization priority for NODE to VAL. */
3071 3189
3072 /* The largest priority value reserved for use by system runtime 3190 /* The largest priority value reserved for use by system runtime
3073 libraries. */ 3191 libraries. */
3074 #define MAX_RESERVED_INIT_PRIORITY 100 3192 #define MAX_RESERVED_INIT_PRIORITY 100
3075 3193
3076 /* In a VAR_DECL, the model to use if the data should be allocated from
3077 thread-local storage. */
3078 #define DECL_TLS_MODEL(NODE) (VAR_DECL_CHECK (NODE)->decl_with_vis.tls_model)
3079
3080 /* In a VAR_DECL, nonzero if the data should be allocated from
3081 thread-local storage. */
3082 #define DECL_THREAD_LOCAL_P(NODE) \
3083 (VAR_DECL_CHECK (NODE)->decl_with_vis.tls_model >= TLS_MODEL_REAL)
3084
3085 #define DECL_VAR_ANN_PTR(NODE) \ 3194 #define DECL_VAR_ANN_PTR(NODE) \
3086 (TREE_CODE (NODE) == VAR_DECL ? &(NODE)->var_decl.ann \ 3195 (TREE_CODE (NODE) == VAR_DECL ? &(NODE)->var_decl.ann \
3087 : TREE_CODE (NODE) == PARM_DECL ? &(NODE)->parm_decl.ann \ 3196 : TREE_CODE (NODE) == PARM_DECL ? &(NODE)->parm_decl.ann \
3088 : TREE_CODE (NODE) == RESULT_DECL ? &(NODE)->result_decl.ann \ 3197 : TREE_CODE (NODE) == RESULT_DECL ? &(NODE)->result_decl.ann \
3089 : NULL) 3198 : NULL)
3094 }; 3203 };
3095 3204
3096 3205
3097 /* This field is used to reference anything in decl.result and is meant only 3206 /* This field is used to reference anything in decl.result and is meant only
3098 for use by the garbage collector. */ 3207 for use by the garbage collector. */
3099 #define DECL_RESULT_FLD(NODE) (DECL_NON_COMMON_CHECK (NODE)->decl_non_common.result) 3208 #define DECL_RESULT_FLD(NODE) \
3209 (DECL_NON_COMMON_CHECK (NODE)->decl_non_common.result)
3100 3210
3101 /* The DECL_VINDEX is used for FUNCTION_DECLS in two different ways. 3211 /* The DECL_VINDEX is used for FUNCTION_DECLS in two different ways.
3102 Before the struct containing the FUNCTION_DECL is laid out, 3212 Before the struct containing the FUNCTION_DECL is laid out,
3103 DECL_VINDEX may point to a FUNCTION_DECL in a base class which 3213 DECL_VINDEX may point to a FUNCTION_DECL in a base class which
3104 is the FUNCTION_DECL which this FUNCTION_DECL will replace as a virtual 3214 is the FUNCTION_DECL which this FUNCTION_DECL will replace as a virtual
3105 function. When the class is laid out, this pointer is changed 3215 function. When the class is laid out, this pointer is changed
3106 to an INTEGER_CST node which is suitable for use as an index 3216 to an INTEGER_CST node which is suitable for use as an index
3107 into the virtual function table. 3217 into the virtual function table.
3108 C++ also uses this field in namespaces, hence the DECL_NON_COMMON_CHECK. */ 3218 C++ also uses this field in namespaces, hence the DECL_NON_COMMON_CHECK. */
3109 #define DECL_VINDEX(NODE) (DECL_NON_COMMON_CHECK (NODE)->decl_non_common.vindex) 3219 #define DECL_VINDEX(NODE) \
3220 (DECL_NON_COMMON_CHECK (NODE)->decl_non_common.vindex)
3110 3221
3111 struct GTY(()) 3222 struct GTY(())
3112 tree_decl_non_common { 3223 tree_decl_non_common {
3113 struct tree_decl_with_vis common; 3224 struct tree_decl_with_vis common;
3114 /* C++ uses this in namespaces. */ 3225 /* C++ uses this in namespaces. */
3123 3234
3124 /* In FUNCTION_DECL, holds the decl for the return value. */ 3235 /* In FUNCTION_DECL, holds the decl for the return value. */
3125 #define DECL_RESULT(NODE) (FUNCTION_DECL_CHECK (NODE)->decl_non_common.result) 3236 #define DECL_RESULT(NODE) (FUNCTION_DECL_CHECK (NODE)->decl_non_common.result)
3126 3237
3127 /* In a FUNCTION_DECL, nonzero if the function cannot be inlined. */ 3238 /* In a FUNCTION_DECL, nonzero if the function cannot be inlined. */
3128 #define DECL_UNINLINABLE(NODE) (FUNCTION_DECL_CHECK (NODE)->function_decl.uninlinable) 3239 #define DECL_UNINLINABLE(NODE) \
3240 (FUNCTION_DECL_CHECK (NODE)->function_decl.uninlinable)
3129 3241
3130 /* In a FUNCTION_DECL, the saved representation of the body of the 3242 /* In a FUNCTION_DECL, the saved representation of the body of the
3131 entire function. */ 3243 entire function. */
3132 #define DECL_SAVED_TREE(NODE) (FUNCTION_DECL_CHECK (NODE)->decl_non_common.saved_tree) 3244 #define DECL_SAVED_TREE(NODE) \
3245 (FUNCTION_DECL_CHECK (NODE)->decl_non_common.saved_tree)
3133 3246
3134 /* Nonzero in a FUNCTION_DECL means this function should be treated 3247 /* Nonzero in a FUNCTION_DECL means this function should be treated
3135 as if it were a malloc, meaning it returns a pointer that is 3248 as if it were a malloc, meaning it returns a pointer that is
3136 not an alias. */ 3249 not an alias. */
3137 #define DECL_IS_MALLOC(NODE) (FUNCTION_DECL_CHECK (NODE)->function_decl.malloc_flag) 3250 #define DECL_IS_MALLOC(NODE) \
3251 (FUNCTION_DECL_CHECK (NODE)->function_decl.malloc_flag)
3138 3252
3139 /* Nonzero in a FUNCTION_DECL means this function should be treated as 3253 /* Nonzero in a FUNCTION_DECL means this function should be treated as
3140 C++ operator new, meaning that it returns a pointer for which we 3254 C++ operator new, meaning that it returns a pointer for which we
3141 should not use type based aliasing. */ 3255 should not use type based aliasing. */
3142 #define DECL_IS_OPERATOR_NEW(NODE) \ 3256 #define DECL_IS_OPERATOR_NEW(NODE) \
3161 (FUNCTION_DECL_CHECK (NODE)->function_decl.looping_const_or_pure_flag) 3275 (FUNCTION_DECL_CHECK (NODE)->function_decl.looping_const_or_pure_flag)
3162 3276
3163 /* Nonzero in a FUNCTION_DECL means this function should be treated 3277 /* Nonzero in a FUNCTION_DECL means this function should be treated
3164 as "novops" function (function that does not read global memory, 3278 as "novops" function (function that does not read global memory,
3165 but may have arbitrary side effects). */ 3279 but may have arbitrary side effects). */
3166 #define DECL_IS_NOVOPS(NODE) (FUNCTION_DECL_CHECK (NODE)->function_decl.novops_flag) 3280 #define DECL_IS_NOVOPS(NODE) \
3281 (FUNCTION_DECL_CHECK (NODE)->function_decl.novops_flag)
3167 3282
3168 /* Used in FUNCTION_DECLs to indicate that they should be run automatically 3283 /* Used in FUNCTION_DECLs to indicate that they should be run automatically
3169 at the beginning or end of execution. */ 3284 at the beginning or end of execution. */
3170 #define DECL_STATIC_CONSTRUCTOR(NODE) \ 3285 #define DECL_STATIC_CONSTRUCTOR(NODE) \
3171 (FUNCTION_DECL_CHECK (NODE)->function_decl.static_ctor_flag) 3286 (FUNCTION_DECL_CHECK (NODE)->function_decl.static_ctor_flag)
3211 #define DECL_DISREGARD_INLINE_LIMITS(NODE) \ 3326 #define DECL_DISREGARD_INLINE_LIMITS(NODE) \
3212 (FUNCTION_DECL_CHECK (NODE)->function_decl.disregard_inline_limits) 3327 (FUNCTION_DECL_CHECK (NODE)->function_decl.disregard_inline_limits)
3213 3328
3214 /* For FUNCTION_DECL, this holds a pointer to a structure ("struct function") 3329 /* For FUNCTION_DECL, this holds a pointer to a structure ("struct function")
3215 that describes the status of this function. */ 3330 that describes the status of this function. */
3216 #define DECL_STRUCT_FUNCTION(NODE) (FUNCTION_DECL_CHECK (NODE)->function_decl.f) 3331 #define DECL_STRUCT_FUNCTION(NODE) \
3332 (FUNCTION_DECL_CHECK (NODE)->function_decl.f)
3217 3333
3218 /* In a FUNCTION_DECL, nonzero means a built in function. */ 3334 /* In a FUNCTION_DECL, nonzero means a built in function. */
3219 #define DECL_BUILT_IN(NODE) (DECL_BUILT_IN_CLASS (NODE) != NOT_BUILT_IN) 3335 #define DECL_BUILT_IN(NODE) (DECL_BUILT_IN_CLASS (NODE) != NOT_BUILT_IN)
3220 3336
3221 /* For a builtin function, identify which part of the compiler defined it. */ 3337 /* For a builtin function, identify which part of the compiler defined it. */
3223 (FUNCTION_DECL_CHECK (NODE)->function_decl.built_in_class) 3339 (FUNCTION_DECL_CHECK (NODE)->function_decl.built_in_class)
3224 3340
3225 /* In FUNCTION_DECL, a chain of ..._DECL nodes. 3341 /* In FUNCTION_DECL, a chain of ..._DECL nodes.
3226 VAR_DECL and PARM_DECL reserve the arguments slot for language-specific 3342 VAR_DECL and PARM_DECL reserve the arguments slot for language-specific
3227 uses. */ 3343 uses. */
3228 #define DECL_ARGUMENTS(NODE) (FUNCTION_DECL_CHECK (NODE)->decl_non_common.arguments) 3344 #define DECL_ARGUMENTS(NODE) \
3229 #define DECL_ARGUMENT_FLD(NODE) (DECL_NON_COMMON_CHECK (NODE)->decl_non_common.arguments) 3345 (FUNCTION_DECL_CHECK (NODE)->decl_non_common.arguments)
3346 #define DECL_ARGUMENT_FLD(NODE) \
3347 (DECL_NON_COMMON_CHECK (NODE)->decl_non_common.arguments)
3230 3348
3231 /* In FUNCTION_DECL, the function specific target options to use when compiling 3349 /* In FUNCTION_DECL, the function specific target options to use when compiling
3232 this function. */ 3350 this function. */
3233 #define DECL_FUNCTION_SPECIFIC_TARGET(NODE) \ 3351 #define DECL_FUNCTION_SPECIFIC_TARGET(NODE) \
3234 (FUNCTION_DECL_CHECK (NODE)->function_decl.function_specific_target) 3352 (FUNCTION_DECL_CHECK (NODE)->function_decl.function_specific_target)
3283 3401
3284 3402
3285 /* 3 bits left */ 3403 /* 3 bits left */
3286 }; 3404 };
3287 3405
3406 /* The source language of the translation-unit. */
3407 #define TRANSLATION_UNIT_LANGUAGE(NODE) \
3408 (TRANSLATION_UNIT_DECL_CHECK (NODE)->translation_unit_decl.language)
3409
3410 /* TRANSLATION_UNIT_DECL inherits from DECL_MINIMAL. */
3411
3412 struct GTY(()) tree_translation_unit_decl {
3413 struct tree_decl_common common;
3414 /* Source language of this translation unit. Used for DWARF output. */
3415 const char * GTY((skip(""))) language;
3416 /* TODO: Non-optimization used to build this translation unit. */
3417 /* TODO: Root of a partial DWARF tree for global types and decls. */
3418 };
3419
3420 /* A vector of all translation-units. */
3421 extern GTY (()) VEC(tree,gc) *all_translation_units;
3422
3288 /* For a TYPE_DECL, holds the "original" type. (TREE_TYPE has the copy.) */ 3423 /* For a TYPE_DECL, holds the "original" type. (TREE_TYPE has the copy.) */
3289 #define DECL_ORIGINAL_TYPE(NODE) (TYPE_DECL_CHECK (NODE)->decl_non_common.result) 3424 #define DECL_ORIGINAL_TYPE(NODE) \
3425 (TYPE_DECL_CHECK (NODE)->decl_non_common.result)
3290 3426
3291 /* In a TYPE_DECL nonzero means the detail info about this type is not dumped 3427 /* In a TYPE_DECL nonzero means the detail info about this type is not dumped
3292 into stabs. Instead it will generate cross reference ('x') of names. 3428 into stabs. Instead it will generate cross reference ('x') of names.
3293 This uses the same flag as DECL_EXTERNAL. */ 3429 This uses the same flag as DECL_EXTERNAL. */
3294 #define TYPE_DECL_SUPPRESS_DEBUG(NODE) \ 3430 #define TYPE_DECL_SUPPRESS_DEBUG(NODE) \
3364 /* Define the overall contents of a tree node. 3500 /* Define the overall contents of a tree node.
3365 It may be any of the structures declared above 3501 It may be any of the structures declared above
3366 for various types of node. */ 3502 for various types of node. */
3367 3503
3368 union GTY ((ptr_alias (union lang_tree_node), 3504 union GTY ((ptr_alias (union lang_tree_node),
3369 desc ("tree_node_structure (&%h)"))) tree_node { 3505 desc ("tree_node_structure (&%h)"), variable_size)) tree_node {
3370 struct tree_base GTY ((tag ("TS_BASE"))) base; 3506 struct tree_base GTY ((tag ("TS_BASE"))) base;
3371 struct tree_common GTY ((tag ("TS_COMMON"))) common; 3507 struct tree_common GTY ((tag ("TS_COMMON"))) common;
3372 struct tree_int_cst GTY ((tag ("TS_INT_CST"))) int_cst; 3508 struct tree_int_cst GTY ((tag ("TS_INT_CST"))) int_cst;
3373 struct tree_real_cst GTY ((tag ("TS_REAL_CST"))) real_cst; 3509 struct tree_real_cst GTY ((tag ("TS_REAL_CST"))) real_cst;
3374 struct tree_fixed_cst GTY ((tag ("TS_FIXED_CST"))) fixed_cst; 3510 struct tree_fixed_cst GTY ((tag ("TS_FIXED_CST"))) fixed_cst;
3387 struct tree_label_decl GTY ((tag ("TS_LABEL_DECL"))) label_decl; 3523 struct tree_label_decl GTY ((tag ("TS_LABEL_DECL"))) label_decl;
3388 struct tree_result_decl GTY ((tag ("TS_RESULT_DECL"))) result_decl; 3524 struct tree_result_decl GTY ((tag ("TS_RESULT_DECL"))) result_decl;
3389 struct tree_const_decl GTY ((tag ("TS_CONST_DECL"))) const_decl; 3525 struct tree_const_decl GTY ((tag ("TS_CONST_DECL"))) const_decl;
3390 struct tree_type_decl GTY ((tag ("TS_TYPE_DECL"))) type_decl; 3526 struct tree_type_decl GTY ((tag ("TS_TYPE_DECL"))) type_decl;
3391 struct tree_function_decl GTY ((tag ("TS_FUNCTION_DECL"))) function_decl; 3527 struct tree_function_decl GTY ((tag ("TS_FUNCTION_DECL"))) function_decl;
3528 struct tree_translation_unit_decl GTY ((tag ("TS_TRANSLATION_UNIT_DECL")))
3529 translation_unit_decl;
3392 struct tree_type GTY ((tag ("TS_TYPE"))) type; 3530 struct tree_type GTY ((tag ("TS_TYPE"))) type;
3393 struct tree_list GTY ((tag ("TS_LIST"))) list; 3531 struct tree_list GTY ((tag ("TS_LIST"))) list;
3394 struct tree_vec GTY ((tag ("TS_VEC"))) vec; 3532 struct tree_vec GTY ((tag ("TS_VEC"))) vec;
3395 struct tree_exp GTY ((tag ("TS_EXP"))) exp; 3533 struct tree_exp GTY ((tag ("TS_EXP"))) exp;
3396 struct tree_ssa_name GTY ((tag ("TS_SSA_NAME"))) ssa_name; 3534 struct tree_ssa_name GTY ((tag ("TS_SSA_NAME"))) ssa_name;
3423 TI_UINT32_TYPE, 3561 TI_UINT32_TYPE,
3424 TI_UINT64_TYPE, 3562 TI_UINT64_TYPE,
3425 3563
3426 TI_INTEGER_ZERO, 3564 TI_INTEGER_ZERO,
3427 TI_INTEGER_ONE, 3565 TI_INTEGER_ONE,
3566 TI_INTEGER_THREE,
3428 TI_INTEGER_MINUS_ONE, 3567 TI_INTEGER_MINUS_ONE,
3429 TI_NULL_POINTER, 3568 TI_NULL_POINTER,
3430 3569
3431 TI_SIZE_ZERO, 3570 TI_SIZE_ZERO,
3432 TI_SIZE_ONE, 3571 TI_SIZE_ONE,
3577 #define uint32_type_node global_trees[TI_UINT32_TYPE] 3716 #define uint32_type_node global_trees[TI_UINT32_TYPE]
3578 #define uint64_type_node global_trees[TI_UINT64_TYPE] 3717 #define uint64_type_node global_trees[TI_UINT64_TYPE]
3579 3718
3580 #define integer_zero_node global_trees[TI_INTEGER_ZERO] 3719 #define integer_zero_node global_trees[TI_INTEGER_ZERO]
3581 #define integer_one_node global_trees[TI_INTEGER_ONE] 3720 #define integer_one_node global_trees[TI_INTEGER_ONE]
3721 #define integer_three_node global_trees[TI_INTEGER_THREE]
3582 #define integer_minus_one_node global_trees[TI_INTEGER_MINUS_ONE] 3722 #define integer_minus_one_node global_trees[TI_INTEGER_MINUS_ONE]
3583 #define size_zero_node global_trees[TI_SIZE_ZERO] 3723 #define size_zero_node global_trees[TI_SIZE_ZERO]
3584 #define size_one_node global_trees[TI_SIZE_ONE] 3724 #define size_one_node global_trees[TI_SIZE_ONE]
3585 #define bitsize_zero_node global_trees[TI_BITSIZE_ZERO] 3725 #define bitsize_zero_node global_trees[TI_BITSIZE_ZERO]
3586 #define bitsize_one_node global_trees[TI_BITSIZE_ONE] 3726 #define bitsize_one_node global_trees[TI_BITSIZE_ONE]
3718 no TREE_CHAIN. Language-independent code should not assume 3858 no TREE_CHAIN. Language-independent code should not assume
3719 anything else about this node. */ 3859 anything else about this node. */
3720 #define void_list_node global_trees[TI_VOID_LIST_NODE] 3860 #define void_list_node global_trees[TI_VOID_LIST_NODE]
3721 3861
3722 #define main_identifier_node global_trees[TI_MAIN_IDENTIFIER] 3862 #define main_identifier_node global_trees[TI_MAIN_IDENTIFIER]
3723 #define MAIN_NAME_P(NODE) (IDENTIFIER_NODE_CHECK (NODE) == main_identifier_node) 3863 #define MAIN_NAME_P(NODE) \
3864 (IDENTIFIER_NODE_CHECK (NODE) == main_identifier_node)
3724 3865
3725 /* Optimization options (OPTIMIZATION_NODE) to use for default and current 3866 /* Optimization options (OPTIMIZATION_NODE) to use for default and current
3726 functions. */ 3867 functions. */
3727 #define optimization_default_node global_trees[TI_OPTIMIZATION_DEFAULT] 3868 #define optimization_default_node global_trees[TI_OPTIMIZATION_DEFAULT]
3728 #define optimization_current_node global_trees[TI_OPTIMIZATION_CURRENT] 3869 #define optimization_current_node global_trees[TI_OPTIMIZATION_CURRENT]
3751 itk_unsigned_int, 3892 itk_unsigned_int,
3752 itk_long, 3893 itk_long,
3753 itk_unsigned_long, 3894 itk_unsigned_long,
3754 itk_long_long, 3895 itk_long_long,
3755 itk_unsigned_long_long, 3896 itk_unsigned_long_long,
3897 itk_int128,
3898 itk_unsigned_int128,
3756 itk_none 3899 itk_none
3757 }; 3900 };
3758 3901
3759 typedef enum integer_type_kind integer_type_kind; 3902 typedef enum integer_type_kind integer_type_kind;
3760 3903
3771 #define unsigned_type_node integer_types[itk_unsigned_int] 3914 #define unsigned_type_node integer_types[itk_unsigned_int]
3772 #define long_integer_type_node integer_types[itk_long] 3915 #define long_integer_type_node integer_types[itk_long]
3773 #define long_unsigned_type_node integer_types[itk_unsigned_long] 3916 #define long_unsigned_type_node integer_types[itk_unsigned_long]
3774 #define long_long_integer_type_node integer_types[itk_long_long] 3917 #define long_long_integer_type_node integer_types[itk_long_long]
3775 #define long_long_unsigned_type_node integer_types[itk_unsigned_long_long] 3918 #define long_long_unsigned_type_node integer_types[itk_unsigned_long_long]
3776 3919 #define int128_integer_type_node integer_types[itk_int128]
3777 /* Set to the default thread-local storage (tls) model to use. */ 3920 #define int128_unsigned_type_node integer_types[itk_unsigned_int128]
3778
3779 extern enum tls_model flag_tls_default;
3780
3781 3921
3782 /* A pointer-to-function member type looks like: 3922 /* A pointer-to-function member type looks like:
3783 3923
3784 struct { 3924 struct {
3785 __P __pfn; 3925 __P __pfn;
3872 extern tree maybe_get_identifier (const char *); 4012 extern tree maybe_get_identifier (const char *);
3873 4013
3874 /* Construct various types of nodes. */ 4014 /* Construct various types of nodes. */
3875 4015
3876 extern tree build_nt (enum tree_code, ...); 4016 extern tree build_nt (enum tree_code, ...);
3877 extern tree build_nt_call_list (tree, tree);
3878 extern tree build_nt_call_vec (tree, VEC(tree,gc) *); 4017 extern tree build_nt_call_vec (tree, VEC(tree,gc) *);
3879 4018
3880 extern tree build0_stat (enum tree_code, tree MEM_STAT_DECL); 4019 extern tree build0_stat (enum tree_code, tree MEM_STAT_DECL);
3881 #define build0(c,t) build0_stat (c,t MEM_STAT_INFO) 4020 #define build0(c,t) build0_stat (c,t MEM_STAT_INFO)
3882 extern tree build1_stat (enum tree_code, tree, tree MEM_STAT_DECL); 4021 extern tree build1_stat (enum tree_code, tree, tree MEM_STAT_DECL);
3894 extern tree build6_stat (enum tree_code, tree, tree, tree, tree, tree, 4033 extern tree build6_stat (enum tree_code, tree, tree, tree, tree, tree,
3895 tree, tree MEM_STAT_DECL); 4034 tree, tree MEM_STAT_DECL);
3896 #define build6(c,t1,t2,t3,t4,t5,t6,t7) \ 4035 #define build6(c,t1,t2,t3,t4,t5,t6,t7) \
3897 build6_stat (c,t1,t2,t3,t4,t5,t6,t7 MEM_STAT_INFO) 4036 build6_stat (c,t1,t2,t3,t4,t5,t6,t7 MEM_STAT_INFO)
3898 4037
4038 /* _loc versions of build[1-6]. */
4039
4040 static inline tree
4041 build1_stat_loc (location_t loc, enum tree_code code, tree type,
4042 tree arg1 MEM_STAT_DECL)
4043 {
4044 tree t = build1_stat (code, type, arg1 PASS_MEM_STAT);
4045 if (CAN_HAVE_LOCATION_P (t))
4046 SET_EXPR_LOCATION (t, loc);
4047 return t;
4048 }
4049 #define build1_loc(l,c,t1,t2) build1_stat_loc (l,c,t1,t2 MEM_STAT_INFO)
4050
4051 static inline tree
4052 build2_stat_loc (location_t loc, enum tree_code code, tree type, tree arg0,
4053 tree arg1 MEM_STAT_DECL)
4054 {
4055 tree t = build2_stat (code, type, arg0, arg1 PASS_MEM_STAT);
4056 if (CAN_HAVE_LOCATION_P (t))
4057 SET_EXPR_LOCATION (t, loc);
4058 return t;
4059 }
4060 #define build2_loc(l,c,t1,t2,t3) build2_stat_loc (l,c,t1,t2,t3 MEM_STAT_INFO)
4061
4062 static inline tree
4063 build3_stat_loc (location_t loc, enum tree_code code, tree type, tree arg0,
4064 tree arg1, tree arg2 MEM_STAT_DECL)
4065 {
4066 tree t = build3_stat (code, type, arg0, arg1, arg2 PASS_MEM_STAT);
4067 if (CAN_HAVE_LOCATION_P (t))
4068 SET_EXPR_LOCATION (t, loc);
4069 return t;
4070 }
4071 #define build3_loc(l,c,t1,t2,t3,t4) \
4072 build3_stat_loc (l,c,t1,t2,t3,t4 MEM_STAT_INFO)
4073
4074 static inline tree
4075 build4_stat_loc (location_t loc, enum tree_code code, tree type, tree arg0,
4076 tree arg1, tree arg2, tree arg3 MEM_STAT_DECL)
4077 {
4078 tree t = build4_stat (code, type, arg0, arg1, arg2, arg3 PASS_MEM_STAT);
4079 if (CAN_HAVE_LOCATION_P (t))
4080 SET_EXPR_LOCATION (t, loc);
4081 return t;
4082 }
4083 #define build4_loc(l,c,t1,t2,t3,t4,t5) \
4084 build4_stat_loc (l,c,t1,t2,t3,t4,t5 MEM_STAT_INFO)
4085
4086 static inline tree
4087 build5_stat_loc (location_t loc, enum tree_code code, tree type, tree arg0,
4088 tree arg1, tree arg2, tree arg3, tree arg4 MEM_STAT_DECL)
4089 {
4090 tree t = build5_stat (code, type, arg0, arg1, arg2, arg3,
4091 arg4 PASS_MEM_STAT);
4092 if (CAN_HAVE_LOCATION_P (t))
4093 SET_EXPR_LOCATION (t, loc);
4094 return t;
4095 }
4096 #define build5_loc(l,c,t1,t2,t3,t4,t5,t6) \
4097 build5_stat_loc (l,c,t1,t2,t3,t4,t5,t6 MEM_STAT_INFO)
4098
4099 static inline tree
4100 build6_stat_loc (location_t loc, enum tree_code code, tree type, tree arg0,
4101 tree arg1, tree arg2, tree arg3, tree arg4,
4102 tree arg5 MEM_STAT_DECL)
4103 {
4104 tree t = build6_stat (code, type, arg0, arg1, arg2, arg3, arg4,
4105 arg5 PASS_MEM_STAT);
4106 if (CAN_HAVE_LOCATION_P (t))
4107 SET_EXPR_LOCATION (t, loc);
4108 return t;
4109 }
4110 #define build6_loc(l,c,t1,t2,t3,t4,t5,t6,t7) \
4111 build6_stat_loc (l,c,t1,t2,t3,t4,t5,t6,t7 MEM_STAT_INFO)
4112
3899 extern tree build_var_debug_value_stat (tree, tree MEM_STAT_DECL); 4113 extern tree build_var_debug_value_stat (tree, tree MEM_STAT_DECL);
3900 #define build_var_debug_value(t1,t2) \ 4114 #define build_var_debug_value(t1,t2) \
3901 build_var_debug_value_stat (t1,t2 MEM_STAT_INFO) 4115 build_var_debug_value_stat (t1,t2 MEM_STAT_INFO)
3902 4116
4117 /* Constructs double_int from tree CST. */
4118
4119 static inline double_int
4120 tree_to_double_int (const_tree cst)
4121 {
4122 return TREE_INT_CST (cst);
4123 }
4124
4125 extern tree double_int_to_tree (tree, double_int);
4126 extern bool double_int_fits_to_tree_p (const_tree, double_int);
4127 extern tree force_fit_type_double (tree, double_int, int, bool);
4128
4129 /* Create an INT_CST node with a CST value zero extended. */
4130
4131 static inline tree
4132 build_int_cstu (tree type, unsigned HOST_WIDE_INT cst)
4133 {
4134 return double_int_to_tree (type, uhwi_to_double_int (cst));
4135 }
4136
3903 extern tree build_int_cst (tree, HOST_WIDE_INT); 4137 extern tree build_int_cst (tree, HOST_WIDE_INT);
3904 extern tree build_int_cst_type (tree, HOST_WIDE_INT); 4138 extern tree build_int_cst_type (tree, HOST_WIDE_INT);
3905 extern tree build_int_cstu (tree, unsigned HOST_WIDE_INT);
3906 extern tree build_int_cst_wide (tree, unsigned HOST_WIDE_INT, HOST_WIDE_INT); 4139 extern tree build_int_cst_wide (tree, unsigned HOST_WIDE_INT, HOST_WIDE_INT);
3907 extern tree build_int_cst_wide_type (tree,
3908 unsigned HOST_WIDE_INT, HOST_WIDE_INT);
3909 extern tree build_vector (tree, tree); 4140 extern tree build_vector (tree, tree);
3910 extern tree build_vector_from_ctor (tree, VEC(constructor_elt,gc) *); 4141 extern tree build_vector_from_ctor (tree, VEC(constructor_elt,gc) *);
4142 extern tree build_vector_from_val (tree, tree);
3911 extern tree build_constructor (tree, VEC(constructor_elt,gc) *); 4143 extern tree build_constructor (tree, VEC(constructor_elt,gc) *);
3912 extern tree build_constructor_single (tree, tree, tree); 4144 extern tree build_constructor_single (tree, tree, tree);
3913 extern tree build_constructor_from_list (tree, tree); 4145 extern tree build_constructor_from_list (tree, tree);
3914 extern tree build_real_from_int_cst (tree, const_tree); 4146 extern tree build_real_from_int_cst (tree, const_tree);
3915 extern tree build_complex (tree, tree, tree); 4147 extern tree build_complex (tree, tree, tree);
3916 extern tree build_one_cst (tree); 4148 extern tree build_one_cst (tree);
4149 extern tree build_zero_cst (tree);
3917 extern tree build_string (int, const char *); 4150 extern tree build_string (int, const char *);
3918 extern tree build_tree_list_stat (tree, tree MEM_STAT_DECL); 4151 extern tree build_tree_list_stat (tree, tree MEM_STAT_DECL);
3919 #define build_tree_list(t,q) build_tree_list_stat(t,q MEM_STAT_INFO) 4152 #define build_tree_list(t,q) build_tree_list_stat(t,q MEM_STAT_INFO)
3920 extern tree build_tree_list_vec_stat (const VEC(tree,gc) * MEM_STAT_DECL); 4153 extern tree build_tree_list_vec_stat (const VEC(tree,gc) * MEM_STAT_DECL);
3921 #define build_tree_list_vec(v) build_tree_list_vec_stat (v MEM_STAT_INFO) 4154 #define build_tree_list_vec(v) build_tree_list_vec_stat (v MEM_STAT_INFO)
3922 extern tree build_decl_stat (location_t, enum tree_code, 4155 extern tree build_decl_stat (location_t, enum tree_code,
3923 tree, tree MEM_STAT_DECL); 4156 tree, tree MEM_STAT_DECL);
3924 extern tree build_fn_decl (const char *, tree); 4157 extern tree build_fn_decl (const char *, tree);
3925 #define build_decl(l,c,t,q) build_decl_stat (l,c,t,q MEM_STAT_INFO) 4158 #define build_decl(l,c,t,q) build_decl_stat (l,c,t,q MEM_STAT_INFO)
4159 extern tree build_translation_unit_decl (tree);
3926 extern tree build_block (tree, tree, tree, tree); 4160 extern tree build_block (tree, tree, tree, tree);
3927 extern tree build_empty_stmt (location_t); 4161 extern tree build_empty_stmt (location_t);
3928 extern tree build_omp_clause (location_t, enum omp_clause_code); 4162 extern tree build_omp_clause (location_t, enum omp_clause_code);
3929 4163
3930 extern tree build_vl_exp_stat (enum tree_code, int MEM_STAT_DECL); 4164 extern tree build_vl_exp_stat (enum tree_code, int MEM_STAT_DECL);
3931 #define build_vl_exp(c,n) build_vl_exp_stat (c,n MEM_STAT_INFO) 4165 #define build_vl_exp(c,n) build_vl_exp_stat (c,n MEM_STAT_INFO)
3932 4166
3933 extern tree build_call_list (tree, tree, tree);
3934 extern tree build_call_nary (tree, tree, int, ...); 4167 extern tree build_call_nary (tree, tree, int, ...);
3935 extern tree build_call_valist (tree, tree, int, va_list); 4168 extern tree build_call_valist (tree, tree, int, va_list);
3936 #define build_call_array(T1,T2,N,T3)\ 4169 #define build_call_array(T1,T2,N,T3)\
3937 build_call_array_loc (UNKNOWN_LOCATION, T1, T2, N, T3) 4170 build_call_array_loc (UNKNOWN_LOCATION, T1, T2, N, T3)
3938 extern tree build_call_array_loc (location_t, tree, tree, int, const tree *); 4171 extern tree build_call_array_loc (location_t, tree, tree, int, const tree *);
3943 extern tree make_signed_type (int); 4176 extern tree make_signed_type (int);
3944 extern tree make_unsigned_type (int); 4177 extern tree make_unsigned_type (int);
3945 extern tree signed_or_unsigned_type_for (int, tree); 4178 extern tree signed_or_unsigned_type_for (int, tree);
3946 extern tree signed_type_for (tree); 4179 extern tree signed_type_for (tree);
3947 extern tree unsigned_type_for (tree); 4180 extern tree unsigned_type_for (tree);
3948 extern void initialize_sizetypes (bool); 4181 extern void initialize_sizetypes (void);
3949 extern void set_sizetype (tree); 4182 extern void set_sizetype (tree);
3950 extern void fixup_unsigned_type (tree); 4183 extern void fixup_unsigned_type (tree);
3951 extern tree build_pointer_type_for_mode (tree, enum machine_mode, bool); 4184 extern tree build_pointer_type_for_mode (tree, enum machine_mode, bool);
3952 extern tree build_pointer_type (tree); 4185 extern tree build_pointer_type (tree);
3953 extern tree build_reference_type_for_mode (tree, enum machine_mode, bool); 4186 extern tree build_reference_type_for_mode (tree, enum machine_mode, bool);
3955 extern tree build_vector_type_for_mode (tree, enum machine_mode); 4188 extern tree build_vector_type_for_mode (tree, enum machine_mode);
3956 extern tree build_vector_type (tree innertype, int nunits); 4189 extern tree build_vector_type (tree innertype, int nunits);
3957 extern tree build_opaque_vector_type (tree innertype, int nunits); 4190 extern tree build_opaque_vector_type (tree innertype, int nunits);
3958 extern tree build_type_no_quals (tree); 4191 extern tree build_type_no_quals (tree);
3959 extern tree build_index_type (tree); 4192 extern tree build_index_type (tree);
3960 extern tree build_index_2_type (tree, tree);
3961 extern tree build_array_type (tree, tree); 4193 extern tree build_array_type (tree, tree);
4194 extern tree build_nonshared_array_type (tree, tree);
3962 extern tree build_function_type (tree, tree); 4195 extern tree build_function_type (tree, tree);
3963 extern tree build_function_type_list (tree, ...); 4196 extern tree build_function_type_list (tree, ...);
3964 extern tree build_function_type_skip_args (tree, bitmap); 4197 extern tree build_function_type_skip_args (tree, bitmap);
3965 extern tree build_function_decl_skip_args (tree, bitmap); 4198 extern tree build_function_decl_skip_args (tree, bitmap);
3966 extern tree build_varargs_function_type_list (tree, ...); 4199 extern tree build_varargs_function_type_list (tree, ...);
3972 extern bool in_array_bounds_p (tree); 4205 extern bool in_array_bounds_p (tree);
3973 extern bool range_in_array_bounds_p (tree); 4206 extern bool range_in_array_bounds_p (tree);
3974 4207
3975 extern tree value_member (tree, tree); 4208 extern tree value_member (tree, tree);
3976 extern tree purpose_member (const_tree, tree); 4209 extern tree purpose_member (const_tree, tree);
4210 extern bool vec_member (const_tree, VEC(tree,gc) *);
3977 extern tree chain_index (int, tree); 4211 extern tree chain_index (int, tree);
3978 4212
3979 #ifndef noCbC 4213 #ifndef noCbC
3980 extern tree build_code_segment_type (tree, tree); 4214 extern tree build_code_segment_type (tree, tree);
3981 #endif 4215 #endif
3982 extern int attribute_list_equal (const_tree, const_tree); 4216 extern int attribute_list_equal (const_tree, const_tree);
3983 extern int attribute_list_contained (const_tree, const_tree); 4217 extern int attribute_list_contained (const_tree, const_tree);
3984 extern int tree_int_cst_equal (const_tree, const_tree); 4218 extern int tree_int_cst_equal (const_tree, const_tree);
3985 extern int tree_int_cst_lt (const_tree, const_tree); 4219 extern int tree_int_cst_lt (const_tree, const_tree);
3986 extern int tree_int_cst_compare (const_tree, const_tree); 4220 extern int tree_int_cst_compare (const_tree, const_tree);
3987 extern int host_integerp (const_tree, int); 4221 extern int host_integerp (const_tree, int)
4222 #ifndef ENABLE_TREE_CHECKING
4223 ATTRIBUTE_PURE /* host_integerp is pure only when checking is disabled. */
4224 #endif
4225 ;
3988 extern HOST_WIDE_INT tree_low_cst (const_tree, int); 4226 extern HOST_WIDE_INT tree_low_cst (const_tree, int);
4227 #if !defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 4003)
4228 extern inline __attribute__ ((__gnu_inline__)) HOST_WIDE_INT
4229 tree_low_cst (const_tree t, int pos)
4230 {
4231 gcc_assert (host_integerp (t, pos));
4232 return TREE_INT_CST_LOW (t);
4233 }
4234 #endif
3989 extern int tree_int_cst_msb (const_tree); 4235 extern int tree_int_cst_msb (const_tree);
3990 extern int tree_int_cst_sgn (const_tree); 4236 extern int tree_int_cst_sgn (const_tree);
3991 extern int tree_int_cst_sign_bit (const_tree); 4237 extern int tree_int_cst_sign_bit (const_tree);
3992 extern unsigned int tree_int_cst_min_precision (tree, bool); 4238 extern unsigned int tree_int_cst_min_precision (tree, bool);
3993 extern bool tree_expr_nonnegative_p (tree); 4239 extern bool tree_expr_nonnegative_p (tree);
4160 /* Like get_qualified_type, but creates the type if it does not 4406 /* Like get_qualified_type, but creates the type if it does not
4161 exist. This function never returns NULL_TREE. */ 4407 exist. This function never returns NULL_TREE. */
4162 4408
4163 extern tree build_qualified_type (tree, int); 4409 extern tree build_qualified_type (tree, int);
4164 4410
4411 /* Create a variant of type T with alignment ALIGN. */
4412
4413 extern tree build_aligned_type (tree, unsigned int);
4414
4165 /* Like build_qualified_type, but only deals with the `const' and 4415 /* Like build_qualified_type, but only deals with the `const' and
4166 `volatile' qualifiers. This interface is retained for backwards 4416 `volatile' qualifiers. This interface is retained for backwards
4167 compatibility with the various front-ends; new code should use 4417 compatibility with the various front-ends; new code should use
4168 build_qualified_type instead. */ 4418 build_qualified_type instead. */
4169 4419
4214 unsigned int unpacked_align; 4464 unsigned int unpacked_align;
4215 /* The previous field layed out. */ 4465 /* The previous field layed out. */
4216 tree prev_field; 4466 tree prev_field;
4217 /* The static variables (i.e., class variables, as opposed to 4467 /* The static variables (i.e., class variables, as opposed to
4218 instance variables) encountered in T. */ 4468 instance variables) encountered in T. */
4219 tree pending_statics; 4469 VEC(tree,gc) *pending_statics;
4220 /* Bits remaining in the current alignment group */ 4470 /* Bits remaining in the current alignment group */
4221 int remaining_in_alignment; 4471 int remaining_in_alignment;
4222 /* True if we've seen a packed field that didn't have normal 4472 /* True if we've seen a packed field that didn't have normal
4223 alignment anyway. */ 4473 alignment anyway. */
4224 int packed_maybe_necessary; 4474 int packed_maybe_necessary;
4316 4566
4317 #define round_up(T,N) round_up_loc (UNKNOWN_LOCATION, T, N) 4567 #define round_up(T,N) round_up_loc (UNKNOWN_LOCATION, T, N)
4318 extern tree round_up_loc (location_t, tree, int); 4568 extern tree round_up_loc (location_t, tree, int);
4319 #define round_down(T,N) round_down_loc (UNKNOWN_LOCATION, T, N) 4569 #define round_down(T,N) round_down_loc (UNKNOWN_LOCATION, T, N)
4320 extern tree round_down_loc (location_t, tree, int); 4570 extern tree round_down_loc (location_t, tree, int);
4321 extern tree get_pending_sizes (void); 4571 extern VEC(tree,gc) *get_pending_sizes (void);
4322 extern void put_pending_size (tree); 4572 extern void put_pending_size (tree);
4323 extern void put_pending_sizes (tree); 4573 extern void put_pending_sizes (VEC(tree,gc) *);
4324 extern void finalize_size_functions (void); 4574 extern void finalize_size_functions (void);
4325 4575
4326 /* Type for sizes of data-type. */ 4576 /* Type for sizes of data-type. */
4327 4577
4328 #define BITS_PER_UNIT_LOG \ 4578 #define BITS_PER_UNIT_LOG \
4330 + (BITS_PER_UNIT > 8) + (BITS_PER_UNIT > 16) + (BITS_PER_UNIT > 32) \ 4580 + (BITS_PER_UNIT > 8) + (BITS_PER_UNIT > 16) + (BITS_PER_UNIT > 32) \
4331 + (BITS_PER_UNIT > 64) + (BITS_PER_UNIT > 128) + (BITS_PER_UNIT > 256)) 4581 + (BITS_PER_UNIT > 64) + (BITS_PER_UNIT > 128) + (BITS_PER_UNIT > 256))
4332 4582
4333 /* If nonzero, an upper limit on alignment of structure fields, in bits, */ 4583 /* If nonzero, an upper limit on alignment of structure fields, in bits, */
4334 extern unsigned int maximum_field_alignment; 4584 extern unsigned int maximum_field_alignment;
4335 /* and its original value in bytes, specified via -fpack-struct=<value>. */
4336 extern unsigned int initial_max_fld_align;
4337 4585
4338 /* Concatenate two lists (chains of TREE_LIST nodes) X and Y 4586 /* Concatenate two lists (chains of TREE_LIST nodes) X and Y
4339 by making the last node in X point to Y. 4587 by making the last node in X point to Y.
4340 Returns X, except if X is 0 returns Y. */ 4588 Returns X, except if X is 0 returns Y. */
4341 4589
4361 4609
4362 /* Returns the number of FIELD_DECLs in a type. */ 4610 /* Returns the number of FIELD_DECLs in a type. */
4363 4611
4364 extern int fields_length (const_tree); 4612 extern int fields_length (const_tree);
4365 4613
4614 /* Returns the first FIELD_DECL in a type. */
4615
4616 extern tree first_field (const_tree);
4617
4366 /* Given an initializer INIT, return TRUE if INIT is zero or some 4618 /* Given an initializer INIT, return TRUE if INIT is zero or some
4367 aggregate of zeros. Otherwise return FALSE. */ 4619 aggregate of zeros. Otherwise return FALSE. */
4368 4620
4369 extern bool initializer_zerop (const_tree); 4621 extern bool initializer_zerop (const_tree);
4370
4371 /* Given a CONSTRUCTOR CTOR, return the elements as a TREE_LIST. */
4372
4373 extern tree ctor_to_list (tree);
4374 4622
4375 /* Given a CONSTRUCTOR CTOR, return the element values as a vector. */ 4623 /* Given a CONSTRUCTOR CTOR, return the element values as a vector. */
4376 4624
4377 extern VEC(tree,gc) *ctor_to_vec (tree); 4625 extern VEC(tree,gc) *ctor_to_vec (tree);
4378 4626
4441 4689
4442 /* Return which tree structure is used by T. */ 4690 /* Return which tree structure is used by T. */
4443 4691
4444 enum tree_node_structure_enum tree_node_structure (const_tree); 4692 enum tree_node_structure_enum tree_node_structure (const_tree);
4445 4693
4446 /* Return 1 if EXP contains a PLACEHOLDER_EXPR; i.e., if it represents a size 4694 /* Return true if EXP contains a PLACEHOLDER_EXPR, i.e. if it represents a
4447 or offset that depends on a field within a record. 4695 size or offset that depends on a field within a record. */
4448
4449 Note that we only allow such expressions within simple arithmetic
4450 or a COND_EXPR. */
4451 4696
4452 extern bool contains_placeholder_p (const_tree); 4697 extern bool contains_placeholder_p (const_tree);
4453 4698
4454 /* This macro calls the above function but short-circuits the common 4699 /* This macro calls the above function but short-circuits the common
4455 case of a constant to save time. Also check for null. */ 4700 case of a constant to save time. Also check for null. */
4456 4701
4457 #define CONTAINS_PLACEHOLDER_P(EXP) \ 4702 #define CONTAINS_PLACEHOLDER_P(EXP) \
4458 ((EXP) != 0 && ! TREE_CONSTANT (EXP) && contains_placeholder_p (EXP)) 4703 ((EXP) != 0 && ! TREE_CONSTANT (EXP) && contains_placeholder_p (EXP))
4459 4704
4460 /* Return 1 if any part of the computation of TYPE involves a PLACEHOLDER_EXPR. 4705 /* Return true if any part of the structure of TYPE involves a PLACEHOLDER_EXPR
4461 This includes size, bounds, qualifiers (for QUAL_UNION_TYPE) and field 4706 directly. This includes size, bounds, qualifiers (for QUAL_UNION_TYPE) and
4462 positions. */ 4707 field positions. */
4463 4708
4464 extern bool type_contains_placeholder_p (tree); 4709 extern bool type_contains_placeholder_p (tree);
4465 4710
4466 /* Given a tree EXP, find all occurences of references to fields 4711 /* Given a tree EXP, find all occurences of references to fields
4467 in a PLACEHOLDER_EXPR and place them in vector REFS without 4712 in a PLACEHOLDER_EXPR and place them in vector REFS without
4627 /* Nonzero means a FUNC_BEGIN label was emitted. */ 4872 /* Nonzero means a FUNC_BEGIN label was emitted. */
4628 extern GTY(()) const char * current_function_func_begin_label; 4873 extern GTY(()) const char * current_function_func_begin_label;
4629 4874
4630 /* Iterator for going through the function arguments. */ 4875 /* Iterator for going through the function arguments. */
4631 typedef struct { 4876 typedef struct {
4632 tree fntype; /* function type declaration */
4633 tree next; /* TREE_LIST pointing to the next argument */ 4877 tree next; /* TREE_LIST pointing to the next argument */
4634 } function_args_iterator; 4878 } function_args_iterator;
4635 4879
4636 /* Initialize the iterator I with arguments from function FNDECL */ 4880 /* Initialize the iterator I with arguments from function FNDECL */
4637 4881
4638 static inline void 4882 static inline void
4639 function_args_iter_init (function_args_iterator *i, tree fntype) 4883 function_args_iter_init (function_args_iterator *i, const_tree fntype)
4640 { 4884 {
4641 i->fntype = fntype;
4642 i->next = TYPE_ARG_TYPES (fntype); 4885 i->next = TYPE_ARG_TYPES (fntype);
4643 } 4886 }
4644 4887
4645 /* Return a pointer that holds the next argument if there are more arguments to 4888 /* Return a pointer that holds the next argument if there are more arguments to
4646 handle, otherwise return NULL. */ 4889 handle, otherwise return NULL. */
4700 extern tree get_file_function_name (const char *); 4943 extern tree get_file_function_name (const char *);
4701 extern tree get_callee_fndecl (const_tree); 4944 extern tree get_callee_fndecl (const_tree);
4702 extern int type_num_arguments (const_tree); 4945 extern int type_num_arguments (const_tree);
4703 extern bool associative_tree_code (enum tree_code); 4946 extern bool associative_tree_code (enum tree_code);
4704 extern bool commutative_tree_code (enum tree_code); 4947 extern bool commutative_tree_code (enum tree_code);
4948 extern bool commutative_ternary_tree_code (enum tree_code);
4705 extern tree upper_bound_in_type (tree, tree); 4949 extern tree upper_bound_in_type (tree, tree);
4706 extern tree lower_bound_in_type (tree, tree); 4950 extern tree lower_bound_in_type (tree, tree);
4707 extern int operand_equal_for_phi_arg_p (const_tree, const_tree); 4951 extern int operand_equal_for_phi_arg_p (const_tree, const_tree);
4708 extern tree call_expr_arg (tree, int); 4952 extern tree call_expr_arg (tree, int);
4709 extern tree *call_expr_argp (tree, int); 4953 extern tree *call_expr_argp (tree, int);
4710 extern tree call_expr_arglist (tree);
4711 extern tree create_artificial_label (location_t); 4954 extern tree create_artificial_label (location_t);
4712 extern const char *get_name (tree); 4955 extern const char *get_name (tree);
4713 extern bool stdarg_p (tree); 4956 extern bool stdarg_p (const_tree);
4714 extern bool prototype_p (tree); 4957 extern bool prototype_p (tree);
4958 extern bool is_typedef_decl (tree x);
4959 extern bool typedef_variant_p (tree);
4715 extern bool auto_var_in_fn_p (const_tree, const_tree); 4960 extern bool auto_var_in_fn_p (const_tree, const_tree);
4716 extern tree build_low_bits_mask (tree, unsigned); 4961 extern tree build_low_bits_mask (tree, unsigned);
4717 extern tree tree_strip_nop_conversions (tree); 4962 extern tree tree_strip_nop_conversions (tree);
4718 extern tree tree_strip_sign_nop_conversions (tree); 4963 extern tree tree_strip_sign_nop_conversions (tree);
4719 extern tree lhd_gcc_personality (void); 4964 extern tree lhd_gcc_personality (void);
4965 extern void assign_assembler_name_if_neeeded (tree);
4966 extern void warn_deprecated_use (tree, tree);
4967
4720 4968
4721 /* In cgraph.c */ 4969 /* In cgraph.c */
4722 extern void change_decl_assembler_name (tree, tree); 4970 extern void change_decl_assembler_name (tree, tree);
4723 4971
4724 /* In gimplify.c */ 4972 /* In gimplify.c */
4804 extern tree fold_indirect_ref_1 (location_t, tree, tree); 5052 extern tree fold_indirect_ref_1 (location_t, tree, tree);
4805 extern void fold_defer_overflow_warnings (void); 5053 extern void fold_defer_overflow_warnings (void);
4806 extern void fold_undefer_overflow_warnings (bool, const_gimple, int); 5054 extern void fold_undefer_overflow_warnings (bool, const_gimple, int);
4807 extern void fold_undefer_and_ignore_overflow_warnings (void); 5055 extern void fold_undefer_and_ignore_overflow_warnings (void);
4808 extern bool fold_deferring_overflow_warnings_p (void); 5056 extern bool fold_deferring_overflow_warnings_p (void);
4809 5057 extern tree fold_fma (location_t, tree, tree, tree, tree);
4810 extern tree force_fit_type_double (tree, unsigned HOST_WIDE_INT, HOST_WIDE_INT,
4811 int, bool);
4812
4813 extern int fit_double_type (unsigned HOST_WIDE_INT, HOST_WIDE_INT,
4814 unsigned HOST_WIDE_INT *, HOST_WIDE_INT *, const_tree);
4815 extern int add_double_with_sign (unsigned HOST_WIDE_INT, HOST_WIDE_INT,
4816 unsigned HOST_WIDE_INT, HOST_WIDE_INT,
4817 unsigned HOST_WIDE_INT *, HOST_WIDE_INT *,
4818 bool);
4819 #define add_double(l1,h1,l2,h2,lv,hv) \
4820 add_double_with_sign (l1, h1, l2, h2, lv, hv, false)
4821 extern int neg_double (unsigned HOST_WIDE_INT, HOST_WIDE_INT,
4822 unsigned HOST_WIDE_INT *, HOST_WIDE_INT *);
4823 extern int mul_double_with_sign (unsigned HOST_WIDE_INT, HOST_WIDE_INT,
4824 unsigned HOST_WIDE_INT, HOST_WIDE_INT,
4825 unsigned HOST_WIDE_INT *, HOST_WIDE_INT *,
4826 bool);
4827 #define mul_double(l1,h1,l2,h2,lv,hv) \
4828 mul_double_with_sign (l1, h1, l2, h2, lv, hv, false)
4829 extern void lshift_double (unsigned HOST_WIDE_INT, HOST_WIDE_INT,
4830 HOST_WIDE_INT, unsigned int,
4831 unsigned HOST_WIDE_INT *, HOST_WIDE_INT *, int);
4832 extern void rshift_double (unsigned HOST_WIDE_INT, HOST_WIDE_INT,
4833 HOST_WIDE_INT, unsigned int,
4834 unsigned HOST_WIDE_INT *, HOST_WIDE_INT *, int);
4835 extern void lrotate_double (unsigned HOST_WIDE_INT, HOST_WIDE_INT,
4836 HOST_WIDE_INT, unsigned int,
4837 unsigned HOST_WIDE_INT *, HOST_WIDE_INT *);
4838 extern void rrotate_double (unsigned HOST_WIDE_INT, HOST_WIDE_INT,
4839 HOST_WIDE_INT, unsigned int,
4840 unsigned HOST_WIDE_INT *, HOST_WIDE_INT *);
4841
4842 extern int div_and_round_double (enum tree_code, int, unsigned HOST_WIDE_INT,
4843 HOST_WIDE_INT, unsigned HOST_WIDE_INT,
4844 HOST_WIDE_INT, unsigned HOST_WIDE_INT *,
4845 HOST_WIDE_INT *, unsigned HOST_WIDE_INT *,
4846 HOST_WIDE_INT *);
4847 5058
4848 enum operand_equal_flag 5059 enum operand_equal_flag
4849 { 5060 {
4850 OEP_ONLY_CONST = 1, 5061 OEP_ONLY_CONST = 1,
4851 OEP_PURE_SAME = 2 5062 OEP_PURE_SAME = 2
4879 build_fold_indirect_ref_loc (UNKNOWN_LOCATION, T) 5090 build_fold_indirect_ref_loc (UNKNOWN_LOCATION, T)
4880 extern tree build_fold_indirect_ref_loc (location_t, tree); 5091 extern tree build_fold_indirect_ref_loc (location_t, tree);
4881 #define fold_indirect_ref(T)\ 5092 #define fold_indirect_ref(T)\
4882 fold_indirect_ref_loc (UNKNOWN_LOCATION, T) 5093 fold_indirect_ref_loc (UNKNOWN_LOCATION, T)
4883 extern tree fold_indirect_ref_loc (location_t, tree); 5094 extern tree fold_indirect_ref_loc (location_t, tree);
5095 extern tree build_simple_mem_ref_loc (location_t, tree);
5096 #define build_simple_mem_ref(T)\
5097 build_simple_mem_ref_loc (UNKNOWN_LOCATION, T)
5098 extern double_int mem_ref_offset (const_tree);
5099 extern tree reference_alias_ptr_type (const_tree);
4884 extern tree constant_boolean_node (int, tree); 5100 extern tree constant_boolean_node (int, tree);
4885 extern tree div_if_zero_remainder (enum tree_code, const_tree, const_tree); 5101 extern tree div_if_zero_remainder (enum tree_code, const_tree, const_tree);
4886 5102
4887 extern bool tree_swap_operands_p (const_tree, const_tree, bool); 5103 extern bool tree_swap_operands_p (const_tree, const_tree, bool);
4888 extern enum tree_code swap_tree_comparison (enum tree_code); 5104 extern enum tree_code swap_tree_comparison (enum tree_code);
4931 enum built_in_function); 5147 enum built_in_function);
4932 extern tree fold_builtin_strncpy_chk (location_t, tree, tree, tree, tree, tree); 5148 extern tree fold_builtin_strncpy_chk (location_t, tree, tree, tree, tree, tree);
4933 extern tree fold_builtin_snprintf_chk (location_t, tree, tree, enum built_in_function); 5149 extern tree fold_builtin_snprintf_chk (location_t, tree, tree, enum built_in_function);
4934 extern bool fold_builtin_next_arg (tree, bool); 5150 extern bool fold_builtin_next_arg (tree, bool);
4935 extern enum built_in_function builtin_mathfn_code (const_tree); 5151 extern enum built_in_function builtin_mathfn_code (const_tree);
4936 extern tree build_function_call_expr (location_t, tree, tree);
4937 extern tree fold_builtin_call_array (location_t, tree, tree, int, tree *); 5152 extern tree fold_builtin_call_array (location_t, tree, tree, int, tree *);
4938 #define build_call_expr(...)\ 5153 extern tree build_call_expr_loc_array (location_t, tree, int, tree *);
4939 build_call_expr_loc (UNKNOWN_LOCATION, __VA_ARGS__) 5154 extern tree build_call_expr_loc_vec (location_t, tree, VEC(tree,gc) *);
4940 extern tree build_call_expr_loc (location_t, tree, int, ...); 5155 extern tree build_call_expr_loc (location_t, tree, int, ...);
5156 extern tree build_call_expr (tree, int, ...);
4941 extern tree mathfn_built_in (tree, enum built_in_function fn); 5157 extern tree mathfn_built_in (tree, enum built_in_function fn);
4942 extern tree c_strlen (tree, int); 5158 extern tree c_strlen (tree, int);
4943 extern tree std_gimplify_va_arg_expr (tree, tree, gimple_seq *, gimple_seq *); 5159 extern tree std_gimplify_va_arg_expr (tree, tree, gimple_seq *, gimple_seq *);
4944 extern tree build_va_arg_indirect_ref (tree); 5160 extern tree build_va_arg_indirect_ref (tree);
4945 extern tree build_string_literal (int, const char *); 5161 extern tree build_string_literal (int, const char *);
4946 extern bool validate_arglist (const_tree, ...); 5162 extern bool validate_arglist (const_tree, ...);
4947 extern rtx builtin_memset_read_str (void *, HOST_WIDE_INT, enum machine_mode); 5163 extern rtx builtin_memset_read_str (void *, HOST_WIDE_INT, enum machine_mode);
4948 extern bool can_trust_pointer_alignment (void); 5164 extern bool can_trust_pointer_alignment (void);
4949 extern int get_pointer_alignment (tree, unsigned int); 5165 extern unsigned int get_pointer_alignment (tree, unsigned int);
4950 extern bool is_builtin_name (const char *); 5166 extern bool is_builtin_name (const char *);
4951 extern bool is_builtin_fn (tree); 5167 extern bool is_builtin_fn (tree);
4952 extern int get_object_alignment (tree, unsigned int, unsigned int); 5168 extern unsigned int get_object_alignment (tree, unsigned int);
4953 extern tree fold_call_stmt (gimple, bool); 5169 extern tree fold_call_stmt (gimple, bool);
4954 extern tree gimple_fold_builtin_snprintf_chk (gimple, tree, enum built_in_function); 5170 extern tree gimple_fold_builtin_snprintf_chk (gimple, tree, enum built_in_function);
4955 extern tree make_range (tree, int *, tree *, tree *, bool *); 5171 extern tree make_range (tree, int *, tree *, tree *, bool *);
4956 extern tree build_range_check (location_t, tree, tree, int, tree, tree); 5172 extern tree build_range_check (location_t, tree, tree, int, tree, tree);
4957 extern bool merge_ranges (int *, tree *, tree *, int, tree, tree, int, 5173 extern bool merge_ranges (int *, tree *, tree *, int, tree, tree, int,
4958 tree, tree); 5174 tree, tree);
4959 extern void set_builtin_user_assembler_name (tree decl, const char *asmspec); 5175 extern void set_builtin_user_assembler_name (tree decl, const char *asmspec);
5176 extern bool is_simple_builtin (tree);
5177 extern bool is_inexpensive_builtin (tree);
4960 5178
4961 /* In convert.c */ 5179 /* In convert.c */
4962 extern tree strip_float_extensions (tree); 5180 extern tree strip_float_extensions (tree);
4963 5181
4964 /* In tree.c */ 5182 /* In tree.c */
4965 extern int really_constant_p (const_tree); 5183 extern int really_constant_p (const_tree);
4966 extern bool decl_address_invariant_p (const_tree); 5184 extern bool decl_address_invariant_p (const_tree);
4967 extern bool decl_address_ip_invariant_p (const_tree); 5185 extern bool decl_address_ip_invariant_p (const_tree);
4968 extern int int_fits_type_p (const_tree, const_tree); 5186 extern bool int_fits_type_p (const_tree, const_tree);
4969 #ifndef GENERATOR_FILE 5187 #ifndef GENERATOR_FILE
4970 extern void get_type_static_bounds (const_tree, mpz_t, mpz_t); 5188 extern void get_type_static_bounds (const_tree, mpz_t, mpz_t);
4971 #endif 5189 #endif
4972 extern bool variably_modified_type_p (tree, tree); 5190 extern bool variably_modified_type_p (tree, tree);
4973 extern int tree_log2 (const_tree); 5191 extern int tree_log2 (const_tree);
4992 5210
4993 extern int real_onep (const_tree); 5211 extern int real_onep (const_tree);
4994 extern int real_twop (const_tree); 5212 extern int real_twop (const_tree);
4995 extern int real_minus_onep (const_tree); 5213 extern int real_minus_onep (const_tree);
4996 extern void init_ttree (void); 5214 extern void init_ttree (void);
4997 extern void build_common_tree_nodes (bool, bool); 5215 extern void build_common_tree_nodes (bool);
4998 extern void build_common_tree_nodes_2 (int); 5216 extern void build_common_tree_nodes_2 (int);
4999 extern void build_common_builtin_nodes (void); 5217 extern void build_common_builtin_nodes (void);
5000 extern tree build_nonstandard_integer_type (unsigned HOST_WIDE_INT, int); 5218 extern tree build_nonstandard_integer_type (unsigned HOST_WIDE_INT, int);
5001 extern tree build_range_type (tree, tree, tree); 5219 extern tree build_range_type (tree, tree, tree);
5220 extern tree build_nonshared_range_type (tree, tree, tree);
5002 extern bool subrange_type_for_debug_p (const_tree, tree *, tree *); 5221 extern bool subrange_type_for_debug_p (const_tree, tree *, tree *);
5003 extern HOST_WIDE_INT int_cst_value (const_tree); 5222 extern HOST_WIDE_INT int_cst_value (const_tree);
5004 extern HOST_WIDEST_INT widest_int_cst_value (const_tree); 5223 extern HOST_WIDEST_INT widest_int_cst_value (const_tree);
5005 5224
5006 extern bool fields_compatible_p (const_tree, const_tree); 5225 extern bool fields_compatible_p (const_tree, const_tree);
5009 extern tree *tree_block (tree); 5228 extern tree *tree_block (tree);
5010 extern location_t *block_nonartificial_location (tree); 5229 extern location_t *block_nonartificial_location (tree);
5011 extern location_t tree_nonartificial_location (tree); 5230 extern location_t tree_nonartificial_location (tree);
5012 5231
5013 extern tree block_ultimate_origin (const_tree); 5232 extern tree block_ultimate_origin (const_tree);
5233
5234 extern tree get_binfo_at_offset (tree, HOST_WIDE_INT, tree);
5014 5235
5015 /* In tree-nested.c */ 5236 /* In tree-nested.c */
5016 extern tree build_addr (tree, tree); 5237 extern tree build_addr (tree, tree);
5017 5238
5018 /* In function.c */ 5239 /* In function.c */
5044 extern void print_rtl (FILE *, const_rtx); 5265 extern void print_rtl (FILE *, const_rtx);
5045 #endif 5266 #endif
5046 5267
5047 /* In print-tree.c */ 5268 /* In print-tree.c */
5048 extern void debug_tree (tree); 5269 extern void debug_tree (tree);
5270 extern void debug_vec_tree (VEC(tree,gc) *);
5049 #ifdef BUFSIZ 5271 #ifdef BUFSIZ
5050 extern void dump_addr (FILE*, const char *, const void *); 5272 extern void dump_addr (FILE*, const char *, const void *);
5051 extern void print_node (FILE *, const char *, tree, int); 5273 extern void print_node (FILE *, const char *, tree, int);
5274 extern void print_vec_tree (FILE *, const char *, VEC(tree,gc) *, int);
5052 extern void print_node_brief (FILE *, const char *, const_tree, int); 5275 extern void print_node_brief (FILE *, const char *, const_tree, int);
5053 extern void indent_to (FILE *, int); 5276 extern void indent_to (FILE *, int);
5054 #endif 5277 #endif
5055 5278
5056 /* In tree-inline.c: */ 5279 /* In tree-inline.c: */
5088 /* Nonzero if this call replaces the current stack frame. */ 5311 /* Nonzero if this call replaces the current stack frame. */
5089 #define ECF_SIBCALL (1 << 8) 5312 #define ECF_SIBCALL (1 << 8)
5090 /* Function does not read or write memory (but may have side effects, so 5313 /* Function does not read or write memory (but may have side effects, so
5091 it does not necessarily fit ECF_CONST). */ 5314 it does not necessarily fit ECF_CONST). */
5092 #define ECF_NOVOPS (1 << 9) 5315 #define ECF_NOVOPS (1 << 9)
5316 /* The function does not lead to calls within current function unit. */
5317 #define ECF_LEAF (1 << 10)
5093 5318
5094 extern int flags_from_decl_or_type (const_tree); 5319 extern int flags_from_decl_or_type (const_tree);
5095 extern int call_expr_flags (const_tree); 5320 extern int call_expr_flags (const_tree);
5321
5322 /* Call argument flags. */
5323
5324 /* Nonzero if the argument is not dereferenced recursively, thus only
5325 directly reachable memory is read or written. */
5326 #define EAF_DIRECT (1 << 0)
5327 /* Nonzero if memory reached by the argument is not clobbered. */
5328 #define EAF_NOCLOBBER (1 << 1)
5329 /* Nonzero if the argument does not escape. */
5330 #define EAF_NOESCAPE (1 << 2)
5331 /* Nonzero if the argument is not used by the function. */
5332 #define EAF_UNUSED (1 << 3)
5333
5334 /* Call return flags. */
5335
5336 /* Mask for the argument number that is returned. Lower two bits of
5337 the return flags, encodes argument slots zero to three. */
5338 #define ERF_RETURN_ARG_MASK (3)
5339 /* Nonzero if the return value is equal to the argument number
5340 flags & ERF_RETURN_ARG_MASK. */
5341 #define ERF_RETURNS_ARG (1 << 2)
5342 /* Nonzero if the return value does not alias with anything. Functions
5343 with the malloc attribute have this set on their return value. */
5344 #define ERF_NOALIAS (1 << 3)
5096 5345
5097 extern int setjmp_call_p (const_tree); 5346 extern int setjmp_call_p (const_tree);
5098 extern bool gimple_alloca_call_p (const_gimple); 5347 extern bool gimple_alloca_call_p (const_gimple);
5099 extern bool alloca_call_p (const_tree); 5348 extern bool alloca_call_p (const_tree);
5100 extern bool must_pass_in_stack_var_size (enum machine_mode, const_tree); 5349 extern bool must_pass_in_stack_var_size (enum machine_mode, const_tree);
5101 extern bool must_pass_in_stack_var_size_or_pad (enum machine_mode, const_tree); 5350 extern bool must_pass_in_stack_var_size_or_pad (enum machine_mode, const_tree);
5102 5351
5103 /* In attribs.c. */ 5352 /* In attribs.c. */
5104 5353
5105 extern const struct attribute_spec *lookup_attribute_spec (tree); 5354 extern const struct attribute_spec *lookup_attribute_spec (const_tree);
5106 5355
5107 /* Process the attributes listed in ATTRIBUTES and install them in *NODE, 5356 /* Process the attributes listed in ATTRIBUTES and install them in *NODE,
5108 which is either a DECL (including a TYPE_DECL) or a TYPE. If a DECL, 5357 which is either a DECL (including a TYPE_DECL) or a TYPE. If a DECL,
5109 it should be modified in place; if a TYPE, a copy should be created 5358 it should be modified in place; if a TYPE, a copy should be created
5110 unless ATTR_FLAG_TYPE_IN_PLACE is set in FLAGS. FLAGS gives further 5359 unless ATTR_FLAG_TYPE_IN_PLACE is set in FLAGS. FLAGS gives further
5123 extern void fixup_signed_type (tree); 5372 extern void fixup_signed_type (tree);
5124 extern void internal_reference_types (void); 5373 extern void internal_reference_types (void);
5125 extern unsigned int update_alignment_for_field (record_layout_info, tree, 5374 extern unsigned int update_alignment_for_field (record_layout_info, tree,
5126 unsigned int); 5375 unsigned int);
5127 /* varasm.c */ 5376 /* varasm.c */
5377 extern tree tree_output_constant_def (tree);
5128 extern void make_decl_rtl (tree); 5378 extern void make_decl_rtl (tree);
5379 extern rtx make_decl_rtl_for_debug (tree);
5129 extern void make_decl_one_only (tree, tree); 5380 extern void make_decl_one_only (tree, tree);
5130 extern int supports_one_only (void); 5381 extern int supports_one_only (void);
5131 extern void resolve_unique_section (tree, int, int); 5382 extern void resolve_unique_section (tree, int, int);
5132 extern void mark_referenced (tree); 5383 extern void mark_referenced (tree);
5133 extern void mark_decl_referenced (tree); 5384 extern void mark_decl_referenced (tree);
5134 extern void notice_global_symbol (tree); 5385 extern void notice_global_symbol (tree);
5135 extern void set_user_assembler_name (tree, const char *); 5386 extern void set_user_assembler_name (tree, const char *);
5136 extern void process_pending_assemble_externals (void); 5387 extern void process_pending_assemble_externals (void);
5137 extern void finish_aliases_1 (void); 5388 extern void finish_aliases_1 (void);
5138 extern void finish_aliases_2 (void); 5389 extern void finish_aliases_2 (void);
5139 extern tree emutls_decl (tree);
5140 extern void remove_unreachable_alias_pairs (void); 5390 extern void remove_unreachable_alias_pairs (void);
5391 extern bool decl_replaceable_p (tree);
5392 extern bool decl_binds_to_current_def_p (tree);
5393
5394 /* Derived type for use by compute_visible_aliases and callers. A symbol
5395 alias set is a pointer set into which we enter IDENTIFIER_NODES bearing
5396 the canonicalised assembler-level symbol names corresponding to decls
5397 and their aliases. */
5398 typedef struct pointer_set_t symbol_alias_set_t;
5399
5400 extern void symbol_alias_set_destroy (symbol_alias_set_t *);
5401 extern int symbol_alias_set_contains (const symbol_alias_set_t *, tree);
5402 extern symbol_alias_set_t * propagate_aliases_backward (bool (*)
5403 (tree, tree, void *),
5404 void *);
5141 5405
5142 /* In stmt.c */ 5406 /* In stmt.c */
5143 extern void expand_computed_goto (tree); 5407 extern void expand_computed_goto (tree);
5144 extern bool parse_output_constraint (const char **, int, int, int, 5408 extern bool parse_output_constraint (const char **, int, int, int,
5145 bool *, bool *, bool *); 5409 bool *, bool *, bool *);
5146 extern bool parse_input_constraint (const char **, int, int, int, int, 5410 extern bool parse_input_constraint (const char **, int, int, int, int,
5147 const char * const *, bool *, bool *); 5411 const char * const *, bool *, bool *);
5148 extern void expand_asm_stmt (gimple); 5412 extern void expand_asm_stmt (gimple);
5149 extern tree resolve_asm_operand_names (tree, tree, tree, tree); 5413 extern tree resolve_asm_operand_names (tree, tree, tree, tree);
5414 extern bool expand_switch_using_bit_tests_p (tree, tree, unsigned int,
5415 unsigned int);
5150 extern void expand_case (gimple); 5416 extern void expand_case (gimple);
5151 extern void expand_decl (tree); 5417 extern void expand_decl (tree);
5152 #ifdef HARD_CONST 5418 #ifdef HARD_CONST
5153 /* Silly ifdef to avoid having all includers depend on hard-reg-set.h. */ 5419 /* Silly ifdef to avoid having all includers depend on hard-reg-set.h. */
5154 extern tree tree_overlaps_hard_reg_set (tree, HARD_REG_SET *); 5420 extern tree tree_overlaps_hard_reg_set (tree, HARD_REG_SET *);
5226 s_kind, 5492 s_kind,
5227 r_kind, 5493 r_kind,
5228 e_kind, 5494 e_kind,
5229 c_kind, 5495 c_kind,
5230 id_kind, 5496 id_kind,
5231 perm_list_kind,
5232 temp_list_kind,
5233 vec_kind, 5497 vec_kind,
5234 binfo_kind, 5498 binfo_kind,
5235 ssa_name_kind, 5499 ssa_name_kind,
5236 constr_kind, 5500 constr_kind,
5237 x_kind, 5501 x_kind,
5251 5515
5252 /* In gimple.c. */ 5516 /* In gimple.c. */
5253 extern tree get_base_address (tree t); 5517 extern tree get_base_address (tree t);
5254 extern void mark_addressable (tree); 5518 extern void mark_addressable (tree);
5255 5519
5256 /* In tree-vectorizer.c. */
5257 extern void vect_set_verbosity_level (const char *);
5258
5259 /* In tree.c. */ 5520 /* In tree.c. */
5260 5521
5261 struct GTY(()) tree_map_base { 5522 struct GTY(()) tree_map_base {
5262 tree from; 5523 tree from;
5263 }; 5524 };
5277 5538
5278 #define tree_map_eq tree_map_base_eq 5539 #define tree_map_eq tree_map_base_eq
5279 extern unsigned int tree_map_hash (const void *); 5540 extern unsigned int tree_map_hash (const void *);
5280 #define tree_map_marked_p tree_map_base_marked_p 5541 #define tree_map_marked_p tree_map_base_marked_p
5281 5542
5543 /* Map from a decl tree to another tree. */
5544
5545 struct GTY(()) tree_decl_map {
5546 struct tree_map_base base;
5547 tree to;
5548 };
5549
5550 #define tree_decl_map_eq tree_map_base_eq
5551 extern unsigned int tree_decl_map_hash (const void *);
5552 #define tree_decl_map_marked_p tree_map_base_marked_p
5553
5282 /* Map from a tree to an int. */ 5554 /* Map from a tree to an int. */
5283 5555
5284 struct GTY(()) tree_int_map { 5556 struct GTY(()) tree_int_map {
5285 struct tree_map_base base; 5557 struct tree_map_base base;
5286 unsigned int to; 5558 unsigned int to;
5304 5576
5305 /* In tree-ssa.c */ 5577 /* In tree-ssa.c */
5306 5578
5307 tree target_for_debug_bind (tree); 5579 tree target_for_debug_bind (tree);
5308 5580
5309 /* In tree-ssa-ccp.c */
5310 extern tree maybe_fold_offset_to_reference (location_t, tree, tree, tree);
5311 extern tree maybe_fold_offset_to_address (location_t, tree, tree, tree);
5312 extern tree maybe_fold_stmt_addition (location_t, tree, tree, tree);
5313
5314 /* In tree-ssa-address.c. */ 5581 /* In tree-ssa-address.c. */
5315 extern tree tree_mem_ref_addr (tree, tree); 5582 extern tree tree_mem_ref_addr (tree, tree);
5316 extern void copy_mem_ref_info (tree, tree); 5583 extern void copy_mem_ref_info (tree, tree);
5317 5584
5318 /* In tree-vrp.c */ 5585 /* In tree-vrp.c */
5328 extern tree build_personality_function (const char *); 5595 extern tree build_personality_function (const char *);
5329 5596
5330 /* In tree-inline.c. */ 5597 /* In tree-inline.c. */
5331 5598
5332 void init_inline_once (void); 5599 void init_inline_once (void);
5333
5334 /* In ipa-reference.c. Used for parsing attributes of asm code. */
5335 extern GTY(()) tree memory_identifier_string;
5336 5600
5337 /* Compute the number of operands in an expression node NODE. For 5601 /* Compute the number of operands in an expression node NODE. For
5338 tcc_vl_exp nodes like CALL_EXPRs, this is stored in the node itself, 5602 tcc_vl_exp nodes like CALL_EXPRs, this is stored in the node itself,
5339 otherwise it is looked up from the node's code. */ 5603 otherwise it is looked up from the node's code. */
5340 static inline int 5604 static inline int
5349 /* Abstract iterators for CALL_EXPRs. These static inline definitions 5613 /* Abstract iterators for CALL_EXPRs. These static inline definitions
5350 have to go towards the end of tree.h so that union tree_node is fully 5614 have to go towards the end of tree.h so that union tree_node is fully
5351 defined by this point. */ 5615 defined by this point. */
5352 5616
5353 /* Structure containing iterator state. */ 5617 /* Structure containing iterator state. */
5354 typedef struct GTY (()) call_expr_arg_iterator_d { 5618 typedef struct call_expr_arg_iterator_d {
5355 tree t; /* the call_expr */ 5619 tree t; /* the call_expr */
5356 int n; /* argument count */ 5620 int n; /* argument count */
5357 int i; /* next argument index */ 5621 int i; /* next argument index */
5358 } call_expr_arg_iterator; 5622 } call_expr_arg_iterator;
5359 5623
5360 typedef struct GTY (()) const_call_expr_arg_iterator_d { 5624 typedef struct const_call_expr_arg_iterator_d {
5361 const_tree t; /* the call_expr */ 5625 const_tree t; /* the call_expr */
5362 int n; /* argument count */ 5626 int n; /* argument count */
5363 int i; /* next argument index */ 5627 int i; /* next argument index */
5364 } const_call_expr_arg_iterator; 5628 } const_call_expr_arg_iterator;
5365 5629
5452 is_lang_specific (tree t) 5716 is_lang_specific (tree t)
5453 { 5717 {
5454 return TREE_CODE (t) == LANG_TYPE || TREE_CODE (t) >= NUM_TREE_CODES; 5718 return TREE_CODE (t) == LANG_TYPE || TREE_CODE (t) >= NUM_TREE_CODES;
5455 } 5719 }
5456 5720
5721 /* In gimple-low.c. */
5722 extern bool block_may_fallthru (const_tree);
5723
5457 #endif /* GCC_TREE_H */ 5724 #endif /* GCC_TREE_H */