Mercurial > hg > CbC > CbC_gcc
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 */ |