gcc/ada/
[official-gcc.git] / gcc / ada / gcc-interface / ada-tree.h
blobba5765d0dbaa3aff0b268a2156d0034e8df7b912
1 /****************************************************************************
2 * *
3 * GNAT COMPILER COMPONENTS *
4 * *
5 * A D A - T R E E *
6 * *
7 * C Header File *
8 * *
9 * Copyright (C) 1992-2014, Free Software Foundation, Inc. *
10 * *
11 * GNAT is free software; you can redistribute it and/or modify it under *
12 * terms of the GNU General Public License as published by the Free Soft- *
13 * ware Foundation; either version 3, or (at your option) any later ver- *
14 * sion. GNAT is distributed in the hope that it will be useful, but WITH- *
15 * OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY *
16 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License *
17 * for more details. You should have received a copy of the GNU General *
18 * Public License along with GCC; see the file COPYING3. If not see *
19 * <http://www.gnu.org/licenses/>. *
20 * *
21 * GNAT was originally developed by the GNAT team at New York University. *
22 * Extensive contributions were provided by Ada Core Technologies Inc. *
23 * *
24 ****************************************************************************/
26 /* The resulting tree type. */
27 union GTY((desc ("0"),
28 chain_next ("CODE_CONTAINS_STRUCT (TREE_CODE (&%h.generic), TS_COMMON) ? ((union lang_tree_node *) TREE_CHAIN (&%h.generic)) : NULL")))
29 lang_tree_node
31 union tree_node GTY((tag ("0"),
32 desc ("tree_node_structure (&%h)"))) generic;
35 /* Ada uses the lang_decl and lang_type fields to hold a tree. */
36 struct GTY(()) lang_type { tree t; };
37 struct GTY(()) lang_decl { tree t; };
39 /* Macros to get and set the tree in TYPE_LANG_SPECIFIC. */
40 #define GET_TYPE_LANG_SPECIFIC(NODE) \
41 (TYPE_LANG_SPECIFIC (NODE) ? TYPE_LANG_SPECIFIC (NODE)->t : NULL_TREE)
43 #define SET_TYPE_LANG_SPECIFIC(NODE, X) \
44 do { \
45 tree tmp = (X); \
46 if (!TYPE_LANG_SPECIFIC (NODE)) \
47 TYPE_LANG_SPECIFIC (NODE) \
48 = ggc_alloc<struct lang_type> (); \
49 TYPE_LANG_SPECIFIC (NODE)->t = tmp; \
50 } while (0)
52 /* Macros to get and set the tree in DECL_LANG_SPECIFIC. */
53 #define GET_DECL_LANG_SPECIFIC(NODE) \
54 (DECL_LANG_SPECIFIC (NODE) ? DECL_LANG_SPECIFIC (NODE)->t : NULL_TREE)
56 #define SET_DECL_LANG_SPECIFIC(NODE, X) \
57 do { \
58 tree tmp = (X); \
59 if (!DECL_LANG_SPECIFIC (NODE)) \
60 DECL_LANG_SPECIFIC (NODE) \
61 = ggc_alloc<struct lang_decl> (); \
62 DECL_LANG_SPECIFIC (NODE)->t = tmp; \
63 } while (0)
66 /* Flags added to type nodes. */
68 /* For RECORD_TYPE, UNION_TYPE, and QUAL_UNION_TYPE, nonzero if this is a
69 record being used as a fat pointer (only true for RECORD_TYPE). */
70 #define TYPE_FAT_POINTER_P(NODE) \
71 TYPE_LANG_FLAG_0 (RECORD_OR_UNION_CHECK (NODE))
73 #define TYPE_IS_FAT_POINTER_P(NODE) \
74 (TREE_CODE (NODE) == RECORD_TYPE && TYPE_FAT_POINTER_P (NODE))
76 /* For integral types and array types, nonzero if this is a packed array type
77 used for bit-packed types. Such types should not be extended to a larger
78 size or validated against a specified size. */
79 #define TYPE_PACKED_ARRAY_TYPE_P(NODE) \
80 TYPE_LANG_FLAG_0 (TREE_CHECK2 (NODE, INTEGER_TYPE, ARRAY_TYPE))
82 #define TYPE_IS_PACKED_ARRAY_TYPE_P(NODE) \
83 ((TREE_CODE (NODE) == INTEGER_TYPE || TREE_CODE (NODE) == ARRAY_TYPE) \
84 && TYPE_PACKED_ARRAY_TYPE_P (NODE))
86 /* For INTEGER_TYPE, nonzero if this is a modular type with a modulus that
87 is not equal to two to the power of its mode's size. */
88 #define TYPE_MODULAR_P(NODE) TYPE_LANG_FLAG_1 (INTEGER_TYPE_CHECK (NODE))
90 /* For ARRAY_TYPE, nonzero if this type corresponds to a dimension of
91 an Ada array other than the first. */
92 #define TYPE_MULTI_ARRAY_P(NODE) TYPE_LANG_FLAG_1 (ARRAY_TYPE_CHECK (NODE))
94 /* For FUNCTION_TYPE, nonzero if this denotes a function returning an
95 unconstrained array or record. */
96 #define TYPE_RETURN_UNCONSTRAINED_P(NODE) \
97 TYPE_LANG_FLAG_1 (FUNCTION_TYPE_CHECK (NODE))
99 /* For RECORD_TYPE, UNION_TYPE, and QUAL_UNION_TYPE, nonzero if this denotes
100 a justified modular type (will only be true for RECORD_TYPE). */
101 #define TYPE_JUSTIFIED_MODULAR_P(NODE) \
102 TYPE_LANG_FLAG_1 (RECORD_OR_UNION_CHECK (NODE))
104 /* Nonzero in an arithmetic subtype if this is a subtype not known to the
105 front-end. */
106 #define TYPE_EXTRA_SUBTYPE_P(NODE) TYPE_LANG_FLAG_2 (INTEGER_TYPE_CHECK (NODE))
108 /* Nonzero for an aggregate type if this is a by-reference type. We also
109 set this on an ENUMERAL_TYPE that is dummy. */
110 #define TYPE_BY_REFERENCE_P(NODE) \
111 TYPE_LANG_FLAG_2 (TREE_CHECK5 (NODE, RECORD_TYPE, UNION_TYPE, \
112 ARRAY_TYPE, UNCONSTRAINED_ARRAY_TYPE, \
113 ENUMERAL_TYPE))
115 #define TYPE_IS_BY_REFERENCE_P(NODE) \
116 ((TREE_CODE (NODE) == RECORD_TYPE \
117 || TREE_CODE (NODE) == UNION_TYPE \
118 || TREE_CODE (NODE) == ARRAY_TYPE \
119 || TREE_CODE (NODE) == UNCONSTRAINED_ARRAY_TYPE \
120 || TREE_CODE (NODE) == ENUMERAL_TYPE) \
121 && TYPE_BY_REFERENCE_P (NODE))
123 /* For RECORD_TYPE, UNION_TYPE, and QUAL_UNION_TYPE, nonzero if this is the
124 type for an object whose type includes its template in addition to
125 its value (only true for RECORD_TYPE). */
126 #define TYPE_CONTAINS_TEMPLATE_P(NODE) \
127 TYPE_LANG_FLAG_3 (RECORD_OR_UNION_CHECK (NODE))
129 /* True if NODE is a thin pointer. */
130 #define TYPE_IS_THIN_POINTER_P(NODE) \
131 (POINTER_TYPE_P (NODE) \
132 && TREE_CODE (TREE_TYPE (NODE)) == RECORD_TYPE \
133 && TYPE_CONTAINS_TEMPLATE_P (TREE_TYPE (NODE)))
135 /* True if TYPE is either a fat or thin pointer to an unconstrained
136 array. */
137 #define TYPE_IS_FAT_OR_THIN_POINTER_P(NODE) \
138 (TYPE_IS_FAT_POINTER_P (NODE) || TYPE_IS_THIN_POINTER_P (NODE))
140 /* For INTEGER_TYPEs, nonzero if the type has a biased representation. */
141 #define TYPE_BIASED_REPRESENTATION_P(NODE) \
142 TYPE_LANG_FLAG_4 (INTEGER_TYPE_CHECK (NODE))
144 /* For ARRAY_TYPEs, nonzero if the array type has Convention_Fortran. */
145 #define TYPE_CONVENTION_FORTRAN_P(NODE) \
146 TYPE_LANG_FLAG_4 (ARRAY_TYPE_CHECK (NODE))
148 /* For FUNCTION_TYPEs, nonzero if the function returns by direct reference,
149 i.e. the callee returns a pointer to a memory location it has allocated
150 and the caller only needs to dereference the pointer. */
151 #define TYPE_RETURN_BY_DIRECT_REF_P(NODE) \
152 TYPE_LANG_FLAG_4 (FUNCTION_TYPE_CHECK (NODE))
154 /* For RECORD_TYPE, UNION_TYPE and ENUMERAL_TYPE, nonzero if this is a dummy
155 type, made to correspond to a private or incomplete type. */
156 #define TYPE_DUMMY_P(NODE) \
157 TYPE_LANG_FLAG_4 (TREE_CHECK3 (NODE, RECORD_TYPE, UNION_TYPE, ENUMERAL_TYPE))
159 #define TYPE_IS_DUMMY_P(NODE) \
160 ((TREE_CODE (NODE) == RECORD_TYPE \
161 || TREE_CODE (NODE) == UNION_TYPE \
162 || TREE_CODE (NODE) == ENUMERAL_TYPE) \
163 && TYPE_DUMMY_P (NODE))
165 /* For an INTEGER_TYPE, nonzero if TYPE_ACTUAL_BOUNDS is present. */
166 #define TYPE_HAS_ACTUAL_BOUNDS_P(NODE) \
167 TYPE_LANG_FLAG_5 (INTEGER_TYPE_CHECK (NODE))
169 /* For a RECORD_TYPE, nonzero if this was made just to supply needed
170 padding or alignment. */
171 #define TYPE_PADDING_P(NODE) TYPE_LANG_FLAG_5 (RECORD_TYPE_CHECK (NODE))
173 #define TYPE_IS_PADDING_P(NODE) \
174 (TREE_CODE (NODE) == RECORD_TYPE && TYPE_PADDING_P (NODE))
176 /* True if TYPE can alias any other types. */
177 #define TYPE_UNIVERSAL_ALIASING_P(NODE) TYPE_LANG_FLAG_6 (NODE)
179 /* For an UNCONSTRAINED_ARRAY_TYPE, this is the record containing both the
180 template and the object.
182 ??? We also put this on an ENUMERAL_TYPE that is dummy. Technically,
183 this is a conflict on the minval field, but there doesn't seem to be
184 simple fix, so we'll live with this kludge for now. */
185 #define TYPE_OBJECT_RECORD_TYPE(NODE) \
186 (TYPE_MINVAL (TREE_CHECK2 ((NODE), UNCONSTRAINED_ARRAY_TYPE, ENUMERAL_TYPE)))
188 /* For numerical types, this is the GCC lower bound of the type. The GCC
189 type system is based on the invariant that an object X of a given type
190 cannot hold at run time a value smaller than its lower bound; otherwise
191 the behavior is undefined. The optimizer takes advantage of this and
192 considers that the assertion X >= LB is always true. */
193 #define TYPE_GCC_MIN_VALUE(NODE) (TYPE_MINVAL (NUMERICAL_TYPE_CHECK (NODE)))
195 /* For numerical types, this is the GCC upper bound of the type. The GCC
196 type system is based on the invariant that an object X of a given type
197 cannot hold at run time a value larger than its upper bound; otherwise
198 the behavior is undefined. The optimizer takes advantage of this and
199 considers that the assertion X <= UB is always true. */
200 #define TYPE_GCC_MAX_VALUE(NODE) (TYPE_MAXVAL (NUMERICAL_TYPE_CHECK (NODE)))
202 /* For a FUNCTION_TYPE, if the subprogram has parameters passed by copy in/
203 copy out, this is the list of nodes used to specify the return values of
204 the out (or in out) parameters that are passed by copy in/copy out. For
205 a full description of the copy in/copy out parameter passing mechanism
206 refer to the routine gnat_to_gnu_entity. */
207 #define TYPE_CI_CO_LIST(NODE) TYPE_LANG_SLOT_1 (FUNCTION_TYPE_CHECK (NODE))
209 /* For a VECTOR_TYPE, this is the representative array type. */
210 #define TYPE_REPRESENTATIVE_ARRAY(NODE) \
211 TYPE_LANG_SLOT_1 (VECTOR_TYPE_CHECK (NODE))
213 /* For numerical types, this holds various RM-defined values. */
214 #define TYPE_RM_VALUES(NODE) TYPE_LANG_SLOT_1 (NUMERICAL_TYPE_CHECK (NODE))
216 /* Macros to get and set the individual values in TYPE_RM_VALUES. */
217 #define TYPE_RM_VALUE(NODE, N) \
218 (TYPE_RM_VALUES (NODE) \
219 ? TREE_VEC_ELT (TYPE_RM_VALUES (NODE), (N)) : NULL_TREE)
221 #define SET_TYPE_RM_VALUE(NODE, N, X) \
222 do { \
223 tree tmp = (X); \
224 if (!TYPE_RM_VALUES (NODE)) \
225 TYPE_RM_VALUES (NODE) = make_tree_vec (3); \
226 /* ??? The field is not visited by the generic \
227 code so we need to mark it manually. */ \
228 MARK_VISITED (tmp); \
229 TREE_VEC_ELT (TYPE_RM_VALUES (NODE), (N)) = tmp; \
230 } while (0)
232 /* For numerical types, this is the RM size of the type, aka its precision.
233 There is a discrepancy between what is called precision here (and more
234 generally throughout gigi) and what is called precision in the GCC type
235 system: in the former case it's TYPE_RM_SIZE whereas it's TYPE_PRECISION
236 in the latter case. They are not identical because of the need to support
237 invalid values.
239 These values can be outside the range of values allowed by the RM size
240 but they must nevertheless be valid in the GCC type system, otherwise
241 the optimizer can pretend that they simply don't exist. Therefore they
242 must be within the range of values allowed by the precision in the GCC
243 sense, hence TYPE_PRECISION be set to the Esize, not the RM size. */
244 #define TYPE_RM_SIZE(NODE) TYPE_RM_VALUE ((NODE), 0)
245 #define SET_TYPE_RM_SIZE(NODE, X) SET_TYPE_RM_VALUE ((NODE), 0, (X))
247 /* For numerical types, this is the RM lower bound of the type. There is
248 again a discrepancy between this lower bound and the GCC lower bound,
249 again because of the need to support invalid values.
251 These values can be outside the range of values allowed by the RM lower
252 bound but they must nevertheless be valid in the GCC type system, otherwise
253 the optimizer can pretend that they simply don't exist. Therefore they
254 must be within the range of values allowed by the lower bound in the GCC
255 sense, hence the GCC lower bound be set to that of the base type.
257 This lower bound is translated directly without the adjustments that may
258 be required for type compatibility, so it will generally be necessary to
259 convert it to the base type of the numerical type before using it. */
260 #define TYPE_RM_MIN_VALUE(NODE) TYPE_RM_VALUE ((NODE), 1)
261 #define SET_TYPE_RM_MIN_VALUE(NODE, X) SET_TYPE_RM_VALUE ((NODE), 1, (X))
263 /* For numerical types, this is the RM upper bound of the type. There is
264 again a discrepancy between this upper bound and the GCC upper bound,
265 again because of the need to support invalid values.
267 These values can be outside the range of values allowed by the RM upper
268 bound but they must nevertheless be valid in the GCC type system, otherwise
269 the optimizer can pretend that they simply don't exist. Therefore they
270 must be within the range of values allowed by the upper bound in the GCC
271 sense, hence the GCC upper bound be set to that of the base type.
273 This upper bound is translated directly without the adjustments that may
274 be required for type compatibility, so it will generally be necessary to
275 convert it to the base type of the numerical type before using it. */
276 #define TYPE_RM_MAX_VALUE(NODE) TYPE_RM_VALUE ((NODE), 2)
277 #define SET_TYPE_RM_MAX_VALUE(NODE, X) SET_TYPE_RM_VALUE ((NODE), 2, (X))
279 /* For numerical types, this is the lower bound of the type, i.e. the RM lower
280 bound for language-defined types and the GCC lower bound for others. */
281 #undef TYPE_MIN_VALUE
282 #define TYPE_MIN_VALUE(NODE) \
283 (TYPE_RM_MIN_VALUE (NODE) \
284 ? TYPE_RM_MIN_VALUE (NODE) : TYPE_GCC_MIN_VALUE (NODE))
286 /* For numerical types, this is the upper bound of the type, i.e. the RM upper
287 bound for language-defined types and the GCC upper bound for others. */
288 #undef TYPE_MAX_VALUE
289 #define TYPE_MAX_VALUE(NODE) \
290 (TYPE_RM_MAX_VALUE (NODE) \
291 ? TYPE_RM_MAX_VALUE (NODE) : TYPE_GCC_MAX_VALUE (NODE))
293 /* For an INTEGER_TYPE with TYPE_MODULAR_P, this is the value of the
294 modulus. */
295 #define TYPE_MODULUS(NODE) \
296 GET_TYPE_LANG_SPECIFIC (INTEGER_TYPE_CHECK (NODE))
297 #define SET_TYPE_MODULUS(NODE, X) \
298 SET_TYPE_LANG_SPECIFIC (INTEGER_TYPE_CHECK (NODE), X)
300 /* For an INTEGER_TYPE that is the TYPE_DOMAIN of some ARRAY_TYPE, this is
301 the type corresponding to the Ada index type. It is necessary to keep
302 these 2 views for every array type because the TYPE_DOMAIN is subject
303 to strong constraints in GENERIC: it must be a subtype of SIZETYPE and
304 may not be superflat, i.e. the upper bound must always be larger or
305 equal to the lower bound minus 1 (i.e. the canonical length formula
306 must always yield a non-negative number), which means that at least
307 one of the bounds may need to be a conditional expression. There are
308 no such constraints on the TYPE_INDEX_TYPE because gigi is prepared to
309 deal with the superflat case; moreover the TYPE_INDEX_TYPE is used as
310 the index type for the debug info and, therefore, needs to be as close
311 as possible to the source index type. */
312 #define TYPE_INDEX_TYPE(NODE) \
313 GET_TYPE_LANG_SPECIFIC (INTEGER_TYPE_CHECK (NODE))
314 #define SET_TYPE_INDEX_TYPE(NODE, X) \
315 SET_TYPE_LANG_SPECIFIC (INTEGER_TYPE_CHECK (NODE), X)
317 /* For an INTEGER_TYPE with TYPE_HAS_ACTUAL_BOUNDS_P or an ARRAY_TYPE, this is
318 the index type that should be used when the actual bounds are required for
319 a template. This is used in the case of packed arrays. */
320 #define TYPE_ACTUAL_BOUNDS(NODE) \
321 GET_TYPE_LANG_SPECIFIC (TREE_CHECK2 (NODE, INTEGER_TYPE, ARRAY_TYPE))
322 #define SET_TYPE_ACTUAL_BOUNDS(NODE, X) \
323 SET_TYPE_LANG_SPECIFIC (TREE_CHECK2 (NODE, INTEGER_TYPE, ARRAY_TYPE), X)
325 /* For a POINTER_TYPE that points to the template type of an unconstrained
326 array type, this is the address to be used in a null fat pointer. */
327 #define TYPE_NULL_BOUNDS(NODE) \
328 GET_TYPE_LANG_SPECIFIC (POINTER_TYPE_CHECK (NODE))
329 #define SET_TYPE_NULL_BOUNDS(NODE, X) \
330 SET_TYPE_LANG_SPECIFIC (POINTER_TYPE_CHECK (NODE), X)
332 /* For a RECORD_TYPE that is a fat pointer, this is the type for the
333 unconstrained array. Likewise for a RECORD_TYPE that is pointed
334 to by a thin pointer, if it is made for the unconstrained array
335 type itself; the field is NULL_TREE if the RECORD_TYPE is made
336 for a constrained subtype of the array type. */
337 #define TYPE_UNCONSTRAINED_ARRAY(NODE) \
338 GET_TYPE_LANG_SPECIFIC (RECORD_TYPE_CHECK (NODE))
339 #define SET_TYPE_UNCONSTRAINED_ARRAY(NODE, X) \
340 SET_TYPE_LANG_SPECIFIC (RECORD_TYPE_CHECK (NODE), X)
342 /* For other RECORD_TYPEs and all UNION_TYPEs and QUAL_UNION_TYPEs, this is
343 the Ada size of the object. This differs from the GCC size in that it
344 does not include any rounding up to the alignment of the type. */
345 #define TYPE_ADA_SIZE(NODE) \
346 GET_TYPE_LANG_SPECIFIC (RECORD_OR_UNION_CHECK (NODE))
347 #define SET_TYPE_ADA_SIZE(NODE, X) \
348 SET_TYPE_LANG_SPECIFIC (RECORD_OR_UNION_CHECK (NODE), X)
351 /* Flags added to decl nodes. */
353 /* Nonzero in a FUNCTION_DECL that represents a stubbed function
354 discriminant. */
355 #define DECL_STUBBED_P(NODE) DECL_LANG_FLAG_0 (FUNCTION_DECL_CHECK (NODE))
357 /* Nonzero in a VAR_DECL if it is guaranteed to be constant after having
358 been elaborated and TREE_READONLY is not set on it. */
359 #define DECL_READONLY_ONCE_ELAB(NODE) DECL_LANG_FLAG_0 (VAR_DECL_CHECK (NODE))
361 /* Nonzero in a CONST_DECL if its value is (essentially) the address of a
362 constant CONSTRUCTOR. */
363 #define DECL_CONST_ADDRESS_P(NODE) DECL_LANG_FLAG_0 (CONST_DECL_CHECK (NODE))
365 /* Nonzero in a FIELD_DECL if it is declared as aliased. */
366 #define DECL_ALIASED_P(NODE) DECL_LANG_FLAG_0 (FIELD_DECL_CHECK (NODE))
368 /* Nonzero in a TYPE_DECL if this is the declaration of a Taft amendment type
369 in the main unit, i.e. the full declaration is available. */
370 #define DECL_TAFT_TYPE_P(NODE) DECL_LANG_FLAG_0 (TYPE_DECL_CHECK (NODE))
372 /* Nonzero in a DECL if it is always used by reference, i.e. an INDIRECT_REF
373 is needed to access the object. */
374 #define DECL_BY_REF_P(NODE) DECL_LANG_FLAG_1 (NODE)
376 /* Nonzero in a DECL if it is made for a pointer that can never be null. */
377 #define DECL_CAN_NEVER_BE_NULL_P(NODE) DECL_LANG_FLAG_2 (NODE)
379 /* Nonzero in a VAR_DECL if it is made for a loop parameter. */
380 #define DECL_LOOP_PARM_P(NODE) DECL_LANG_FLAG_3 (VAR_DECL_CHECK (NODE))
382 /* Nonzero in a FIELD_DECL that is a dummy built for some internal reason. */
383 #define DECL_INTERNAL_P(NODE) DECL_LANG_FLAG_3 (FIELD_DECL_CHECK (NODE))
385 /* Nonzero in a PARM_DECL if it is made for an Ada array being passed to a
386 foreign convention subprogram. */
387 #define DECL_BY_COMPONENT_PTR_P(NODE) DECL_LANG_FLAG_3 (PARM_DECL_CHECK (NODE))
389 /* Nonzero in a FUNCTION_DECL that corresponds to an elaboration procedure. */
390 #define DECL_ELABORATION_PROC_P(NODE) \
391 DECL_LANG_FLAG_3 (FUNCTION_DECL_CHECK (NODE))
393 /* Nonzero in a DECL if it is made for a pointer that points to something which
394 is readonly. */
395 #define DECL_POINTS_TO_READONLY_P(NODE) DECL_LANG_FLAG_4 (NODE)
397 /* Nonzero in a VAR_DECL if it is a pointer renaming a global object. */
398 #define DECL_RENAMING_GLOBAL_P(NODE) DECL_LANG_FLAG_5 (VAR_DECL_CHECK (NODE))
400 /* In a FIELD_DECL corresponding to a discriminant, contains the
401 discriminant number. */
402 #define DECL_DISCRIMINANT_NUMBER(NODE) DECL_INITIAL (FIELD_DECL_CHECK (NODE))
404 /* In a CONST_DECL, points to a VAR_DECL that is allocatable to
405 memory. Used when a scalar constant is aliased or has its
406 address taken. */
407 #define DECL_CONST_CORRESPONDING_VAR(NODE) \
408 GET_DECL_LANG_SPECIFIC (CONST_DECL_CHECK (NODE))
409 #define SET_DECL_CONST_CORRESPONDING_VAR(NODE, X) \
410 SET_DECL_LANG_SPECIFIC (CONST_DECL_CHECK (NODE), X)
412 /* In a FIELD_DECL, points to the FIELD_DECL that was the ultimate
413 source of the decl. */
414 #define DECL_ORIGINAL_FIELD(NODE) \
415 GET_DECL_LANG_SPECIFIC (FIELD_DECL_CHECK (NODE))
416 #define SET_DECL_ORIGINAL_FIELD(NODE, X) \
417 SET_DECL_LANG_SPECIFIC (FIELD_DECL_CHECK (NODE), X)
419 /* Set DECL_ORIGINAL_FIELD of FIELD1 to (that of) FIELD2. */
420 #define SET_DECL_ORIGINAL_FIELD_TO_FIELD(FIELD1, FIELD2) \
421 SET_DECL_ORIGINAL_FIELD ((FIELD1), \
422 DECL_ORIGINAL_FIELD (FIELD2) \
423 ? DECL_ORIGINAL_FIELD (FIELD2) : (FIELD2))
425 /* Return true if FIELD1 and FIELD2 represent the same field. */
426 #define SAME_FIELD_P(FIELD1, FIELD2) \
427 ((FIELD1) == (FIELD2) \
428 || DECL_ORIGINAL_FIELD (FIELD1) == (FIELD2) \
429 || (FIELD1) == DECL_ORIGINAL_FIELD (FIELD2) \
430 || (DECL_ORIGINAL_FIELD (FIELD1) \
431 && (DECL_ORIGINAL_FIELD (FIELD1) == DECL_ORIGINAL_FIELD (FIELD2))))
433 /* In a VAR_DECL with the DECL_LOOP_PARM_P flag set, points to the special
434 induction variable that is built under certain circumstances, if any. */
435 #define DECL_INDUCTION_VAR(NODE) \
436 GET_DECL_LANG_SPECIFIC (VAR_DECL_CHECK (NODE))
437 #define SET_DECL_INDUCTION_VAR(NODE, X) \
438 SET_DECL_LANG_SPECIFIC (VAR_DECL_CHECK (NODE), X)
440 /* In a VAR_DECL without the DECL_LOOP_PARM_P flag set and that is a renaming
441 pointer, points to the object being renamed, if any. Note that this object
442 is guaranteed to be protected against multiple evaluations. */
443 #define DECL_RENAMED_OBJECT(NODE) \
444 GET_DECL_LANG_SPECIFIC (VAR_DECL_CHECK (NODE))
445 #define SET_DECL_RENAMED_OBJECT(NODE, X) \
446 SET_DECL_LANG_SPECIFIC (VAR_DECL_CHECK (NODE), X)
448 /* In a TYPE_DECL, points to the parallel type if any, otherwise 0. */
449 #define DECL_PARALLEL_TYPE(NODE) \
450 GET_DECL_LANG_SPECIFIC (TYPE_DECL_CHECK (NODE))
451 #define SET_DECL_PARALLEL_TYPE(NODE, X) \
452 SET_DECL_LANG_SPECIFIC (TYPE_DECL_CHECK (NODE), X)
455 /* Flags added to ref nodes. */
457 /* Nonzero means this node will not trap. */
458 #undef TREE_THIS_NOTRAP
459 #define TREE_THIS_NOTRAP(NODE) \
460 (TREE_CHECK4 (NODE, INDIRECT_REF, ARRAY_REF, UNCONSTRAINED_ARRAY_REF, \
461 ARRAY_RANGE_REF)->base.nothrow_flag)
464 /* Fields and macros for statements. */
465 #define IS_ADA_STMT(NODE) \
466 (STATEMENT_CLASS_P (NODE) && TREE_CODE (NODE) >= STMT_STMT)
468 #define STMT_STMT_STMT(NODE) TREE_OPERAND_CHECK_CODE (NODE, STMT_STMT, 0)
470 #define LOOP_STMT_COND(NODE) TREE_OPERAND_CHECK_CODE (NODE, LOOP_STMT, 0)
471 #define LOOP_STMT_UPDATE(NODE) TREE_OPERAND_CHECK_CODE (NODE, LOOP_STMT, 1)
472 #define LOOP_STMT_BODY(NODE) TREE_OPERAND_CHECK_CODE (NODE, LOOP_STMT, 2)
473 #define LOOP_STMT_LABEL(NODE) TREE_OPERAND_CHECK_CODE (NODE, LOOP_STMT, 3)
475 /* A loop statement is conceptually made up of 6 sub-statements:
477 loop:
478 TOP_CONDITION
479 TOP_UPDATE
480 BODY
481 BOTTOM_CONDITION
482 BOTTOM_UPDATE
483 GOTO loop
485 However, only 4 of them can exist for a given loop, the pair of conditions
486 and the pair of updates being mutually exclusive. The default setting is
487 TOP_CONDITION and BOTTOM_UPDATE and the following couple of flags are used
488 to toggle the individual settings. */
489 #define LOOP_STMT_BOTTOM_COND_P(NODE) TREE_LANG_FLAG_0 (LOOP_STMT_CHECK (NODE))
490 #define LOOP_STMT_TOP_UPDATE_P(NODE) TREE_LANG_FLAG_1 (LOOP_STMT_CHECK (NODE))
492 /* Optimization hints on loops. */
493 #define LOOP_STMT_IVDEP(NODE) TREE_LANG_FLAG_2 (LOOP_STMT_CHECK (NODE))
494 #define LOOP_STMT_NO_UNROLL(NODE) TREE_LANG_FLAG_3 (LOOP_STMT_CHECK (NODE))
495 #define LOOP_STMT_UNROLL(NODE) TREE_LANG_FLAG_4 (LOOP_STMT_CHECK (NODE))
496 #define LOOP_STMT_NO_VECTOR(NODE) TREE_LANG_FLAG_5 (LOOP_STMT_CHECK (NODE))
497 #define LOOP_STMT_VECTOR(NODE) TREE_LANG_FLAG_6 (LOOP_STMT_CHECK (NODE))
499 #define EXIT_STMT_COND(NODE) TREE_OPERAND_CHECK_CODE (NODE, EXIT_STMT, 0)
500 #define EXIT_STMT_LABEL(NODE) TREE_OPERAND_CHECK_CODE (NODE, EXIT_STMT, 1)