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-2019, 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  ****************************************************************************/
25 
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
30 {
31   union tree_node GTY((tag ("0"),
32 		       desc ("tree_node_structure (&%h)"))) generic;
33 };
34 
35 /* Ada uses the lang_decl and lang_type fields to hold a tree.  */
36 struct GTY(()) lang_type { tree t1; tree t2; };
37 struct GTY(()) lang_decl { tree t; };
38 
39 extern struct lang_type *get_lang_specific (tree node);
40 
41 /* Macros to get and set the trees in TYPE_LANG_SPECIFIC.  */
42 #define GET_TYPE_LANG_SPECIFIC(NODE) \
43   (TYPE_LANG_SPECIFIC (NODE) ? TYPE_LANG_SPECIFIC (NODE)->t1 : NULL_TREE)
44 
45 #define SET_TYPE_LANG_SPECIFIC(NODE, X) (get_lang_specific (NODE)->t1 = (X))
46 
47 #define GET_TYPE_LANG_SPECIFIC2(NODE) \
48   (TYPE_LANG_SPECIFIC (NODE) ? TYPE_LANG_SPECIFIC (NODE)->t2 : NULL_TREE)
49 
50 #define SET_TYPE_LANG_SPECIFIC2(NODE, X) (get_lang_specific (NODE)->t2 = (X))
51 
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)
55 
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)
64 
65 
66 /* Flags added to type nodes.  */
67 
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))
72 
73 #define TYPE_IS_FAT_POINTER_P(NODE) \
74   (TREE_CODE (NODE) == RECORD_TYPE && TYPE_FAT_POINTER_P (NODE))
75 
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))
81 
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))
85 
86 /* For FUNCTION_TYPE and METHOD_TYPE, nonzero if the function returns by
87    direct reference, i.e. the callee returns a pointer to a memory location
88    it has allocated and the caller only needs to dereference the pointer.  */
89 #define TYPE_RETURN_BY_DIRECT_REF_P(NODE) \
90   TYPE_LANG_FLAG_0 (FUNC_OR_METHOD_CHECK (NODE))
91 
92 /* For INTEGER_TYPE, nonzero if this is a modular type with a modulus that
93    is not equal to two to the power of its mode's size.  */
94 #define TYPE_MODULAR_P(NODE) TYPE_LANG_FLAG_1 (INTEGER_TYPE_CHECK (NODE))
95 
96 /* For ARRAY_TYPE, nonzero if this type corresponds to a dimension of
97    an Ada array other than the first.  */
98 #define TYPE_MULTI_ARRAY_P(NODE) TYPE_LANG_FLAG_1 (ARRAY_TYPE_CHECK (NODE))
99 
100 /* For FUNCTION_TYPE and METHOD_TYPE, nonzero if function returns an
101    unconstrained array or record type.  */
102 #define TYPE_RETURN_UNCONSTRAINED_P(NODE) \
103   TYPE_LANG_FLAG_1 (FUNC_OR_METHOD_CHECK (NODE))
104 
105 /* For RECORD_TYPE, UNION_TYPE, and QUAL_UNION_TYPE, nonzero if this denotes
106    a justified modular type (will only be true for RECORD_TYPE).  */
107 #define TYPE_JUSTIFIED_MODULAR_P(NODE) \
108   TYPE_LANG_FLAG_1 (RECORD_OR_UNION_CHECK (NODE))
109 
110 /* Nonzero in an arithmetic subtype if this is a subtype not known to the
111    front-end.  */
112 #define TYPE_EXTRA_SUBTYPE_P(NODE) TYPE_LANG_FLAG_2 (INTEGER_TYPE_CHECK (NODE))
113 
114 #define TYPE_IS_EXTRA_SUBTYPE_P(NODE) \
115   (TREE_CODE (NODE) == INTEGER_TYPE && TYPE_EXTRA_SUBTYPE_P (NODE))
116 
117 /* Nonzero for an aggregate type if this is a by-reference type.  We also
118    set this on an ENUMERAL_TYPE that is dummy.  */
119 #define TYPE_BY_REFERENCE_P(NODE)				       \
120   TYPE_LANG_FLAG_2 (TREE_CHECK5 (NODE, RECORD_TYPE, UNION_TYPE,	       \
121 				 ARRAY_TYPE, UNCONSTRAINED_ARRAY_TYPE, \
122 				 ENUMERAL_TYPE))
123 
124 #define TYPE_IS_BY_REFERENCE_P(NODE)		    \
125   ((TREE_CODE (NODE) == RECORD_TYPE		    \
126     || TREE_CODE (NODE) == UNION_TYPE		    \
127     || TREE_CODE (NODE) == ARRAY_TYPE		    \
128     || TREE_CODE (NODE) == UNCONSTRAINED_ARRAY_TYPE \
129     || TREE_CODE (NODE) == ENUMERAL_TYPE)	    \
130    && TYPE_BY_REFERENCE_P (NODE))
131 
132 /* For RECORD_TYPE, UNION_TYPE, and QUAL_UNION_TYPE, nonzero if this is the
133    type for an object whose type includes its template in addition to
134    its value (only true for RECORD_TYPE).  */
135 #define TYPE_CONTAINS_TEMPLATE_P(NODE) \
136   TYPE_LANG_FLAG_3 (RECORD_OR_UNION_CHECK (NODE))
137 
138 /* For INTEGER_TYPE, nonzero if it implements a fixed-point type.  */
139 #define TYPE_FIXED_POINT_P(NODE) \
140   TYPE_LANG_FLAG_3 (INTEGER_TYPE_CHECK (NODE))
141 
142 #define TYPE_IS_FIXED_POINT_P(NODE) \
143   (TREE_CODE (NODE) == INTEGER_TYPE && TYPE_FIXED_POINT_P (NODE))
144 
145 /* True if NODE is a thin pointer.  */
146 #define TYPE_IS_THIN_POINTER_P(NODE)			\
147   (POINTER_TYPE_P (NODE)				\
148    && TREE_CODE (TREE_TYPE (NODE)) == RECORD_TYPE	\
149    && TYPE_CONTAINS_TEMPLATE_P (TREE_TYPE (NODE)))
150 
151 /* True if TYPE is either a fat or thin pointer to an unconstrained
152    array.  */
153 #define TYPE_IS_FAT_OR_THIN_POINTER_P(NODE) \
154   (TYPE_IS_FAT_POINTER_P (NODE) || TYPE_IS_THIN_POINTER_P (NODE))
155 
156 /* For INTEGER_TYPEs, nonzero if the type has a biased representation.  */
157 #define TYPE_BIASED_REPRESENTATION_P(NODE) \
158   TYPE_LANG_FLAG_4 (INTEGER_TYPE_CHECK (NODE))
159 
160 /* For ARRAY_TYPEs, nonzero if the array type has Convention_Fortran.  */
161 #define TYPE_CONVENTION_FORTRAN_P(NODE) \
162   TYPE_LANG_FLAG_4 (ARRAY_TYPE_CHECK (NODE))
163 
164 /* For RECORD_TYPE, UNION_TYPE and ENUMERAL_TYPE, nonzero if this is a dummy
165    type, made to correspond to a private or incomplete type.  */
166 #define TYPE_DUMMY_P(NODE) \
167   TYPE_LANG_FLAG_4 (TREE_CHECK3 (NODE, RECORD_TYPE, UNION_TYPE, ENUMERAL_TYPE))
168 
169 #define TYPE_IS_DUMMY_P(NODE)		  \
170   ((TREE_CODE (NODE) == RECORD_TYPE	  \
171     || TREE_CODE (NODE) == UNION_TYPE	  \
172     || TREE_CODE (NODE) == ENUMERAL_TYPE) \
173    && TYPE_DUMMY_P (NODE))
174 
175 /* For an INTEGER_TYPE, nonzero if TYPE_ACTUAL_BOUNDS is present.  */
176 #define TYPE_HAS_ACTUAL_BOUNDS_P(NODE) \
177   TYPE_LANG_FLAG_5 (INTEGER_TYPE_CHECK (NODE))
178 
179 /* For a RECORD_TYPE, nonzero if this was made just to supply needed
180    padding or alignment.  */
181 #define TYPE_PADDING_P(NODE) TYPE_LANG_FLAG_5 (RECORD_TYPE_CHECK (NODE))
182 
183 #define TYPE_IS_PADDING_P(NODE) \
184   (TREE_CODE (NODE) == RECORD_TYPE && TYPE_PADDING_P (NODE))
185 
186 /* True for a non-dummy type if TYPE can alias any other types.  */
187 #define TYPE_UNIVERSAL_ALIASING_P(NODE) TYPE_LANG_FLAG_6 (NODE)
188 
189 /* True for a dummy type if TYPE appears in a profile.  */
190 #define TYPE_DUMMY_IN_PROFILE_P(NODE) TYPE_LANG_FLAG_6 (NODE)
191 
192 /* True if objects of this type are guaranteed to be properly aligned.  */
193 #define TYPE_ALIGN_OK(NODE) TYPE_LANG_FLAG_7 (NODE)
194 
195 /* True for types that implement a packed array and for original packed array
196    types.  */
197 #define TYPE_IMPL_PACKED_ARRAY_P(NODE) \
198   ((TREE_CODE (NODE) == ARRAY_TYPE && TYPE_PACKED (NODE)) \
199    || (TREE_CODE (NODE) == INTEGER_TYPE && TYPE_PACKED_ARRAY_TYPE_P (NODE)))
200 
201 /* True for types that can hold a debug type.  */
202 #define TYPE_CAN_HAVE_DEBUG_TYPE_P(NODE) (!TYPE_IMPL_PACKED_ARRAY_P (NODE))
203 
204 /* For RECORD_TYPE, UNION_TYPE, and QUAL_UNION_TYPE, this holds the maximum
205    alignment value the type ought to have.  */
206 #define TYPE_MAX_ALIGN(NODE) (TYPE_PRECISION (RECORD_OR_UNION_CHECK (NODE)))
207 
208 /* For an UNCONSTRAINED_ARRAY_TYPE, this is the record containing both the
209    template and the object.
210 
211    ??? We also put this on an ENUMERAL_TYPE that is dummy.  Technically,
212    this is a conflict on the minval field, but there doesn't seem to be
213    simple fix, so we'll live with this kludge for now.  */
214 #define TYPE_OBJECT_RECORD_TYPE(NODE) \
215   (TYPE_MIN_VALUE_RAW (TREE_CHECK2 ((NODE), UNCONSTRAINED_ARRAY_TYPE, \
216 				    ENUMERAL_TYPE)))
217 
218 /* For numerical types, this is the GCC lower bound of the type.  The GCC
219    type system is based on the invariant that an object X of a given type
220    cannot hold at run time a value smaller than its lower bound; otherwise
221    the behavior is undefined.  The optimizer takes advantage of this and
222    considers that the assertion X >= LB is always true.  */
223 #define TYPE_GCC_MIN_VALUE(NODE) \
224   (TYPE_MIN_VALUE_RAW (NUMERICAL_TYPE_CHECK (NODE)))
225 
226 /* For numerical types, this is the GCC upper bound of the type.  The GCC
227    type system is based on the invariant that an object X of a given type
228    cannot hold at run time a value larger than its upper bound; otherwise
229    the behavior is undefined.  The optimizer takes advantage of this and
230    considers that the assertion X <= UB is always true.  */
231 #define TYPE_GCC_MAX_VALUE(NODE) \
232   (TYPE_MAX_VALUE_RAW (NUMERICAL_TYPE_CHECK (NODE)))
233 
234 /* For a FUNCTION_TYPE and METHOD_TYPE, if the function has parameters passed
235    by copy in/copy out, this is the list of nodes used to specify the return
236    values of these parameters.  For a full description of the copy in/copy out
237    parameter passing mechanism refer to the routine gnat_to_gnu_entity.  */
238 #define TYPE_CI_CO_LIST(NODE) TYPE_LANG_SLOT_1 (FUNC_OR_METHOD_CHECK (NODE))
239 
240 /* For an ARRAY_TYPE with variable size, this is the padding type built for
241    the array type when it is itself the component type of another array.  */
242 #define TYPE_PADDING_FOR_COMPONENT(NODE) \
243   TYPE_LANG_SLOT_1 (ARRAY_TYPE_CHECK (NODE))
244 
245 /* For a VECTOR_TYPE, this is the representative array type.  */
246 #define TYPE_REPRESENTATIVE_ARRAY(NODE) \
247   TYPE_LANG_SLOT_1 (VECTOR_TYPE_CHECK (NODE))
248 
249 /* For numerical types, this holds various RM-defined values.  */
250 #define TYPE_RM_VALUES(NODE) TYPE_LANG_SLOT_1 (NUMERICAL_TYPE_CHECK (NODE))
251 
252 /* Macros to get and set the individual values in TYPE_RM_VALUES.  */
253 #define TYPE_RM_VALUE(NODE, N)				    \
254   (TYPE_RM_VALUES (NODE)				    \
255    ? TREE_VEC_ELT (TYPE_RM_VALUES (NODE), (N)) : NULL_TREE)
256 
257 #define SET_TYPE_RM_VALUE(NODE, N, X)		   \
258 do {						   \
259   tree tmp = (X);				   \
260   if (!TYPE_RM_VALUES (NODE))			   \
261     TYPE_RM_VALUES (NODE) = make_tree_vec (3);	   \
262   /* ??? The field is not visited by the generic   \
263      code so we need to mark it manually.  */	   \
264   MARK_VISITED (tmp);				   \
265   TREE_VEC_ELT (TYPE_RM_VALUES (NODE), (N)) = tmp; \
266 } while (0)
267 
268 /* For numerical types, this is the RM size of the type, aka its precision.
269    There is a discrepancy between what is called precision here (and more
270    generally throughout gigi) and what is called precision in the GCC type
271    system: in the former case it's TYPE_RM_SIZE whereas it's TYPE_PRECISION
272    in the latter case.  They are not identical because of the need to support
273    invalid values.
274 
275    These values can be outside the range of values allowed by the RM size
276    but they must nevertheless be valid in the GCC type system, otherwise
277    the optimizer can pretend that they simply don't exist.  Therefore they
278    must be within the range of values allowed by the precision in the GCC
279    sense, hence TYPE_PRECISION be set to the Esize, not the RM size.  */
280 #define TYPE_RM_SIZE(NODE) TYPE_RM_VALUE ((NODE), 0)
281 #define SET_TYPE_RM_SIZE(NODE, X) SET_TYPE_RM_VALUE ((NODE), 0, (X))
282 
283 /* For numerical types, this is the RM lower bound of the type.  There is
284    again a discrepancy between this lower bound and the GCC lower bound,
285    again because of the need to support invalid values.
286 
287    These values can be outside the range of values allowed by the RM lower
288    bound but they must nevertheless be valid in the GCC type system, otherwise
289    the optimizer can pretend that they simply don't exist.  Therefore they
290    must be within the range of values allowed by the lower bound in the GCC
291    sense, hence the GCC lower bound be set to that of the base type.
292 
293    This lower bound is translated directly without the adjustments that may
294    be required for type compatibility, so it will generally be necessary to
295    convert it to the base type of the numerical type before using it.  */
296 #define TYPE_RM_MIN_VALUE(NODE) TYPE_RM_VALUE ((NODE), 1)
297 #define SET_TYPE_RM_MIN_VALUE(NODE, X) SET_TYPE_RM_VALUE ((NODE), 1, (X))
298 
299 /* For numerical types, this is the RM upper bound of the type.  There is
300    again a discrepancy between this upper bound and the GCC upper bound,
301    again because of the need to support invalid values.
302 
303    These values can be outside the range of values allowed by the RM upper
304    bound but they must nevertheless be valid in the GCC type system, otherwise
305    the optimizer can pretend that they simply don't exist.  Therefore they
306    must be within the range of values allowed by the upper bound in the GCC
307    sense, hence the GCC upper bound be set to that of the base type.
308 
309    This upper bound is translated directly without the adjustments that may
310    be required for type compatibility, so it will generally be necessary to
311    convert it to the base type of the numerical type before using it.  */
312 #define TYPE_RM_MAX_VALUE(NODE) TYPE_RM_VALUE ((NODE), 2)
313 #define SET_TYPE_RM_MAX_VALUE(NODE, X) SET_TYPE_RM_VALUE ((NODE), 2, (X))
314 
315 /* For numerical types, this is the lower bound of the type, i.e. the RM lower
316    bound for language-defined types and the GCC lower bound for others.  */
317 #undef TYPE_MIN_VALUE
318 #define TYPE_MIN_VALUE(NODE) \
319   (TYPE_RM_MIN_VALUE (NODE) \
320    ? TYPE_RM_MIN_VALUE (NODE) : TYPE_GCC_MIN_VALUE (NODE))
321 
322 /* For numerical types, this is the upper bound of the type, i.e. the RM upper
323    bound for language-defined types and the GCC upper bound for others.  */
324 #undef TYPE_MAX_VALUE
325 #define TYPE_MAX_VALUE(NODE) \
326   (TYPE_RM_MAX_VALUE (NODE) \
327    ? TYPE_RM_MAX_VALUE (NODE) : TYPE_GCC_MAX_VALUE (NODE))
328 
329 /* For an INTEGER_TYPE with TYPE_MODULAR_P, this is the value of the
330    modulus. */
331 #define TYPE_MODULUS(NODE) \
332   GET_TYPE_LANG_SPECIFIC (INTEGER_TYPE_CHECK (NODE))
333 #define SET_TYPE_MODULUS(NODE, X) \
334   SET_TYPE_LANG_SPECIFIC (INTEGER_TYPE_CHECK (NODE), X)
335 
336 /* For an INTEGER_TYPE that is the TYPE_DOMAIN of some ARRAY_TYPE, this is
337    the type corresponding to the Ada index type.  It is necessary to keep
338    these 2 views for every array type because the TYPE_DOMAIN is subject
339    to strong constraints in GENERIC: it must be a subtype of SIZETYPE and
340    may not be superflat, i.e. the upper bound must always be larger or
341    equal to the lower bound minus 1 (i.e. the canonical length formula
342    must always yield a non-negative number), which means that at least
343    one of the bounds may need to be a conditional expression.  There are
344    no such constraints on the TYPE_INDEX_TYPE because gigi is prepared to
345    deal with the superflat case; moreover the TYPE_INDEX_TYPE is used as
346    the index type for the debug info and, therefore, needs to be as close
347    as possible to the source index type.  */
348 #define TYPE_INDEX_TYPE(NODE) \
349   GET_TYPE_LANG_SPECIFIC (INTEGER_TYPE_CHECK (NODE))
350 #define SET_TYPE_INDEX_TYPE(NODE, X) \
351   SET_TYPE_LANG_SPECIFIC (INTEGER_TYPE_CHECK (NODE), X)
352 
353 /* For an INTEGER_TYPE with TYPE_HAS_ACTUAL_BOUNDS_P or an ARRAY_TYPE, this is
354    the index type that should be used when the actual bounds are required for
355    a template.  This is used in the case of packed arrays.  */
356 #define TYPE_ACTUAL_BOUNDS(NODE) \
357   GET_TYPE_LANG_SPECIFIC (TREE_CHECK2 (NODE, INTEGER_TYPE, ARRAY_TYPE))
358 #define SET_TYPE_ACTUAL_BOUNDS(NODE, X) \
359   SET_TYPE_LANG_SPECIFIC (TREE_CHECK2 (NODE, INTEGER_TYPE, ARRAY_TYPE), X)
360 
361 /* For a POINTER_TYPE that points to the template type of an unconstrained
362    array type, this is the address to be used in a null fat pointer.  */
363 #define TYPE_NULL_BOUNDS(NODE) \
364   GET_TYPE_LANG_SPECIFIC (POINTER_TYPE_CHECK (NODE))
365 #define SET_TYPE_NULL_BOUNDS(NODE, X) \
366   SET_TYPE_LANG_SPECIFIC (POINTER_TYPE_CHECK (NODE), X)
367 
368 /* For a RECORD_TYPE that is a fat pointer, this is the type for the
369    unconstrained array.  Likewise for a RECORD_TYPE that is pointed
370    to by a thin pointer, if it is made for the unconstrained array
371    type itself; the field is NULL_TREE if the RECORD_TYPE is made
372    for a constrained subtype of the array type.  */
373 #define TYPE_UNCONSTRAINED_ARRAY(NODE) \
374   GET_TYPE_LANG_SPECIFIC (RECORD_TYPE_CHECK (NODE))
375 #define SET_TYPE_UNCONSTRAINED_ARRAY(NODE, X) \
376   SET_TYPE_LANG_SPECIFIC (RECORD_TYPE_CHECK (NODE), X)
377 
378 /* For other RECORD_TYPEs and all UNION_TYPEs and QUAL_UNION_TYPEs, this is
379    the Ada size of the object.  This differs from the GCC size in that it
380    does not include any rounding up to the alignment of the type.  */
381 #define TYPE_ADA_SIZE(NODE) \
382   GET_TYPE_LANG_SPECIFIC (RECORD_OR_UNION_CHECK (NODE))
383 #define SET_TYPE_ADA_SIZE(NODE, X) \
384   SET_TYPE_LANG_SPECIFIC (RECORD_OR_UNION_CHECK (NODE), X)
385 
386 /* For an INTEGER_TYPE with TYPE_IS_FIXED_POINT_P, this is the value of the
387    scale factor.  Modular types, index types (sizetype subtypes) and
388    fixed-point types are totally distinct types, so there is no problem with
389    sharing type lang specific's first slot.  */
390 #define TYPE_SCALE_FACTOR(NODE) \
391   GET_TYPE_LANG_SPECIFIC (INTEGER_TYPE_CHECK (NODE))
392 #define SET_TYPE_SCALE_FACTOR(NODE, X) \
393   SET_TYPE_LANG_SPECIFIC (INTEGER_TYPE_CHECK (NODE), X)
394 
395 /* For types with TYPE_CAN_HAVE_DEBUG_TYPE_P, this is the type to use in
396    debugging information.  */
397 #define TYPE_DEBUG_TYPE(NODE) \
398   GET_TYPE_LANG_SPECIFIC2 (NODE)
399 #define SET_TYPE_DEBUG_TYPE(NODE, X) \
400   SET_TYPE_LANG_SPECIFIC2 (NODE, X)
401 
402 /* For types with TYPE_IMPL_PACKED_ARRAY_P, this is the original packed
403    array type.  Note that this predicate is true for original packed array
404    types, so these cannot have a debug type.  */
405 #define TYPE_ORIGINAL_PACKED_ARRAY(NODE) \
406   GET_TYPE_LANG_SPECIFIC2 (NODE)
407 #define SET_TYPE_ORIGINAL_PACKED_ARRAY(NODE, X) \
408   SET_TYPE_LANG_SPECIFIC2 (NODE, X)
409 
410 
411 /* Flags added to decl nodes.  */
412 
413 /* Nonzero in a FUNCTION_DECL that represents a stubbed function
414    discriminant.  */
415 #define DECL_STUBBED_P(NODE) DECL_LANG_FLAG_0 (FUNCTION_DECL_CHECK (NODE))
416 
417 /* Nonzero in a VAR_DECL if it is guaranteed to be constant after having
418    been elaborated and TREE_READONLY is not set on it.  */
419 #define DECL_READONLY_ONCE_ELAB(NODE) DECL_LANG_FLAG_0 (VAR_DECL_CHECK (NODE))
420 
421 /* Nonzero in a CONST_DECL if its value is (essentially) the address of a
422    constant CONSTRUCTOR.  */
423 #define DECL_CONST_ADDRESS_P(NODE) DECL_LANG_FLAG_0 (CONST_DECL_CHECK (NODE))
424 
425 /* Nonzero in a FIELD_DECL if it is declared as aliased.  */
426 #define DECL_ALIASED_P(NODE) DECL_LANG_FLAG_0 (FIELD_DECL_CHECK (NODE))
427 
428 /* Nonzero in a TYPE_DECL if this is the declaration of a Taft amendment type
429    in the main unit, i.e. the full declaration is available.  */
430 #define DECL_TAFT_TYPE_P(NODE) DECL_LANG_FLAG_0 (TYPE_DECL_CHECK (NODE))
431 
432 /* Nonzero in a PARM_DECL passed by reference but for which only a restricted
433    form of aliasing is allowed.  The first restriction comes explicitly from
434    the RM 6.2(12) clause: there is no read-after-write dependency between a
435    store based on such a PARM_DECL and a load not based on this PARM_DECL,
436    so stores based on such PARM_DECLs can be sunk past all loads based on
437    a distinct object.  The second restriction can be inferred from the same
438    clause: there is no write-after-write dependency between a store based
439    on such a PARM_DECL and a store based on a distinct such PARM_DECL, as
440    the compiler would be allowed to pass the parameters by copy and the
441    order of assignment to actual parameters after a call is arbitrary as
442    per the RM 6.4.1(17) clause, so stores based on distinct such PARM_DECLs
443    can be swapped.  */
444 #define DECL_RESTRICTED_ALIASING_P(NODE) \
445   DECL_LANG_FLAG_0 (PARM_DECL_CHECK (NODE))
446 
447 /* Nonzero in a DECL if it is always used by reference, i.e. an INDIRECT_REF
448    is needed to access the object.  */
449 #define DECL_BY_REF_P(NODE) DECL_LANG_FLAG_1 (NODE)
450 
451 /* Nonzero in a DECL if it is made for a pointer that can never be null.  */
452 #define DECL_CAN_NEVER_BE_NULL_P(NODE) DECL_LANG_FLAG_2 (NODE)
453 
454 /* Nonzero in a VAR_DECL if it is made for a loop parameter.  */
455 #define DECL_LOOP_PARM_P(NODE) DECL_LANG_FLAG_3 (VAR_DECL_CHECK (NODE))
456 
457 /* Nonzero in a FIELD_DECL that is a dummy built for some internal reason.  */
458 #define DECL_INTERNAL_P(NODE) DECL_LANG_FLAG_3 (FIELD_DECL_CHECK (NODE))
459 
460 /* Nonzero in a PARM_DECL if it is made for an Ada array being passed to a
461    foreign convention subprogram.  */
462 #define DECL_BY_COMPONENT_PTR_P(NODE) DECL_LANG_FLAG_3 (PARM_DECL_CHECK (NODE))
463 
464 /* Nonzero in a FUNCTION_DECL that corresponds to an elaboration procedure.  */
465 #define DECL_ELABORATION_PROC_P(NODE) \
466   DECL_LANG_FLAG_3 (FUNCTION_DECL_CHECK (NODE))
467 
468 /* Nonzero in a CONST_DECL, VAR_DECL or PARM_DECL if it is made for a pointer
469    that points to something which is readonly.  */
470 #define DECL_POINTS_TO_READONLY_P(NODE) DECL_LANG_FLAG_4 (NODE)
471 
472 /* Nonzero in a FIELD_DECL if it is invariant once set, for example if it is
473    a discriminant of a discriminated type without default expression.  */
474 #define DECL_INVARIANT_P(NODE) DECL_LANG_FLAG_4 (FIELD_DECL_CHECK (NODE))
475 
476 /* Nonzero in a FUNCTION_DECL if this is a definition, i.e. if it was created
477    by a call to gnat_to_gnu_entity with definition set to True.  */
478 #define DECL_FUNCTION_IS_DEF(NODE) \
479   DECL_LANG_FLAG_4 (FUNCTION_DECL_CHECK (NODE))
480 
481 /* Nonzero in a VAR_DECL if it is a temporary created to hold the return
482    value of a function call or 'reference to a function call.  */
483 #define DECL_RETURN_VALUE_P(NODE) DECL_LANG_FLAG_5 (VAR_DECL_CHECK (NODE))
484 
485 /* Nonzero in a PARM_DECL if its mechanism was forced to by-reference.  */
486 #define DECL_FORCED_BY_REF_P(NODE) DECL_LANG_FLAG_5 (PARM_DECL_CHECK (NODE))
487 
488 /* In a FIELD_DECL corresponding to a discriminant, contains the
489    discriminant number.  */
490 #define DECL_DISCRIMINANT_NUMBER(NODE) DECL_INITIAL (FIELD_DECL_CHECK (NODE))
491 
492 /* In a CONST_DECL, points to a VAR_DECL that is allocatable to
493    memory.  Used when a scalar constant is aliased or has its
494    address taken.  */
495 #define DECL_CONST_CORRESPONDING_VAR(NODE) \
496   GET_DECL_LANG_SPECIFIC (CONST_DECL_CHECK (NODE))
497 #define SET_DECL_CONST_CORRESPONDING_VAR(NODE, X) \
498   SET_DECL_LANG_SPECIFIC (CONST_DECL_CHECK (NODE), X)
499 
500 /* In a FIELD_DECL, points to the FIELD_DECL that was the ultimate
501    source of the decl.  */
502 #define DECL_ORIGINAL_FIELD(NODE) \
503   GET_DECL_LANG_SPECIFIC (FIELD_DECL_CHECK (NODE))
504 #define SET_DECL_ORIGINAL_FIELD(NODE, X) \
505   SET_DECL_LANG_SPECIFIC (FIELD_DECL_CHECK (NODE), X)
506 
507 /* Set DECL_ORIGINAL_FIELD of FIELD1 to (that of) FIELD2.  */
508 #define SET_DECL_ORIGINAL_FIELD_TO_FIELD(FIELD1, FIELD2)	\
509   SET_DECL_ORIGINAL_FIELD ((FIELD1),				\
510 			   DECL_ORIGINAL_FIELD (FIELD2)		\
511 			   ? DECL_ORIGINAL_FIELD (FIELD2) : (FIELD2))
512 
513 /* Return true if FIELD1 and FIELD2 represent the same field.  */
514 #define SAME_FIELD_P(FIELD1, FIELD2)					\
515   ((FIELD1) == (FIELD2)							\
516    || DECL_ORIGINAL_FIELD (FIELD1) == (FIELD2)				\
517    || (FIELD1) == DECL_ORIGINAL_FIELD (FIELD2)				\
518    || (DECL_ORIGINAL_FIELD (FIELD1)					\
519        && (DECL_ORIGINAL_FIELD (FIELD1) == DECL_ORIGINAL_FIELD (FIELD2))))
520 
521 /* In a VAR_DECL with the DECL_LOOP_PARM_P flag set, points to the special
522    induction variable that is built under certain circumstances, if any.  */
523 #define DECL_INDUCTION_VAR(NODE) \
524   GET_DECL_LANG_SPECIFIC (VAR_DECL_CHECK (NODE))
525 #define SET_DECL_INDUCTION_VAR(NODE, X) \
526   SET_DECL_LANG_SPECIFIC (VAR_DECL_CHECK (NODE), X)
527 
528 /* In a VAR_DECL without the DECL_LOOP_PARM_P flag set and that is a renaming
529    pointer, points to the object being renamed, if any.  */
530 #define DECL_RENAMED_OBJECT(NODE) \
531   GET_DECL_LANG_SPECIFIC (VAR_DECL_CHECK (NODE))
532 #define SET_DECL_RENAMED_OBJECT(NODE, X) \
533   SET_DECL_LANG_SPECIFIC (VAR_DECL_CHECK (NODE), X)
534 
535 /* In a TYPE_DECL, points to the parallel type if any, otherwise 0.  */
536 #define DECL_PARALLEL_TYPE(NODE) \
537   GET_DECL_LANG_SPECIFIC (TYPE_DECL_CHECK (NODE))
538 #define SET_DECL_PARALLEL_TYPE(NODE, X) \
539   SET_DECL_LANG_SPECIFIC (TYPE_DECL_CHECK (NODE), X)
540 
541 
542 /* Flags added to ref nodes.  */
543 
544 /* Nonzero means this node will not trap.  */
545 #undef TREE_THIS_NOTRAP
546 #define TREE_THIS_NOTRAP(NODE) \
547   (TREE_CHECK4 (NODE, INDIRECT_REF, ARRAY_REF, UNCONSTRAINED_ARRAY_REF, \
548 		ARRAY_RANGE_REF)->base.nothrow_flag)
549 
550 
551 /* Fields and macros for statements.  */
552 #define IS_ADA_STMT(NODE) \
553   (STATEMENT_CLASS_P (NODE) && TREE_CODE (NODE) >= STMT_STMT)
554 
555 #define STMT_STMT_STMT(NODE)     TREE_OPERAND_CHECK_CODE (NODE, STMT_STMT, 0)
556 
557 #define LOOP_STMT_COND(NODE)     TREE_OPERAND_CHECK_CODE (NODE, LOOP_STMT, 0)
558 #define LOOP_STMT_UPDATE(NODE)   TREE_OPERAND_CHECK_CODE (NODE, LOOP_STMT, 1)
559 #define LOOP_STMT_BODY(NODE)     TREE_OPERAND_CHECK_CODE (NODE, LOOP_STMT, 2)
560 #define LOOP_STMT_LABEL(NODE)    TREE_OPERAND_CHECK_CODE (NODE, LOOP_STMT, 3)
561 
562 /* A loop statement is conceptually made up of 6 sub-statements:
563 
564     loop:
565       TOP_CONDITION
566       TOP_UPDATE
567       BODY
568       BOTTOM_CONDITION
569       BOTTOM_UPDATE
570       GOTO loop
571 
572   However, only 4 of them can exist for a given loop, the pair of conditions
573   and the pair of updates being mutually exclusive.  The default setting is
574   TOP_CONDITION and BOTTOM_UPDATE and the following couple of flags are used
575   to toggle the individual settings.  */
576 #define LOOP_STMT_BOTTOM_COND_P(NODE) TREE_LANG_FLAG_0 (LOOP_STMT_CHECK (NODE))
577 #define LOOP_STMT_TOP_UPDATE_P(NODE)  TREE_LANG_FLAG_1 (LOOP_STMT_CHECK (NODE))
578 
579 /* Optimization hints on loops.  */
580 #define LOOP_STMT_IVDEP(NODE)     TREE_LANG_FLAG_2 (LOOP_STMT_CHECK (NODE))
581 #define LOOP_STMT_NO_UNROLL(NODE) TREE_LANG_FLAG_3 (LOOP_STMT_CHECK (NODE))
582 #define LOOP_STMT_UNROLL(NODE)    TREE_LANG_FLAG_4 (LOOP_STMT_CHECK (NODE))
583 #define LOOP_STMT_NO_VECTOR(NODE) TREE_LANG_FLAG_5 (LOOP_STMT_CHECK (NODE))
584 #define LOOP_STMT_VECTOR(NODE)    TREE_LANG_FLAG_6 (LOOP_STMT_CHECK (NODE))
585 
586 #define EXIT_STMT_COND(NODE)     TREE_OPERAND_CHECK_CODE (NODE, EXIT_STMT, 0)
587 #define EXIT_STMT_LABEL(NODE)    TREE_OPERAND_CHECK_CODE (NODE, EXIT_STMT, 1)
588 
589 /* Small kludge to be able to define Ada built-in functions locally.
590    We overload them on top of the HSAIL/BRIG builtin functions.  */
591 #define BUILT_IN_LIKELY   BUILT_IN_HSAIL_WORKITEMABSID
592 #define BUILT_IN_UNLIKELY BUILT_IN_HSAIL_GRIDSIZE
593