re PR c++/55189 (enable -Wreturn-type by default)
[gcc.git] / gcc / cp / cp-tree.h
1 /* Definitions for C++ parsing and type checking.
2 Copyright (C) 1987-2014 Free Software Foundation, Inc.
3 Contributed by Michael Tiemann (tiemann@cygnus.com)
4
5 This file is part of GCC.
6
7 GCC is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3, or (at your option)
10 any later version.
11
12 GCC is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING3. If not see
19 <http://www.gnu.org/licenses/>. */
20
21 #ifndef GCC_CP_TREE_H
22 #define GCC_CP_TREE_H
23
24 #include "ggc.h"
25 #include "function.h"
26 #include "hashtab.h"
27 #include "vec.h"
28
29 /* In order for the format checking to accept the C++ front end
30 diagnostic framework extensions, you must include this file before
31 diagnostic-core.h, not after. We override the definition of GCC_DIAG_STYLE
32 in c-common.h. */
33 #undef GCC_DIAG_STYLE
34 #define GCC_DIAG_STYLE __gcc_cxxdiag__
35 #if defined(GCC_DIAGNOSTIC_CORE_H) || defined (GCC_C_COMMON_H)
36 #error \
37 In order for the format checking to accept the C++ front end diagnostic \
38 framework extensions, you must include this file before diagnostic-core.h and \
39 c-common.h, not after.
40 #endif
41 #include "c-family/c-common.h"
42 #include "diagnostic.h"
43
44 #include "name-lookup.h"
45
46 /* Usage of TREE_LANG_FLAG_?:
47 0: IDENTIFIER_MARKED (IDENTIFIER_NODEs)
48 NEW_EXPR_USE_GLOBAL (in NEW_EXPR).
49 DELETE_EXPR_USE_GLOBAL (in DELETE_EXPR).
50 COMPOUND_EXPR_OVERLOADED (in COMPOUND_EXPR).
51 TREE_INDIRECT_USING (in NAMESPACE_DECL).
52 CLEANUP_P (in TRY_BLOCK)
53 AGGR_INIT_VIA_CTOR_P (in AGGR_INIT_EXPR)
54 PTRMEM_OK_P (in ADDR_EXPR, OFFSET_REF, SCOPE_REF)
55 PAREN_STRING_LITERAL (in STRING_CST)
56 DECL_GNU_TLS_P (in VAR_DECL)
57 KOENIG_LOOKUP_P (in CALL_EXPR)
58 STATEMENT_LIST_NO_SCOPE (in STATEMENT_LIST).
59 EXPR_STMT_STMT_EXPR_RESULT (in EXPR_STMT)
60 STMT_EXPR_NO_SCOPE (in STMT_EXPR)
61 BIND_EXPR_TRY_BLOCK (in BIND_EXPR)
62 TYPENAME_IS_ENUM_P (in TYPENAME_TYPE)
63 OMP_FOR_GIMPLIFYING_P (in OMP_FOR, OMP_SIMD and OMP_DISTRIBUTE)
64 BASELINK_QUALIFIED_P (in BASELINK)
65 TARGET_EXPR_IMPLICIT_P (in TARGET_EXPR)
66 TEMPLATE_PARM_PARAMETER_PACK (in TEMPLATE_PARM_INDEX)
67 ATTR_IS_DEPENDENT (in the TREE_LIST for an attribute)
68 ABI_TAG_IMPLICIT (in the TREE_LIST for the argument of abi_tag)
69 CONSTRUCTOR_IS_DIRECT_INIT (in CONSTRUCTOR)
70 LAMBDA_EXPR_CAPTURES_THIS_P (in LAMBDA_EXPR)
71 DECLTYPE_FOR_LAMBDA_CAPTURE (in DECLTYPE_TYPE)
72 VEC_INIT_EXPR_IS_CONSTEXPR (in VEC_INIT_EXPR)
73 DECL_OVERRIDE_P (in FUNCTION_DECL)
74 IMPLICIT_CONV_EXPR_DIRECT_INIT (in IMPLICIT_CONV_EXPR)
75 TRANSACTION_EXPR_IS_STMT (in TRANSACTION_EXPR)
76 CONVERT_EXPR_VBASE_PATH (in CONVERT_EXPR)
77 OVL_ARG_DEPENDENT (in OVERLOAD)
78 PACK_EXPANSION_LOCAL_P (in *_PACK_EXPANSION)
79 TINFO_RECHECK_ACCESS_P (in TEMPLATE_INFO)
80 SIZEOF_EXPR_TYPE_P (in SIZEOF_EXPR)
81 1: IDENTIFIER_VIRTUAL_P (in IDENTIFIER_NODE)
82 TI_PENDING_TEMPLATE_FLAG.
83 TEMPLATE_PARMS_FOR_INLINE.
84 DELETE_EXPR_USE_VEC (in DELETE_EXPR).
85 (TREE_CALLS_NEW) (in _EXPR or _REF) (commented-out).
86 ICS_ELLIPSIS_FLAG (in _CONV)
87 DECL_INITIALIZED_P (in VAR_DECL)
88 TYPENAME_IS_CLASS_P (in TYPENAME_TYPE)
89 STMT_IS_FULL_EXPR_P (in _STMT)
90 TARGET_EXPR_LIST_INIT_P (in TARGET_EXPR)
91 LAMBDA_EXPR_MUTABLE_P (in LAMBDA_EXPR)
92 DECL_FINAL_P (in FUNCTION_DECL)
93 QUALIFIED_NAME_IS_TEMPLATE (in SCOPE_REF)
94 DECLTYPE_FOR_INIT_CAPTURE (in DECLTYPE_TYPE)
95 2: IDENTIFIER_OPNAME_P (in IDENTIFIER_NODE)
96 ICS_THIS_FLAG (in _CONV)
97 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (in VAR_DECL)
98 STATEMENT_LIST_TRY_BLOCK (in STATEMENT_LIST)
99 TYPENAME_IS_RESOLVING_P (in TYPE_NAME_TYPE)
100 TARGET_EXPR_DIRECT_INIT_P (in TARGET_EXPR)
101 FNDECL_USED_AUTO (in FUNCTION_DECL)
102 DECLTYPE_FOR_LAMBDA_PROXY (in DECLTYPE_TYPE)
103 3: (TREE_REFERENCE_EXPR) (in NON_LVALUE_EXPR) (commented-out).
104 ICS_BAD_FLAG (in _CONV)
105 FN_TRY_BLOCK_P (in TRY_BLOCK)
106 IDENTIFIER_CTOR_OR_DTOR_P (in IDENTIFIER_NODE)
107 BIND_EXPR_BODY_BLOCK (in BIND_EXPR)
108 DECL_NON_TRIVIALLY_INITIALIZED_P (in VAR_DECL)
109 4: TREE_HAS_CONSTRUCTOR (in INDIRECT_REF, SAVE_EXPR, CONSTRUCTOR,
110 or FIELD_DECL).
111 IDENTIFIER_TYPENAME_P (in IDENTIFIER_NODE)
112 DECL_TINFO_P (in VAR_DECL)
113 FUNCTION_REF_QUALIFIED (in FUNCTION_TYPE, METHOD_TYPE)
114 5: C_IS_RESERVED_WORD (in IDENTIFIER_NODE)
115 DECL_VTABLE_OR_VTT_P (in VAR_DECL)
116 FUNCTION_RVALUE_QUALIFIED (in FUNCTION_TYPE, METHOD_TYPE)
117 6: IDENTIFIER_REPO_CHOSEN (in IDENTIFIER_NODE)
118 DECL_CONSTRUCTION_VTABLE_P (in VAR_DECL)
119 TYPE_MARKED_P (in _TYPE)
120 RANGE_FOR_IVDEP (in RANGE_FOR_STMT)
121
122 Usage of TYPE_LANG_FLAG_?:
123 0: TYPE_DEPENDENT_P
124 1: TYPE_HAS_USER_CONSTRUCTOR.
125 2: unused
126 3: TYPE_FOR_JAVA.
127 4: TYPE_HAS_NONTRIVIAL_DESTRUCTOR
128 5: CLASS_TYPE_P (in RECORD_TYPE and UNION_TYPE)
129 ENUM_FIXED_UNDERLYING_TYPE_P (in ENUMERAL_TYPE)
130 AUTO_IS_DECLTYPE (in TEMPLATE_TYPE_PARM)
131 REFERENCE_VLA_OK (in REFERENCE_TYPE)
132 6: TYPE_DEPENDENT_P_VALID
133
134 Usage of DECL_LANG_FLAG_?:
135 0: DECL_ERROR_REPORTED (in VAR_DECL).
136 DECL_TEMPLATE_PARM_P (in PARM_DECL, CONST_DECL, TYPE_DECL, or TEMPLATE_DECL)
137 DECL_LOCAL_FUNCTION_P (in FUNCTION_DECL)
138 DECL_MUTABLE_P (in FIELD_DECL)
139 DECL_DEPENDENT_P (in USING_DECL)
140 1: C_TYPEDEF_EXPLICITLY_SIGNED (in TYPE_DECL).
141 DECL_TEMPLATE_INSTANTIATED (in a VAR_DECL or a FUNCTION_DECL)
142 DECL_MEMBER_TEMPLATE_P (in TEMPLATE_DECL)
143 USING_DECL_TYPENAME_P (in USING_DECL)
144 DECL_VLA_CAPTURE_P (in FIELD_DECL)
145 2: DECL_THIS_EXTERN (in VAR_DECL or FUNCTION_DECL).
146 DECL_IMPLICIT_TYPEDEF_P (in a TYPE_DECL)
147 3: DECL_IN_AGGR_P.
148 4: DECL_C_BIT_FIELD (in a FIELD_DECL)
149 DECL_ANON_UNION_VAR_P (in a VAR_DECL)
150 DECL_SELF_REFERENCE_P (in a TYPE_DECL)
151 DECL_INVALID_OVERRIDER_P (in a FUNCTION_DECL)
152 5: DECL_INTERFACE_KNOWN.
153 6: DECL_THIS_STATIC (in VAR_DECL or FUNCTION_DECL).
154 DECL_FIELD_IS_BASE (in FIELD_DECL)
155 TYPE_DECL_ALIAS_P (in TYPE_DECL)
156 7: DECL_DEAD_FOR_LOCAL (in VAR_DECL).
157 DECL_THUNK_P (in a member FUNCTION_DECL)
158 DECL_NORMAL_CAPTURE_P (in FIELD_DECL)
159 8: DECL_DECLARED_CONSTEXPR_P (in VAR_DECL, FUNCTION_DECL)
160
161 Usage of language-independent fields in a language-dependent manner:
162
163 TYPE_ALIAS_SET
164 This field is used by TYPENAME_TYPEs, TEMPLATE_TYPE_PARMs, and so
165 forth as a substitute for the mark bits provided in `lang_type'.
166 At present, only the six low-order bits are used.
167
168 TYPE_LANG_SLOT_1
169 For an ENUMERAL_TYPE, this is ENUM_TEMPLATE_INFO.
170 For a FUNCTION_TYPE or METHOD_TYPE, this is TYPE_RAISES_EXCEPTIONS
171
172 BINFO_VIRTUALS
173 For a binfo, this is a TREE_LIST. There is an entry for each
174 virtual function declared either in BINFO or its direct and
175 indirect primary bases.
176
177 The BV_DELTA of each node gives the amount by which to adjust the
178 `this' pointer when calling the function. If the method is an
179 overridden version of a base class method, then it is assumed
180 that, prior to adjustment, the this pointer points to an object
181 of the base class.
182
183 The BV_VCALL_INDEX of each node, if non-NULL, gives the vtable
184 index of the vcall offset for this entry.
185
186 The BV_FN is the declaration for the virtual function itself.
187
188 If BV_LOST_PRIMARY is set, it means that this entry is for a lost
189 primary virtual base and can be left null in the vtable.
190
191 BINFO_VTABLE
192 This is an expression with POINTER_TYPE that gives the value
193 to which the vptr should be initialized. Use get_vtbl_decl_for_binfo
194 to extract the VAR_DECL for the complete vtable.
195
196 DECL_VINDEX
197 This field is NULL for a non-virtual function. For a virtual
198 function, it is eventually set to an INTEGER_CST indicating the
199 index in the vtable at which this function can be found. When
200 a virtual function is declared, but before it is known what
201 function is overridden, this field is the error_mark_node.
202
203 Temporarily, it may be set to a TREE_LIST whose TREE_VALUE is
204 the virtual function this one overrides, and whose TREE_CHAIN is
205 the old DECL_VINDEX. */
206
207 /* Language-specific tree checkers. */
208
209 #define VAR_OR_FUNCTION_DECL_CHECK(NODE) \
210 TREE_CHECK2(NODE,VAR_DECL,FUNCTION_DECL)
211
212 #define TYPE_FUNCTION_OR_TEMPLATE_DECL_CHECK(NODE) \
213 TREE_CHECK3(NODE,TYPE_DECL,TEMPLATE_DECL,FUNCTION_DECL)
214
215 #define TYPE_FUNCTION_OR_TEMPLATE_DECL_P(NODE) \
216 (TREE_CODE (NODE) == TYPE_DECL || TREE_CODE (NODE) == TEMPLATE_DECL \
217 || TREE_CODE (NODE) == FUNCTION_DECL)
218
219 #define VAR_FUNCTION_OR_PARM_DECL_CHECK(NODE) \
220 TREE_CHECK3(NODE,VAR_DECL,FUNCTION_DECL,PARM_DECL)
221
222 #define VAR_TEMPL_TYPE_OR_FUNCTION_DECL_CHECK(NODE) \
223 TREE_CHECK4(NODE,VAR_DECL,FUNCTION_DECL,TYPE_DECL,TEMPLATE_DECL)
224
225 #define VAR_TEMPL_TYPE_FIELD_OR_FUNCTION_DECL_CHECK(NODE) \
226 TREE_CHECK5(NODE,VAR_DECL,FIELD_DECL,FUNCTION_DECL,TYPE_DECL,TEMPLATE_DECL)
227
228 #define BOUND_TEMPLATE_TEMPLATE_PARM_TYPE_CHECK(NODE) \
229 TREE_CHECK(NODE,BOUND_TEMPLATE_TEMPLATE_PARM)
230
231 #if defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 2007)
232 #define THUNK_FUNCTION_CHECK(NODE) __extension__ \
233 ({ __typeof (NODE) const __t = (NODE); \
234 if (TREE_CODE (__t) != FUNCTION_DECL || !__t->decl_common.lang_specific \
235 || !__t->decl_common.lang_specific->u.fn.thunk_p) \
236 tree_check_failed (__t, __FILE__, __LINE__, __FUNCTION__, 0); \
237 __t; })
238 #else
239 #define THUNK_FUNCTION_CHECK(NODE) (NODE)
240 #endif
241 \f
242 /* Language-dependent contents of an identifier. */
243
244 struct GTY(()) lang_identifier {
245 struct c_common_identifier c_common;
246 cxx_binding *namespace_bindings;
247 cxx_binding *bindings;
248 tree class_template_info;
249 tree label_value;
250 };
251
252 /* Return a typed pointer version of T if it designates a
253 C++ front-end identifier. */
254 inline lang_identifier*
255 identifier_p (tree t)
256 {
257 if (TREE_CODE (t) == IDENTIFIER_NODE)
258 return (lang_identifier*) t;
259 return NULL;
260 }
261
262 /* In an IDENTIFIER_NODE, nonzero if this identifier is actually a
263 keyword. C_RID_CODE (node) is then the RID_* value of the keyword,
264 and C_RID_YYCODE is the token number wanted by Yacc. */
265
266 #define C_IS_RESERVED_WORD(ID) TREE_LANG_FLAG_5 (ID)
267
268 #define LANG_IDENTIFIER_CAST(NODE) \
269 ((struct lang_identifier*)IDENTIFIER_NODE_CHECK (NODE))
270
271 struct GTY(()) template_parm_index_s {
272 struct tree_common common;
273 int index;
274 int level;
275 int orig_level;
276 tree decl;
277 };
278 typedef struct template_parm_index_s template_parm_index;
279
280 struct GTY(()) ptrmem_cst {
281 struct tree_common common;
282 tree member;
283 };
284 typedef struct ptrmem_cst * ptrmem_cst_t;
285
286 #define IDENTIFIER_GLOBAL_VALUE(NODE) \
287 namespace_binding ((NODE), global_namespace)
288 #define SET_IDENTIFIER_GLOBAL_VALUE(NODE, VAL) \
289 set_namespace_binding ((NODE), global_namespace, (VAL))
290 #define IDENTIFIER_NAMESPACE_VALUE(NODE) \
291 namespace_binding ((NODE), current_namespace)
292 #define SET_IDENTIFIER_NAMESPACE_VALUE(NODE, VAL) \
293 set_namespace_binding ((NODE), current_namespace, (VAL))
294
295 #define CLEANUP_P(NODE) TREE_LANG_FLAG_0 (TRY_BLOCK_CHECK (NODE))
296
297 #define BIND_EXPR_TRY_BLOCK(NODE) \
298 TREE_LANG_FLAG_0 (BIND_EXPR_CHECK (NODE))
299
300 /* Used to mark the block around the member initializers and cleanups. */
301 #define BIND_EXPR_BODY_BLOCK(NODE) \
302 TREE_LANG_FLAG_3 (BIND_EXPR_CHECK (NODE))
303 #define FUNCTION_NEEDS_BODY_BLOCK(NODE) \
304 (DECL_CONSTRUCTOR_P (NODE) || DECL_DESTRUCTOR_P (NODE) \
305 || LAMBDA_FUNCTION_P (NODE))
306
307 #define STATEMENT_LIST_NO_SCOPE(NODE) \
308 TREE_LANG_FLAG_0 (STATEMENT_LIST_CHECK (NODE))
309 #define STATEMENT_LIST_TRY_BLOCK(NODE) \
310 TREE_LANG_FLAG_2 (STATEMENT_LIST_CHECK (NODE))
311
312 /* Nonzero if this statement should be considered a full-expression,
313 i.e., if temporaries created during this statement should have
314 their destructors run at the end of this statement. */
315 #define STMT_IS_FULL_EXPR_P(NODE) TREE_LANG_FLAG_1 ((NODE))
316
317 /* Marks the result of a statement expression. */
318 #define EXPR_STMT_STMT_EXPR_RESULT(NODE) \
319 TREE_LANG_FLAG_0 (EXPR_STMT_CHECK (NODE))
320
321 /* Nonzero if this statement-expression does not have an associated scope. */
322 #define STMT_EXPR_NO_SCOPE(NODE) \
323 TREE_LANG_FLAG_0 (STMT_EXPR_CHECK (NODE))
324
325 /* Returns nonzero iff TYPE1 and TYPE2 are the same type, in the usual
326 sense of `same'. */
327 #define same_type_p(TYPE1, TYPE2) \
328 comptypes ((TYPE1), (TYPE2), COMPARE_STRICT)
329
330 /* Returns nonzero iff NODE is a declaration for the global function
331 `main'. */
332 #define DECL_MAIN_P(NODE) \
333 (DECL_EXTERN_C_FUNCTION_P (NODE) \
334 && DECL_NAME (NODE) != NULL_TREE \
335 && MAIN_NAME_P (DECL_NAME (NODE)) \
336 && flag_hosted)
337
338 /* The overloaded FUNCTION_DECL. */
339 #define OVL_FUNCTION(NODE) \
340 (((struct tree_overload*)OVERLOAD_CHECK (NODE))->function)
341 #define OVL_CHAIN(NODE) TREE_CHAIN (NODE)
342 /* Polymorphic access to FUNCTION and CHAIN. */
343 #define OVL_CURRENT(NODE) \
344 ((TREE_CODE (NODE) == OVERLOAD) ? OVL_FUNCTION (NODE) : (NODE))
345 #define OVL_NEXT(NODE) \
346 ((TREE_CODE (NODE) == OVERLOAD) ? TREE_CHAIN (NODE) : NULL_TREE)
347 /* If set, this was imported in a using declaration.
348 This is not to confuse with being used somewhere, which
349 is not important for this node. */
350 #define OVL_USED(NODE) TREE_USED (OVERLOAD_CHECK (NODE))
351 /* If set, this OVERLOAD was created for argument-dependent lookup
352 and can be freed afterward. */
353 #define OVL_ARG_DEPENDENT(NODE) TREE_LANG_FLAG_0 (OVERLOAD_CHECK (NODE))
354
355 struct GTY(()) tree_overload {
356 struct tree_common common;
357 tree function;
358 };
359
360 /* Returns true iff NODE is a BASELINK. */
361 #define BASELINK_P(NODE) \
362 (TREE_CODE (NODE) == BASELINK)
363 /* The BINFO indicating the base in which lookup found the
364 BASELINK_FUNCTIONS. */
365 #define BASELINK_BINFO(NODE) \
366 (((struct tree_baselink*) BASELINK_CHECK (NODE))->binfo)
367 /* The functions referred to by the BASELINK; either a FUNCTION_DECL,
368 a TEMPLATE_DECL, an OVERLOAD, or a TEMPLATE_ID_EXPR. */
369 #define BASELINK_FUNCTIONS(NODE) \
370 (((struct tree_baselink*) BASELINK_CHECK (NODE))->functions)
371 /* The BINFO in which the search for the functions indicated by this baselink
372 began. This base is used to determine the accessibility of functions
373 selected by overload resolution. */
374 #define BASELINK_ACCESS_BINFO(NODE) \
375 (((struct tree_baselink*) BASELINK_CHECK (NODE))->access_binfo)
376 /* For a type-conversion operator, the BASELINK_OPTYPE indicates the type
377 to which the conversion should occur. This value is important if
378 the BASELINK_FUNCTIONS include a template conversion operator --
379 the BASELINK_OPTYPE can be used to determine what type the user
380 requested. */
381 #define BASELINK_OPTYPE(NODE) \
382 (TREE_CHAIN (BASELINK_CHECK (NODE)))
383 /* Nonzero if this baselink was from a qualified lookup. */
384 #define BASELINK_QUALIFIED_P(NODE) \
385 TREE_LANG_FLAG_0 (BASELINK_CHECK (NODE))
386
387 struct GTY(()) tree_baselink {
388 struct tree_common common;
389 tree binfo;
390 tree functions;
391 tree access_binfo;
392 };
393
394 /* The different kinds of ids that we encounter. */
395
396 typedef enum cp_id_kind
397 {
398 /* Not an id at all. */
399 CP_ID_KIND_NONE,
400 /* An unqualified-id that is not a template-id. */
401 CP_ID_KIND_UNQUALIFIED,
402 /* An unqualified-id that is a dependent name. */
403 CP_ID_KIND_UNQUALIFIED_DEPENDENT,
404 /* An unqualified template-id. */
405 CP_ID_KIND_TEMPLATE_ID,
406 /* A qualified-id. */
407 CP_ID_KIND_QUALIFIED
408 } cp_id_kind;
409
410
411 /* The various kinds of C++0x warnings we encounter. */
412
413 typedef enum cpp0x_warn_str
414 {
415 /* extended initializer lists */
416 CPP0X_INITIALIZER_LISTS,
417 /* explicit conversion operators */
418 CPP0X_EXPLICIT_CONVERSION,
419 /* variadic templates */
420 CPP0X_VARIADIC_TEMPLATES,
421 /* lambda expressions */
422 CPP0X_LAMBDA_EXPR,
423 /* C++0x auto */
424 CPP0X_AUTO,
425 /* scoped enums */
426 CPP0X_SCOPED_ENUMS,
427 /* defaulted and deleted functions */
428 CPP0X_DEFAULTED_DELETED,
429 /* inline namespaces */
430 CPP0X_INLINE_NAMESPACES,
431 /* override controls, override/final */
432 CPP0X_OVERRIDE_CONTROLS,
433 /* non-static data member initializers */
434 CPP0X_NSDMI,
435 /* user defined literals */
436 CPP0X_USER_DEFINED_LITERALS,
437 /* delegating constructors */
438 CPP0X_DELEGATING_CTORS,
439 /* inheriting constructors */
440 CPP0X_INHERITING_CTORS,
441 /* C++11 attributes */
442 CPP0X_ATTRIBUTES,
443 /* ref-qualified member functions */
444 CPP0X_REF_QUALIFIER
445 } cpp0x_warn_str;
446
447 /* The various kinds of operation used by composite_pointer_type. */
448
449 typedef enum composite_pointer_operation
450 {
451 /* comparison */
452 CPO_COMPARISON,
453 /* conversion */
454 CPO_CONVERSION,
455 /* conditional expression */
456 CPO_CONDITIONAL_EXPR
457 } composite_pointer_operation;
458
459 /* Possible cases of expression list used by build_x_compound_expr_from_list. */
460 typedef enum expr_list_kind {
461 ELK_INIT, /* initializer */
462 ELK_MEM_INIT, /* member initializer */
463 ELK_FUNC_CAST /* functional cast */
464 } expr_list_kind;
465
466 /* Possible cases of implicit bad rhs conversions. */
467 typedef enum impl_conv_rhs {
468 ICR_DEFAULT_ARGUMENT, /* default argument */
469 ICR_CONVERTING, /* converting */
470 ICR_INIT, /* initialization */
471 ICR_ARGPASS, /* argument passing */
472 ICR_RETURN, /* return */
473 ICR_ASSIGN /* assignment */
474 } impl_conv_rhs;
475
476 /* Possible cases of implicit or explicit bad conversions to void. */
477 typedef enum impl_conv_void {
478 ICV_CAST, /* (explicit) conversion to void */
479 ICV_SECOND_OF_COND, /* second operand of conditional expression */
480 ICV_THIRD_OF_COND, /* third operand of conditional expression */
481 ICV_RIGHT_OF_COMMA, /* right operand of comma operator */
482 ICV_LEFT_OF_COMMA, /* left operand of comma operator */
483 ICV_STATEMENT, /* statement */
484 ICV_THIRD_IN_FOR /* for increment expression */
485 } impl_conv_void;
486
487 /* Possible invalid uses of an abstract class that might not have a
488 specific associated declaration. */
489 typedef enum abstract_class_use {
490 ACU_UNKNOWN, /* unknown or decl provided */
491 ACU_CAST, /* cast to abstract class */
492 ACU_NEW, /* new-expression of abstract class */
493 ACU_THROW, /* throw-expression of abstract class */
494 ACU_CATCH, /* catch-parameter of abstract class */
495 ACU_ARRAY, /* array of abstract class */
496 ACU_RETURN, /* return type of abstract class */
497 ACU_PARM /* parameter type of abstract class */
498 } abstract_class_use;
499
500 /* Macros for access to language-specific slots in an identifier. */
501
502 #define IDENTIFIER_NAMESPACE_BINDINGS(NODE) \
503 (LANG_IDENTIFIER_CAST (NODE)->namespace_bindings)
504 #define IDENTIFIER_TEMPLATE(NODE) \
505 (LANG_IDENTIFIER_CAST (NODE)->class_template_info)
506
507 /* The IDENTIFIER_BINDING is the innermost cxx_binding for the
508 identifier. It's PREVIOUS is the next outermost binding. Each
509 VALUE field is a DECL for the associated declaration. Thus,
510 name lookup consists simply of pulling off the node at the front
511 of the list (modulo oddities for looking up the names of types,
512 and such.) You can use SCOPE field to determine the scope
513 that bound the name. */
514 #define IDENTIFIER_BINDING(NODE) \
515 (LANG_IDENTIFIER_CAST (NODE)->bindings)
516
517 /* TREE_TYPE only indicates on local and class scope the current
518 type. For namespace scope, the presence of a type in any namespace
519 is indicated with global_type_node, and the real type behind must
520 be found through lookup. */
521 #define IDENTIFIER_TYPE_VALUE(NODE) identifier_type_value (NODE)
522 #define REAL_IDENTIFIER_TYPE_VALUE(NODE) TREE_TYPE (NODE)
523 #define SET_IDENTIFIER_TYPE_VALUE(NODE,TYPE) (TREE_TYPE (NODE) = (TYPE))
524 #define IDENTIFIER_HAS_TYPE_VALUE(NODE) (IDENTIFIER_TYPE_VALUE (NODE) ? 1 : 0)
525
526 #define IDENTIFIER_LABEL_VALUE(NODE) \
527 (LANG_IDENTIFIER_CAST (NODE)->label_value)
528 #define SET_IDENTIFIER_LABEL_VALUE(NODE, VALUE) \
529 IDENTIFIER_LABEL_VALUE (NODE) = (VALUE)
530
531 /* Nonzero if this identifier is used as a virtual function name somewhere
532 (optimizes searches). */
533 #define IDENTIFIER_VIRTUAL_P(NODE) TREE_LANG_FLAG_1 (NODE)
534
535 /* Nonzero if this identifier is the prefix for a mangled C++ operator
536 name. */
537 #define IDENTIFIER_OPNAME_P(NODE) TREE_LANG_FLAG_2 (NODE)
538
539 /* Nonzero if this identifier is the name of a type-conversion
540 operator. */
541 #define IDENTIFIER_TYPENAME_P(NODE) \
542 TREE_LANG_FLAG_4 (NODE)
543
544 /* Nonzero if this identifier is the name of a constructor or
545 destructor. */
546 #define IDENTIFIER_CTOR_OR_DTOR_P(NODE) \
547 TREE_LANG_FLAG_3 (NODE)
548
549 /* True iff NAME is the DECL_ASSEMBLER_NAME for an entity with vague
550 linkage which the prelinker has assigned to this translation
551 unit. */
552 #define IDENTIFIER_REPO_CHOSEN(NAME) \
553 (TREE_LANG_FLAG_6 (NAME))
554
555 /* In a RECORD_TYPE or UNION_TYPE, nonzero if any component is read-only. */
556 #define C_TYPE_FIELDS_READONLY(TYPE) \
557 (LANG_TYPE_CLASS_CHECK (TYPE)->fields_readonly)
558
559 /* The tokens stored in the default argument. */
560
561 #define DEFARG_TOKENS(NODE) \
562 (((struct tree_default_arg *)DEFAULT_ARG_CHECK (NODE))->tokens)
563 #define DEFARG_INSTANTIATIONS(NODE) \
564 (((struct tree_default_arg *)DEFAULT_ARG_CHECK (NODE))->instantiations)
565
566 struct GTY (()) tree_default_arg {
567 struct tree_common common;
568 struct cp_token_cache *tokens;
569 vec<tree, va_gc> *instantiations;
570 };
571
572
573 #define DEFERRED_NOEXCEPT_PATTERN(NODE) \
574 (((struct tree_deferred_noexcept *)DEFERRED_NOEXCEPT_CHECK (NODE))->pattern)
575 #define DEFERRED_NOEXCEPT_ARGS(NODE) \
576 (((struct tree_deferred_noexcept *)DEFERRED_NOEXCEPT_CHECK (NODE))->args)
577 #define DEFERRED_NOEXCEPT_SPEC_P(NODE) \
578 ((NODE) && (TREE_PURPOSE (NODE)) \
579 && (TREE_CODE (TREE_PURPOSE (NODE)) == DEFERRED_NOEXCEPT \
580 || is_overloaded_fn (TREE_PURPOSE (NODE))))
581
582 struct GTY (()) tree_deferred_noexcept {
583 struct tree_base base;
584 tree pattern;
585 tree args;
586 };
587
588
589 /* The condition associated with the static assertion. This must be
590 an integral constant expression. */
591 #define STATIC_ASSERT_CONDITION(NODE) \
592 (((struct tree_static_assert *)STATIC_ASSERT_CHECK (NODE))->condition)
593
594 /* The message associated with the static assertion. This must be a
595 string constant, which will be emitted as an error message when the
596 static assert condition is false. */
597 #define STATIC_ASSERT_MESSAGE(NODE) \
598 (((struct tree_static_assert *)STATIC_ASSERT_CHECK (NODE))->message)
599
600 /* Source location information for a static assertion. */
601 #define STATIC_ASSERT_SOURCE_LOCATION(NODE) \
602 (((struct tree_static_assert *)STATIC_ASSERT_CHECK (NODE))->location)
603
604 struct GTY (()) tree_static_assert {
605 struct tree_common common;
606 tree condition;
607 tree message;
608 location_t location;
609 };
610
611 struct GTY (()) tree_argument_pack_select {
612 struct tree_common common;
613 tree argument_pack;
614 int index;
615 };
616
617 /* The different kinds of traits that we encounter. */
618
619 typedef enum cp_trait_kind
620 {
621 CPTK_BASES,
622 CPTK_DIRECT_BASES,
623 CPTK_HAS_NOTHROW_ASSIGN,
624 CPTK_HAS_NOTHROW_CONSTRUCTOR,
625 CPTK_HAS_NOTHROW_COPY,
626 CPTK_HAS_TRIVIAL_ASSIGN,
627 CPTK_HAS_TRIVIAL_CONSTRUCTOR,
628 CPTK_HAS_TRIVIAL_COPY,
629 CPTK_HAS_TRIVIAL_DESTRUCTOR,
630 CPTK_HAS_VIRTUAL_DESTRUCTOR,
631 CPTK_IS_ABSTRACT,
632 CPTK_IS_BASE_OF,
633 CPTK_IS_CLASS,
634 CPTK_IS_CONVERTIBLE_TO,
635 CPTK_IS_EMPTY,
636 CPTK_IS_ENUM,
637 CPTK_IS_FINAL,
638 CPTK_IS_LITERAL_TYPE,
639 CPTK_IS_POD,
640 CPTK_IS_POLYMORPHIC,
641 CPTK_IS_STD_LAYOUT,
642 CPTK_IS_TRIVIAL,
643 CPTK_IS_UNION,
644 CPTK_UNDERLYING_TYPE
645 } cp_trait_kind;
646
647 /* The types that we are processing. */
648 #define TRAIT_EXPR_TYPE1(NODE) \
649 (((struct tree_trait_expr *)TRAIT_EXPR_CHECK (NODE))->type1)
650
651 #define TRAIT_EXPR_TYPE2(NODE) \
652 (((struct tree_trait_expr *)TRAIT_EXPR_CHECK (NODE))->type2)
653
654 /* The specific trait that we are processing. */
655 #define TRAIT_EXPR_KIND(NODE) \
656 (((struct tree_trait_expr *)TRAIT_EXPR_CHECK (NODE))->kind)
657
658 struct GTY (()) tree_trait_expr {
659 struct tree_common common;
660 tree type1;
661 tree type2;
662 enum cp_trait_kind kind;
663 };
664
665 /* Based off of TYPE_ANONYMOUS_P. */
666 #define LAMBDA_TYPE_P(NODE) \
667 (CLASS_TYPE_P (NODE) && CLASSTYPE_LAMBDA_EXPR (NODE))
668
669 /* Test if FUNCTION_DECL is a lambda function. */
670 #define LAMBDA_FUNCTION_P(FNDECL) \
671 (DECL_OVERLOADED_OPERATOR_P (FNDECL) == CALL_EXPR \
672 && LAMBDA_TYPE_P (CP_DECL_CONTEXT (FNDECL)))
673
674 enum cp_lambda_default_capture_mode_type {
675 CPLD_NONE,
676 CPLD_COPY,
677 CPLD_REFERENCE
678 };
679
680 /* The method of default capture, if any. */
681 #define LAMBDA_EXPR_DEFAULT_CAPTURE_MODE(NODE) \
682 (((struct tree_lambda_expr *)LAMBDA_EXPR_CHECK (NODE))->default_capture_mode)
683
684 /* The capture-list, including `this'. Each capture is stored as a FIELD_DECL
685 * so that the name, type, and field are all together, whether or not it has
686 * been added to the lambda's class type.
687 TREE_LIST:
688 TREE_PURPOSE: The FIELD_DECL for this capture.
689 TREE_VALUE: The initializer. This is part of a GNU extension. */
690 #define LAMBDA_EXPR_CAPTURE_LIST(NODE) \
691 (((struct tree_lambda_expr *)LAMBDA_EXPR_CHECK (NODE))->capture_list)
692
693 /* During parsing of the lambda-introducer, the node in the capture-list
694 that holds the 'this' capture. During parsing of the body, the
695 capture proxy for that node. */
696 #define LAMBDA_EXPR_THIS_CAPTURE(NODE) \
697 (((struct tree_lambda_expr *)LAMBDA_EXPR_CHECK (NODE))->this_capture)
698
699 /* Predicate tracking whether `this' is in the effective capture set. */
700 #define LAMBDA_EXPR_CAPTURES_THIS_P(NODE) \
701 LAMBDA_EXPR_THIS_CAPTURE(NODE)
702
703 /* Predicate tracking whether the lambda was declared 'mutable'. */
704 #define LAMBDA_EXPR_MUTABLE_P(NODE) \
705 TREE_LANG_FLAG_1 (LAMBDA_EXPR_CHECK (NODE))
706
707 /* The return type in the expression.
708 * NULL_TREE indicates that none was specified. */
709 #define LAMBDA_EXPR_RETURN_TYPE(NODE) \
710 (((struct tree_lambda_expr *)LAMBDA_EXPR_CHECK (NODE))->return_type)
711
712 /* The source location of the lambda. */
713 #define LAMBDA_EXPR_LOCATION(NODE) \
714 (((struct tree_lambda_expr *)LAMBDA_EXPR_CHECK (NODE))->locus)
715
716 /* The mangling scope for the lambda: FUNCTION_DECL, PARM_DECL, VAR_DECL,
717 FIELD_DECL or NULL_TREE. If this is NULL_TREE, we have no linkage. */
718 #define LAMBDA_EXPR_EXTRA_SCOPE(NODE) \
719 (((struct tree_lambda_expr *)LAMBDA_EXPR_CHECK (NODE))->extra_scope)
720
721 /* If EXTRA_SCOPE, this is the number of the lambda within that scope. */
722 #define LAMBDA_EXPR_DISCRIMINATOR(NODE) \
723 (((struct tree_lambda_expr *)LAMBDA_EXPR_CHECK (NODE))->discriminator)
724
725 /* During parsing of the lambda, a vector of capture proxies which need
726 to be pushed once we're done processing a nested lambda. */
727 #define LAMBDA_EXPR_PENDING_PROXIES(NODE) \
728 (((struct tree_lambda_expr *)LAMBDA_EXPR_CHECK (NODE))->pending_proxies)
729
730 /* The closure type of the lambda. Note that the TREE_TYPE of a
731 LAMBDA_EXPR is always NULL_TREE, because we need to instantiate the
732 LAMBDA_EXPR in order to instantiate the type. */
733 #define LAMBDA_EXPR_CLOSURE(NODE) \
734 (((struct tree_lambda_expr *)LAMBDA_EXPR_CHECK (NODE))->closure)
735
736 struct GTY (()) tree_lambda_expr
737 {
738 struct tree_typed typed;
739 tree capture_list;
740 tree this_capture;
741 tree return_type;
742 tree extra_scope;
743 tree closure;
744 vec<tree, va_gc> *pending_proxies;
745 location_t locus;
746 enum cp_lambda_default_capture_mode_type default_capture_mode;
747 int discriminator;
748 };
749
750 /* A (typedef,context,usage location) triplet.
751 It represents a typedef used through a
752 context at a given source location.
753 e.g.
754 struct foo {
755 typedef int myint;
756 };
757
758 struct bar {
759 foo::myint v; // #1<-- this location.
760 };
761
762 In bar, the triplet will be (myint, foo, #1).
763 */
764 struct GTY(()) qualified_typedef_usage_s {
765 tree typedef_decl;
766 tree context;
767 location_t locus;
768 };
769 typedef struct qualified_typedef_usage_s qualified_typedef_usage_t;
770
771 /* Non-zero if this template specialization has access violations that
772 should be rechecked when the function is instantiated outside argument
773 deduction. */
774 #define TINFO_HAS_ACCESS_ERRORS(NODE) \
775 (TREE_LANG_FLAG_0 (TEMPLATE_INFO_CHECK (NODE)))
776 #define FNDECL_HAS_ACCESS_ERRORS(NODE) \
777 (TINFO_HAS_ACCESS_ERRORS (DECL_TEMPLATE_INFO (NODE)))
778
779 struct GTY(()) tree_template_info {
780 struct tree_common common;
781 vec<qualified_typedef_usage_t, va_gc> *typedefs_needing_access_checking;
782 };
783
784 enum cp_tree_node_structure_enum {
785 TS_CP_GENERIC,
786 TS_CP_IDENTIFIER,
787 TS_CP_TPI,
788 TS_CP_PTRMEM,
789 TS_CP_BINDING,
790 TS_CP_OVERLOAD,
791 TS_CP_BASELINK,
792 TS_CP_WRAPPER,
793 TS_CP_DEFAULT_ARG,
794 TS_CP_DEFERRED_NOEXCEPT,
795 TS_CP_STATIC_ASSERT,
796 TS_CP_ARGUMENT_PACK_SELECT,
797 TS_CP_TRAIT_EXPR,
798 TS_CP_LAMBDA_EXPR,
799 TS_CP_TEMPLATE_INFO,
800 TS_CP_USERDEF_LITERAL,
801 LAST_TS_CP_ENUM
802 };
803
804 /* The resulting tree type. */
805 union GTY((desc ("cp_tree_node_structure (&%h)"),
806 chain_next ("(union lang_tree_node *) c_tree_chain_next (&%h.generic)"))) lang_tree_node {
807 union tree_node GTY ((tag ("TS_CP_GENERIC"),
808 desc ("tree_node_structure (&%h)"))) generic;
809 struct template_parm_index_s GTY ((tag ("TS_CP_TPI"))) tpi;
810 struct ptrmem_cst GTY ((tag ("TS_CP_PTRMEM"))) ptrmem;
811 struct tree_overload GTY ((tag ("TS_CP_OVERLOAD"))) overload;
812 struct tree_baselink GTY ((tag ("TS_CP_BASELINK"))) baselink;
813 struct tree_default_arg GTY ((tag ("TS_CP_DEFAULT_ARG"))) default_arg;
814 struct tree_deferred_noexcept GTY ((tag ("TS_CP_DEFERRED_NOEXCEPT"))) deferred_noexcept;
815 struct lang_identifier GTY ((tag ("TS_CP_IDENTIFIER"))) identifier;
816 struct tree_static_assert GTY ((tag ("TS_CP_STATIC_ASSERT")))
817 static_assertion;
818 struct tree_argument_pack_select GTY ((tag ("TS_CP_ARGUMENT_PACK_SELECT")))
819 argument_pack_select;
820 struct tree_trait_expr GTY ((tag ("TS_CP_TRAIT_EXPR")))
821 trait_expression;
822 struct tree_lambda_expr GTY ((tag ("TS_CP_LAMBDA_EXPR")))
823 lambda_expression;
824 struct tree_template_info GTY ((tag ("TS_CP_TEMPLATE_INFO")))
825 template_info;
826 struct tree_userdef_literal GTY ((tag ("TS_CP_USERDEF_LITERAL")))
827 userdef_literal;
828 };
829
830 \f
831 enum cp_tree_index
832 {
833 CPTI_JAVA_BYTE_TYPE,
834 CPTI_JAVA_SHORT_TYPE,
835 CPTI_JAVA_INT_TYPE,
836 CPTI_JAVA_LONG_TYPE,
837 CPTI_JAVA_FLOAT_TYPE,
838 CPTI_JAVA_DOUBLE_TYPE,
839 CPTI_JAVA_CHAR_TYPE,
840 CPTI_JAVA_BOOLEAN_TYPE,
841
842 CPTI_WCHAR_DECL,
843 CPTI_VTABLE_ENTRY_TYPE,
844 CPTI_DELTA_TYPE,
845 CPTI_VTABLE_INDEX_TYPE,
846 CPTI_CLEANUP_TYPE,
847 CPTI_VTT_PARM_TYPE,
848
849 CPTI_CLASS_TYPE,
850 CPTI_UNKNOWN_TYPE,
851 CPTI_INIT_LIST_TYPE,
852 CPTI_VTBL_TYPE,
853 CPTI_VTBL_PTR_TYPE,
854 CPTI_STD,
855 CPTI_ABI,
856 CPTI_CONST_TYPE_INFO_TYPE,
857 CPTI_TYPE_INFO_PTR_TYPE,
858 CPTI_ABORT_FNDECL,
859 CPTI_GLOBAL_DELETE_FNDECL,
860 CPTI_AGGR_TAG,
861
862 CPTI_CTOR_IDENTIFIER,
863 CPTI_COMPLETE_CTOR_IDENTIFIER,
864 CPTI_BASE_CTOR_IDENTIFIER,
865 CPTI_DTOR_IDENTIFIER,
866 CPTI_COMPLETE_DTOR_IDENTIFIER,
867 CPTI_BASE_DTOR_IDENTIFIER,
868 CPTI_DELETING_DTOR_IDENTIFIER,
869 CPTI_DELTA_IDENTIFIER,
870 CPTI_IN_CHARGE_IDENTIFIER,
871 CPTI_VTT_PARM_IDENTIFIER,
872 CPTI_NELTS_IDENTIFIER,
873 CPTI_THIS_IDENTIFIER,
874 CPTI_PFN_IDENTIFIER,
875 CPTI_VPTR_IDENTIFIER,
876 CPTI_STD_IDENTIFIER,
877
878 CPTI_LANG_NAME_C,
879 CPTI_LANG_NAME_CPLUSPLUS,
880 CPTI_LANG_NAME_JAVA,
881
882 CPTI_EMPTY_EXCEPT_SPEC,
883 CPTI_NOEXCEPT_TRUE_SPEC,
884 CPTI_NOEXCEPT_FALSE_SPEC,
885 CPTI_JCLASS,
886 CPTI_TERMINATE,
887 CPTI_CALL_UNEXPECTED,
888 CPTI_ATEXIT_FN_PTR_TYPE,
889 CPTI_ATEXIT,
890 CPTI_DSO_HANDLE,
891 CPTI_DCAST,
892
893 CPTI_KEYED_CLASSES,
894
895 CPTI_NULLPTR,
896 CPTI_NULLPTR_TYPE,
897
898 CPTI_MAX
899 };
900
901 extern GTY(()) tree cp_global_trees[CPTI_MAX];
902
903 #define java_byte_type_node cp_global_trees[CPTI_JAVA_BYTE_TYPE]
904 #define java_short_type_node cp_global_trees[CPTI_JAVA_SHORT_TYPE]
905 #define java_int_type_node cp_global_trees[CPTI_JAVA_INT_TYPE]
906 #define java_long_type_node cp_global_trees[CPTI_JAVA_LONG_TYPE]
907 #define java_float_type_node cp_global_trees[CPTI_JAVA_FLOAT_TYPE]
908 #define java_double_type_node cp_global_trees[CPTI_JAVA_DOUBLE_TYPE]
909 #define java_char_type_node cp_global_trees[CPTI_JAVA_CHAR_TYPE]
910 #define java_boolean_type_node cp_global_trees[CPTI_JAVA_BOOLEAN_TYPE]
911
912 #define wchar_decl_node cp_global_trees[CPTI_WCHAR_DECL]
913 #define vtable_entry_type cp_global_trees[CPTI_VTABLE_ENTRY_TYPE]
914 /* The type used to represent an offset by which to adjust the `this'
915 pointer in pointer-to-member types. */
916 #define delta_type_node cp_global_trees[CPTI_DELTA_TYPE]
917 /* The type used to represent an index into the vtable. */
918 #define vtable_index_type cp_global_trees[CPTI_VTABLE_INDEX_TYPE]
919
920 #define class_type_node cp_global_trees[CPTI_CLASS_TYPE]
921 #define unknown_type_node cp_global_trees[CPTI_UNKNOWN_TYPE]
922 #define init_list_type_node cp_global_trees[CPTI_INIT_LIST_TYPE]
923 #define vtbl_type_node cp_global_trees[CPTI_VTBL_TYPE]
924 #define vtbl_ptr_type_node cp_global_trees[CPTI_VTBL_PTR_TYPE]
925 #define std_node cp_global_trees[CPTI_STD]
926 #define abi_node cp_global_trees[CPTI_ABI]
927 #define const_type_info_type_node cp_global_trees[CPTI_CONST_TYPE_INFO_TYPE]
928 #define type_info_ptr_type cp_global_trees[CPTI_TYPE_INFO_PTR_TYPE]
929 #define abort_fndecl cp_global_trees[CPTI_ABORT_FNDECL]
930 #define global_delete_fndecl cp_global_trees[CPTI_GLOBAL_DELETE_FNDECL]
931 #define current_aggr cp_global_trees[CPTI_AGGR_TAG]
932 #define nullptr_node cp_global_trees[CPTI_NULLPTR]
933 #define nullptr_type_node cp_global_trees[CPTI_NULLPTR_TYPE]
934
935 /* We cache these tree nodes so as to call get_identifier less
936 frequently. */
937
938 /* The name of a constructor that takes an in-charge parameter to
939 decide whether or not to construct virtual base classes. */
940 #define ctor_identifier cp_global_trees[CPTI_CTOR_IDENTIFIER]
941 /* The name of a constructor that constructs virtual base classes. */
942 #define complete_ctor_identifier cp_global_trees[CPTI_COMPLETE_CTOR_IDENTIFIER]
943 /* The name of a constructor that does not construct virtual base classes. */
944 #define base_ctor_identifier cp_global_trees[CPTI_BASE_CTOR_IDENTIFIER]
945 /* The name of a destructor that takes an in-charge parameter to
946 decide whether or not to destroy virtual base classes and whether
947 or not to delete the object. */
948 #define dtor_identifier cp_global_trees[CPTI_DTOR_IDENTIFIER]
949 /* The name of a destructor that destroys virtual base classes. */
950 #define complete_dtor_identifier cp_global_trees[CPTI_COMPLETE_DTOR_IDENTIFIER]
951 /* The name of a destructor that does not destroy virtual base
952 classes. */
953 #define base_dtor_identifier cp_global_trees[CPTI_BASE_DTOR_IDENTIFIER]
954 /* The name of a destructor that destroys virtual base classes, and
955 then deletes the entire object. */
956 #define deleting_dtor_identifier cp_global_trees[CPTI_DELETING_DTOR_IDENTIFIER]
957 #define delta_identifier cp_global_trees[CPTI_DELTA_IDENTIFIER]
958 #define in_charge_identifier cp_global_trees[CPTI_IN_CHARGE_IDENTIFIER]
959 /* The name of the parameter that contains a pointer to the VTT to use
960 for this subobject constructor or destructor. */
961 #define vtt_parm_identifier cp_global_trees[CPTI_VTT_PARM_IDENTIFIER]
962 #define nelts_identifier cp_global_trees[CPTI_NELTS_IDENTIFIER]
963 #define this_identifier cp_global_trees[CPTI_THIS_IDENTIFIER]
964 #define pfn_identifier cp_global_trees[CPTI_PFN_IDENTIFIER]
965 #define vptr_identifier cp_global_trees[CPTI_VPTR_IDENTIFIER]
966 /* The name of the std namespace. */
967 #define std_identifier cp_global_trees[CPTI_STD_IDENTIFIER]
968 #define lang_name_c cp_global_trees[CPTI_LANG_NAME_C]
969 #define lang_name_cplusplus cp_global_trees[CPTI_LANG_NAME_CPLUSPLUS]
970 #define lang_name_java cp_global_trees[CPTI_LANG_NAME_JAVA]
971
972 /* Exception specifier used for throw(). */
973 #define empty_except_spec cp_global_trees[CPTI_EMPTY_EXCEPT_SPEC]
974 #define noexcept_true_spec cp_global_trees[CPTI_NOEXCEPT_TRUE_SPEC]
975 #define noexcept_false_spec cp_global_trees[CPTI_NOEXCEPT_FALSE_SPEC]
976
977 /* If non-NULL, a POINTER_TYPE equivalent to (java::lang::Class*). */
978 #define jclass_node cp_global_trees[CPTI_JCLASS]
979
980 /* The declaration for `std::terminate'. */
981 #define terminate_node cp_global_trees[CPTI_TERMINATE]
982
983 /* The declaration for "__cxa_call_unexpected". */
984 #define call_unexpected_node cp_global_trees[CPTI_CALL_UNEXPECTED]
985
986 /* The type of the function-pointer argument to "__cxa_atexit" (or
987 "std::atexit", if "__cxa_atexit" is not being used). */
988 #define atexit_fn_ptr_type_node cp_global_trees[CPTI_ATEXIT_FN_PTR_TYPE]
989
990 /* A pointer to `std::atexit'. */
991 #define atexit_node cp_global_trees[CPTI_ATEXIT]
992
993 /* A pointer to `__dso_handle'. */
994 #define dso_handle_node cp_global_trees[CPTI_DSO_HANDLE]
995
996 /* The declaration of the dynamic_cast runtime. */
997 #define dynamic_cast_node cp_global_trees[CPTI_DCAST]
998
999 /* The type of a destructor. */
1000 #define cleanup_type cp_global_trees[CPTI_CLEANUP_TYPE]
1001
1002 /* The type of the vtt parameter passed to subobject constructors and
1003 destructors. */
1004 #define vtt_parm_type cp_global_trees[CPTI_VTT_PARM_TYPE]
1005
1006 /* A TREE_LIST of the dynamic classes whose vtables may have to be
1007 emitted in this translation unit. */
1008
1009 #define keyed_classes cp_global_trees[CPTI_KEYED_CLASSES]
1010
1011 /* Node to indicate default access. This must be distinct from the
1012 access nodes in tree.h. */
1013
1014 #define access_default_node null_node
1015
1016 /* Global state. */
1017
1018 struct GTY(()) saved_scope {
1019 vec<cxx_saved_binding, va_gc> *old_bindings;
1020 tree old_namespace;
1021 vec<tree, va_gc> *decl_ns_list;
1022 tree class_name;
1023 tree class_type;
1024 tree access_specifier;
1025 tree function_decl;
1026 vec<tree, va_gc> *lang_base;
1027 tree lang_name;
1028 tree template_parms;
1029 cp_binding_level *x_previous_class_level;
1030 tree x_saved_tree;
1031
1032 /* Only used for uses of this in trailing return type. */
1033 tree x_current_class_ptr;
1034 tree x_current_class_ref;
1035
1036 int x_processing_template_decl;
1037 int x_processing_specialization;
1038 BOOL_BITFIELD x_processing_explicit_instantiation : 1;
1039 BOOL_BITFIELD need_pop_function_context : 1;
1040
1041 int unevaluated_operand;
1042 int inhibit_evaluation_warnings;
1043 /* If non-zero, implicit "omp declare target" attribute is added into the
1044 attribute lists. */
1045 int omp_declare_target_attribute;
1046
1047 struct stmt_tree_s x_stmt_tree;
1048
1049 cp_binding_level *class_bindings;
1050 cp_binding_level *bindings;
1051
1052 struct saved_scope *prev;
1053 };
1054
1055 /* The current open namespace. */
1056
1057 #define current_namespace scope_chain->old_namespace
1058
1059 /* The stack for namespaces of current declarations. */
1060
1061 #define decl_namespace_list scope_chain->decl_ns_list
1062
1063 /* IDENTIFIER_NODE: name of current class */
1064
1065 #define current_class_name scope_chain->class_name
1066
1067 /* _TYPE: the type of the current class */
1068
1069 #define current_class_type scope_chain->class_type
1070
1071 /* When parsing a class definition, the access specifier most recently
1072 given by the user, or, if no access specifier was given, the
1073 default value appropriate for the kind of class (i.e., struct,
1074 class, or union). */
1075
1076 #define current_access_specifier scope_chain->access_specifier
1077
1078 /* Pointer to the top of the language name stack. */
1079
1080 #define current_lang_base scope_chain->lang_base
1081 #define current_lang_name scope_chain->lang_name
1082
1083 /* When parsing a template declaration, a TREE_LIST represents the
1084 active template parameters. Each node in the list represents one
1085 level of template parameters. The innermost level is first in the
1086 list. The depth of each level is stored as an INTEGER_CST in the
1087 TREE_PURPOSE of each node. The parameters for that level are
1088 stored in the TREE_VALUE. */
1089
1090 #define current_template_parms scope_chain->template_parms
1091
1092 #define processing_template_decl scope_chain->x_processing_template_decl
1093 #define processing_specialization scope_chain->x_processing_specialization
1094 #define processing_explicit_instantiation scope_chain->x_processing_explicit_instantiation
1095
1096 /* The cached class binding level, from the most recently exited
1097 class, or NULL if none. */
1098
1099 #define previous_class_level scope_chain->x_previous_class_level
1100
1101 /* A list of private types mentioned, for deferred access checking. */
1102
1103 extern GTY(()) struct saved_scope *scope_chain;
1104
1105 struct GTY(()) cxx_int_tree_map {
1106 unsigned int uid;
1107 tree to;
1108 };
1109
1110 extern unsigned int cxx_int_tree_map_hash (const void *);
1111 extern int cxx_int_tree_map_eq (const void *, const void *);
1112
1113 /* Global state pertinent to the current function. */
1114
1115 struct GTY(()) language_function {
1116 struct c_language_function base;
1117
1118 tree x_cdtor_label;
1119 tree x_current_class_ptr;
1120 tree x_current_class_ref;
1121 tree x_eh_spec_block;
1122 tree x_in_charge_parm;
1123 tree x_vtt_parm;
1124 tree x_return_value;
1125 tree x_auto_return_pattern;
1126
1127 BOOL_BITFIELD returns_value : 1;
1128 BOOL_BITFIELD returns_null : 1;
1129 BOOL_BITFIELD returns_abnormally : 1;
1130 BOOL_BITFIELD infinite_loop: 1;
1131 BOOL_BITFIELD x_in_function_try_handler : 1;
1132 BOOL_BITFIELD x_in_base_initializer : 1;
1133
1134 /* True if this function can throw an exception. */
1135 BOOL_BITFIELD can_throw : 1;
1136
1137 htab_t GTY((param_is(struct named_label_entry))) x_named_labels;
1138 cp_binding_level *bindings;
1139 vec<tree, va_gc> *x_local_names;
1140 /* Tracking possibly infinite loops. This is a vec<tree> only because
1141 vec<bool> doesn't work with gtype. */
1142 vec<tree, va_gc> *infinite_loops;
1143 htab_t GTY((param_is (struct cxx_int_tree_map))) extern_decl_map;
1144 };
1145
1146 /* The current C++-specific per-function global variables. */
1147
1148 #define cp_function_chain (cfun->language)
1149
1150 /* In a constructor destructor, the point at which all derived class
1151 destroying/construction has been done. I.e., just before a
1152 constructor returns, or before any base class destroying will be done
1153 in a destructor. */
1154
1155 #define cdtor_label cp_function_chain->x_cdtor_label
1156
1157 /* When we're processing a member function, current_class_ptr is the
1158 PARM_DECL for the `this' pointer. The current_class_ref is an
1159 expression for `*this'. */
1160
1161 #define current_class_ptr \
1162 (*(cfun && cp_function_chain \
1163 ? &cp_function_chain->x_current_class_ptr \
1164 : &scope_chain->x_current_class_ptr))
1165 #define current_class_ref \
1166 (*(cfun && cp_function_chain \
1167 ? &cp_function_chain->x_current_class_ref \
1168 : &scope_chain->x_current_class_ref))
1169
1170 /* The EH_SPEC_BLOCK for the exception-specifiers for the current
1171 function, if any. */
1172
1173 #define current_eh_spec_block cp_function_chain->x_eh_spec_block
1174
1175 /* The `__in_chrg' parameter for the current function. Only used for
1176 constructors and destructors. */
1177
1178 #define current_in_charge_parm cp_function_chain->x_in_charge_parm
1179
1180 /* The `__vtt_parm' parameter for the current function. Only used for
1181 constructors and destructors. */
1182
1183 #define current_vtt_parm cp_function_chain->x_vtt_parm
1184
1185 /* Set to 0 at beginning of a function definition, set to 1 if
1186 a return statement that specifies a return value is seen. */
1187
1188 #define current_function_returns_value cp_function_chain->returns_value
1189
1190 /* Set to 0 at beginning of a function definition, set to 1 if
1191 a return statement with no argument is seen. */
1192
1193 #define current_function_returns_null cp_function_chain->returns_null
1194
1195 /* Set to 0 at beginning of a function definition, set to 1 if
1196 a call to a noreturn function is seen. */
1197
1198 #define current_function_returns_abnormally \
1199 cp_function_chain->returns_abnormally
1200
1201 /* Set to 0 at beginning of a function definition, set to 1 if we see an
1202 obvious infinite loop. This can have false positives and false
1203 negatives, so it should only be used as a heuristic. */
1204
1205 #define current_function_infinite_loop cp_function_chain->infinite_loop
1206
1207 /* Nonzero if we are processing a base initializer. Zero elsewhere. */
1208 #define in_base_initializer cp_function_chain->x_in_base_initializer
1209
1210 #define in_function_try_handler cp_function_chain->x_in_function_try_handler
1211
1212 /* Expression always returned from function, or error_mark_node
1213 otherwise, for use by the automatic named return value optimization. */
1214
1215 #define current_function_return_value \
1216 (cp_function_chain->x_return_value)
1217
1218 /* A type involving 'auto' to be used for return type deduction. */
1219
1220 #define current_function_auto_return_pattern \
1221 (cp_function_chain->x_auto_return_pattern)
1222
1223 /* True if NAME is the IDENTIFIER_NODE for an overloaded "operator
1224 new" or "operator delete". */
1225 #define NEW_DELETE_OPNAME_P(NAME) \
1226 ((NAME) == ansi_opname (NEW_EXPR) \
1227 || (NAME) == ansi_opname (VEC_NEW_EXPR) \
1228 || (NAME) == ansi_opname (DELETE_EXPR) \
1229 || (NAME) == ansi_opname (VEC_DELETE_EXPR))
1230
1231 #define ansi_opname(CODE) \
1232 (operator_name_info[(int) (CODE)].identifier)
1233 #define ansi_assopname(CODE) \
1234 (assignment_operator_name_info[(int) (CODE)].identifier)
1235
1236 /* TRUE if a tree code represents a statement. */
1237 extern bool statement_code_p[MAX_TREE_CODES];
1238
1239 #define STATEMENT_CODE_P(CODE) statement_code_p[(int) (CODE)]
1240
1241 enum languages { lang_c, lang_cplusplus, lang_java };
1242
1243 /* Macros to make error reporting functions' lives easier. */
1244 #define TYPE_IDENTIFIER(NODE) (DECL_NAME (TYPE_NAME (NODE)))
1245 #define TYPE_LINKAGE_IDENTIFIER(NODE) \
1246 (TYPE_IDENTIFIER (TYPE_MAIN_VARIANT (NODE)))
1247 #define TYPE_NAME_STRING(NODE) (IDENTIFIER_POINTER (TYPE_IDENTIFIER (NODE)))
1248 #define TYPE_NAME_LENGTH(NODE) (IDENTIFIER_LENGTH (TYPE_IDENTIFIER (NODE)))
1249
1250 /* Nonzero if NODE has no name for linkage purposes. */
1251 #define TYPE_ANONYMOUS_P(NODE) \
1252 (OVERLOAD_TYPE_P (NODE) && ANON_AGGRNAME_P (TYPE_LINKAGE_IDENTIFIER (NODE)))
1253
1254 /* The _DECL for this _TYPE. */
1255 #define TYPE_MAIN_DECL(NODE) (TYPE_STUB_DECL (TYPE_MAIN_VARIANT (NODE)))
1256
1257 /* Nonzero if T is a type that could resolve to any kind of concrete type
1258 at instantiation time. */
1259 #define WILDCARD_TYPE_P(T) \
1260 (TREE_CODE (T) == TEMPLATE_TYPE_PARM \
1261 || TREE_CODE (T) == TYPENAME_TYPE \
1262 || TREE_CODE (T) == TYPEOF_TYPE \
1263 || TREE_CODE (T) == BOUND_TEMPLATE_TEMPLATE_PARM \
1264 || TREE_CODE (T) == DECLTYPE_TYPE)
1265
1266 /* Nonzero if T is a class (or struct or union) type. Also nonzero
1267 for template type parameters, typename types, and instantiated
1268 template template parameters. Keep these checks in ascending code
1269 order. */
1270 #define MAYBE_CLASS_TYPE_P(T) (WILDCARD_TYPE_P (T) || CLASS_TYPE_P (T))
1271
1272 /* Set CLASS_TYPE_P for T to VAL. T must be a class, struct, or
1273 union type. */
1274 #define SET_CLASS_TYPE_P(T, VAL) \
1275 (TYPE_LANG_FLAG_5 (T) = (VAL))
1276
1277 /* Nonzero if T is a class type. Zero for template type parameters,
1278 typename types, and so forth. */
1279 #define CLASS_TYPE_P(T) \
1280 (RECORD_OR_UNION_CODE_P (TREE_CODE (T)) && TYPE_LANG_FLAG_5 (T))
1281
1282 /* Nonzero if T is a class type but not an union. */
1283 #define NON_UNION_CLASS_TYPE_P(T) \
1284 (CLASS_TYPE_P (T) && TREE_CODE (T) != UNION_TYPE)
1285
1286 /* Keep these checks in ascending code order. */
1287 #define RECORD_OR_UNION_CODE_P(T) \
1288 ((T) == RECORD_TYPE || (T) == UNION_TYPE)
1289 #define OVERLOAD_TYPE_P(T) \
1290 (CLASS_TYPE_P (T) || TREE_CODE (T) == ENUMERAL_TYPE)
1291
1292 /* True if this a "Java" type, defined in 'extern "Java"'. */
1293 #define TYPE_FOR_JAVA(NODE) TYPE_LANG_FLAG_3 (NODE)
1294
1295 /* True if this type is dependent. This predicate is only valid if
1296 TYPE_DEPENDENT_P_VALID is true. */
1297 #define TYPE_DEPENDENT_P(NODE) TYPE_LANG_FLAG_0 (NODE)
1298
1299 /* True if dependent_type_p has been called for this type, with the
1300 result that TYPE_DEPENDENT_P is valid. */
1301 #define TYPE_DEPENDENT_P_VALID(NODE) TYPE_LANG_FLAG_6(NODE)
1302
1303 /* Nonzero if this type is const-qualified. */
1304 #define CP_TYPE_CONST_P(NODE) \
1305 ((cp_type_quals (NODE) & TYPE_QUAL_CONST) != 0)
1306
1307 /* Nonzero if this type is volatile-qualified. */
1308 #define CP_TYPE_VOLATILE_P(NODE) \
1309 ((cp_type_quals (NODE) & TYPE_QUAL_VOLATILE) != 0)
1310
1311 /* Nonzero if this type is restrict-qualified. */
1312 #define CP_TYPE_RESTRICT_P(NODE) \
1313 ((cp_type_quals (NODE) & TYPE_QUAL_RESTRICT) != 0)
1314
1315 /* Nonzero if this type is const-qualified, but not
1316 volatile-qualified. Other qualifiers are ignored. This macro is
1317 used to test whether or not it is OK to bind an rvalue to a
1318 reference. */
1319 #define CP_TYPE_CONST_NON_VOLATILE_P(NODE) \
1320 ((cp_type_quals (NODE) & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE)) \
1321 == TYPE_QUAL_CONST)
1322
1323 #define FUNCTION_ARG_CHAIN(NODE) \
1324 TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (NODE)))
1325
1326 /* Given a FUNCTION_DECL, returns the first TREE_LIST out of TYPE_ARG_TYPES
1327 which refers to a user-written parameter. */
1328 #define FUNCTION_FIRST_USER_PARMTYPE(NODE) \
1329 skip_artificial_parms_for ((NODE), TYPE_ARG_TYPES (TREE_TYPE (NODE)))
1330
1331 /* Similarly, but for DECL_ARGUMENTS. */
1332 #define FUNCTION_FIRST_USER_PARM(NODE) \
1333 skip_artificial_parms_for ((NODE), DECL_ARGUMENTS (NODE))
1334
1335 /* Nonzero iff TYPE is derived from PARENT. Ignores accessibility and
1336 ambiguity issues. */
1337 #define DERIVED_FROM_P(PARENT, TYPE) \
1338 (lookup_base ((TYPE), (PARENT), ba_any, NULL, tf_none) != NULL_TREE)
1339
1340 /* Gives the visibility specification for a class type. */
1341 #define CLASSTYPE_VISIBILITY(TYPE) \
1342 DECL_VISIBILITY (TYPE_MAIN_DECL (TYPE))
1343 #define CLASSTYPE_VISIBILITY_SPECIFIED(TYPE) \
1344 DECL_VISIBILITY_SPECIFIED (TYPE_MAIN_DECL (TYPE))
1345
1346 typedef struct GTY (()) tree_pair_s {
1347 tree purpose;
1348 tree value;
1349 } tree_pair_s;
1350 typedef tree_pair_s *tree_pair_p;
1351
1352 /* This is a few header flags for 'struct lang_type'. Actually,
1353 all but the first are used only for lang_type_class; they
1354 are put in this structure to save space. */
1355 struct GTY(()) lang_type_header {
1356 BOOL_BITFIELD is_lang_type_class : 1;
1357
1358 BOOL_BITFIELD has_type_conversion : 1;
1359 BOOL_BITFIELD has_copy_ctor : 1;
1360 BOOL_BITFIELD has_default_ctor : 1;
1361 BOOL_BITFIELD const_needs_init : 1;
1362 BOOL_BITFIELD ref_needs_init : 1;
1363 BOOL_BITFIELD has_const_copy_assign : 1;
1364
1365 BOOL_BITFIELD spare : 1;
1366 };
1367
1368 /* This structure provides additional information above and beyond
1369 what is provide in the ordinary tree_type. In the past, we used it
1370 for the types of class types, template parameters types, typename
1371 types, and so forth. However, there can be many (tens to hundreds
1372 of thousands) of template parameter types in a compilation, and
1373 there's no need for this additional information in that case.
1374 Therefore, we now use this data structure only for class types.
1375
1376 In the past, it was thought that there would be relatively few
1377 class types. However, in the presence of heavy use of templates,
1378 many (i.e., thousands) of classes can easily be generated.
1379 Therefore, we should endeavor to keep the size of this structure to
1380 a minimum. */
1381 struct GTY(()) lang_type_class {
1382 struct lang_type_header h;
1383
1384 unsigned char align;
1385
1386 unsigned has_mutable : 1;
1387 unsigned com_interface : 1;
1388 unsigned non_pod_class : 1;
1389 unsigned nearly_empty_p : 1;
1390 unsigned user_align : 1;
1391 unsigned has_copy_assign : 1;
1392 unsigned has_new : 1;
1393 unsigned has_array_new : 1;
1394
1395 unsigned gets_delete : 2;
1396 unsigned interface_only : 1;
1397 unsigned interface_unknown : 1;
1398 unsigned contains_empty_class_p : 1;
1399 unsigned anon_aggr : 1;
1400 unsigned non_zero_init : 1;
1401 unsigned empty_p : 1;
1402
1403 unsigned vec_new_uses_cookie : 1;
1404 unsigned declared_class : 1;
1405 unsigned diamond_shaped : 1;
1406 unsigned repeated_base : 1;
1407 unsigned being_defined : 1;
1408 unsigned java_interface : 1;
1409 unsigned debug_requested : 1;
1410 unsigned fields_readonly : 1;
1411
1412 unsigned use_template : 2;
1413 unsigned ptrmemfunc_flag : 1;
1414 unsigned was_anonymous : 1;
1415 unsigned lazy_default_ctor : 1;
1416 unsigned lazy_copy_ctor : 1;
1417 unsigned lazy_copy_assign : 1;
1418 unsigned lazy_destructor : 1;
1419
1420 unsigned has_const_copy_ctor : 1;
1421 unsigned has_complex_copy_ctor : 1;
1422 unsigned has_complex_copy_assign : 1;
1423 unsigned non_aggregate : 1;
1424 unsigned has_complex_dflt : 1;
1425 unsigned has_list_ctor : 1;
1426 unsigned non_std_layout : 1;
1427 unsigned is_literal : 1;
1428
1429 unsigned lazy_move_ctor : 1;
1430 unsigned lazy_move_assign : 1;
1431 unsigned has_complex_move_ctor : 1;
1432 unsigned has_complex_move_assign : 1;
1433 unsigned has_constexpr_ctor : 1;
1434
1435 /* When adding a flag here, consider whether or not it ought to
1436 apply to a template instance if it applies to the template. If
1437 so, make sure to copy it in instantiate_class_template! */
1438
1439 /* There are some bits left to fill out a 32-bit word. Keep track
1440 of this by updating the size of this bitfield whenever you add or
1441 remove a flag. */
1442 unsigned dummy : 3;
1443
1444 tree primary_base;
1445 vec<tree_pair_s, va_gc> *vcall_indices;
1446 tree vtables;
1447 tree typeinfo_var;
1448 vec<tree, va_gc> *vbases;
1449 binding_table nested_udts;
1450 tree as_base;
1451 vec<tree, va_gc> *pure_virtuals;
1452 tree friend_classes;
1453 vec<tree, va_gc> * GTY((reorder ("resort_type_method_vec"))) methods;
1454 tree key_method;
1455 tree decl_list;
1456 tree template_info;
1457 tree befriending_classes;
1458 /* In a RECORD_TYPE, information specific to Objective-C++, such
1459 as a list of adopted protocols or a pointer to a corresponding
1460 @interface. See objc/objc-act.h for details. */
1461 tree objc_info;
1462 /* sorted_fields is sorted based on a pointer, so we need to be able
1463 to resort it if pointers get rearranged. */
1464 struct sorted_fields_type * GTY ((reorder ("resort_sorted_fields")))
1465 sorted_fields;
1466 /* FIXME reuse another field? */
1467 tree lambda_expr;
1468 };
1469
1470 struct GTY(()) lang_type_ptrmem {
1471 struct lang_type_header h;
1472 tree record;
1473 };
1474
1475 struct GTY((variable_size)) lang_type {
1476 union lang_type_u
1477 {
1478 struct lang_type_header GTY((skip (""))) h;
1479 struct lang_type_class GTY((tag ("1"))) c;
1480 struct lang_type_ptrmem GTY((tag ("0"))) ptrmem;
1481 } GTY((desc ("%h.h.is_lang_type_class"))) u;
1482 };
1483
1484 #if defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 2007)
1485
1486 #define LANG_TYPE_CLASS_CHECK(NODE) __extension__ \
1487 ({ struct lang_type *lt = TYPE_LANG_SPECIFIC (NODE); \
1488 if (! lt->u.h.is_lang_type_class) \
1489 lang_check_failed (__FILE__, __LINE__, __FUNCTION__); \
1490 &lt->u.c; })
1491
1492 #define LANG_TYPE_PTRMEM_CHECK(NODE) __extension__ \
1493 ({ struct lang_type *lt = TYPE_LANG_SPECIFIC (NODE); \
1494 if (lt->u.h.is_lang_type_class) \
1495 lang_check_failed (__FILE__, __LINE__, __FUNCTION__); \
1496 &lt->u.ptrmem; })
1497
1498 #else
1499
1500 #define LANG_TYPE_CLASS_CHECK(NODE) (&TYPE_LANG_SPECIFIC (NODE)->u.c)
1501 #define LANG_TYPE_PTRMEM_CHECK(NODE) (&TYPE_LANG_SPECIFIC (NODE)->u.ptrmem)
1502
1503 #endif /* ENABLE_TREE_CHECKING */
1504
1505 /* Nonzero for _CLASSTYPE means that operator delete is defined. */
1506 #define TYPE_GETS_DELETE(NODE) (LANG_TYPE_CLASS_CHECK (NODE)->gets_delete)
1507 #define TYPE_GETS_REG_DELETE(NODE) (TYPE_GETS_DELETE (NODE) & 1)
1508
1509 /* Nonzero if `new NODE[x]' should cause the allocation of extra
1510 storage to indicate how many array elements are in use. */
1511 #define TYPE_VEC_NEW_USES_COOKIE(NODE) \
1512 (CLASS_TYPE_P (NODE) \
1513 && LANG_TYPE_CLASS_CHECK (NODE)->vec_new_uses_cookie)
1514
1515 /* Nonzero means that this _CLASSTYPE node defines ways of converting
1516 itself to other types. */
1517 #define TYPE_HAS_CONVERSION(NODE) \
1518 (LANG_TYPE_CLASS_CHECK (NODE)->h.has_type_conversion)
1519
1520 /* Nonzero means that NODE (a class type) has a default constructor --
1521 but that it has not yet been declared. */
1522 #define CLASSTYPE_LAZY_DEFAULT_CTOR(NODE) \
1523 (LANG_TYPE_CLASS_CHECK (NODE)->lazy_default_ctor)
1524
1525 /* Nonzero means that NODE (a class type) has a copy constructor --
1526 but that it has not yet been declared. */
1527 #define CLASSTYPE_LAZY_COPY_CTOR(NODE) \
1528 (LANG_TYPE_CLASS_CHECK (NODE)->lazy_copy_ctor)
1529
1530 /* Nonzero means that NODE (a class type) has a move constructor --
1531 but that it has not yet been declared. */
1532 #define CLASSTYPE_LAZY_MOVE_CTOR(NODE) \
1533 (LANG_TYPE_CLASS_CHECK (NODE)->lazy_move_ctor)
1534
1535 /* Nonzero means that NODE (a class type) has an assignment operator
1536 -- but that it has not yet been declared. */
1537 #define CLASSTYPE_LAZY_COPY_ASSIGN(NODE) \
1538 (LANG_TYPE_CLASS_CHECK (NODE)->lazy_copy_assign)
1539
1540 /* Nonzero means that NODE (a class type) has an assignment operator
1541 -- but that it has not yet been declared. */
1542 #define CLASSTYPE_LAZY_MOVE_ASSIGN(NODE) \
1543 (LANG_TYPE_CLASS_CHECK (NODE)->lazy_move_assign)
1544
1545 /* Nonzero means that NODE (a class type) has a destructor -- but that
1546 it has not yet been declared. */
1547 #define CLASSTYPE_LAZY_DESTRUCTOR(NODE) \
1548 (LANG_TYPE_CLASS_CHECK (NODE)->lazy_destructor)
1549
1550 /* Nonzero means that NODE (a class type) is final */
1551 #define CLASSTYPE_FINAL(NODE) \
1552 TYPE_FINAL_P (NODE)
1553
1554
1555 /* Nonzero means that this _CLASSTYPE node overloads operator=(X&). */
1556 #define TYPE_HAS_COPY_ASSIGN(NODE) (LANG_TYPE_CLASS_CHECK (NODE)->has_copy_assign)
1557
1558 /* True iff the class type NODE has an "operator =" whose parameter
1559 has a parameter of type "const X&". */
1560 #define TYPE_HAS_CONST_COPY_ASSIGN(NODE) \
1561 (LANG_TYPE_CLASS_CHECK (NODE)->h.has_const_copy_assign)
1562
1563 /* Nonzero means that this _CLASSTYPE node has an X(X&) constructor. */
1564 #define TYPE_HAS_COPY_CTOR(NODE) (LANG_TYPE_CLASS_CHECK (NODE)->h.has_copy_ctor)
1565 #define TYPE_HAS_CONST_COPY_CTOR(NODE) \
1566 (LANG_TYPE_CLASS_CHECK (NODE)->has_const_copy_ctor)
1567
1568 /* Nonzero if this class has an X(initializer_list<T>) constructor. */
1569 #define TYPE_HAS_LIST_CTOR(NODE) \
1570 (LANG_TYPE_CLASS_CHECK (NODE)->has_list_ctor)
1571
1572 /* Nonzero if this class has a constexpr constructor other than a copy/move
1573 constructor. Note that a class can have constexpr constructors for
1574 static initialization even if it isn't a literal class. */
1575 #define TYPE_HAS_CONSTEXPR_CTOR(NODE) \
1576 (LANG_TYPE_CLASS_CHECK (NODE)->has_constexpr_ctor)
1577
1578 /* Nonzero if this class defines an overloaded operator new. (An
1579 operator new [] doesn't count.) */
1580 #define TYPE_HAS_NEW_OPERATOR(NODE) \
1581 (LANG_TYPE_CLASS_CHECK (NODE)->has_new)
1582
1583 /* Nonzero if this class defines an overloaded operator new[]. */
1584 #define TYPE_HAS_ARRAY_NEW_OPERATOR(NODE) \
1585 (LANG_TYPE_CLASS_CHECK (NODE)->has_array_new)
1586
1587 /* Nonzero means that this type is being defined. I.e., the left brace
1588 starting the definition of this type has been seen. */
1589 #define TYPE_BEING_DEFINED(NODE) (LANG_TYPE_CLASS_CHECK (NODE)->being_defined)
1590
1591 /* Nonzero means that this type is either complete or being defined, so we
1592 can do lookup in it. */
1593 #define COMPLETE_OR_OPEN_TYPE_P(NODE) \
1594 (COMPLETE_TYPE_P (NODE) || (CLASS_TYPE_P (NODE) && TYPE_BEING_DEFINED (NODE)))
1595
1596 /* Mark bits for repeated base checks. */
1597 #define TYPE_MARKED_P(NODE) TREE_LANG_FLAG_6 (TYPE_CHECK (NODE))
1598
1599 /* Nonzero if the class NODE has multiple paths to the same (virtual)
1600 base object. */
1601 #define CLASSTYPE_DIAMOND_SHAPED_P(NODE) \
1602 (LANG_TYPE_CLASS_CHECK(NODE)->diamond_shaped)
1603
1604 /* Nonzero if the class NODE has multiple instances of the same base
1605 type. */
1606 #define CLASSTYPE_REPEATED_BASE_P(NODE) \
1607 (LANG_TYPE_CLASS_CHECK(NODE)->repeated_base)
1608
1609 /* The member function with which the vtable will be emitted:
1610 the first noninline non-pure-virtual member function. NULL_TREE
1611 if there is no key function or if this is a class template */
1612 #define CLASSTYPE_KEY_METHOD(NODE) (LANG_TYPE_CLASS_CHECK (NODE)->key_method)
1613
1614 /* Vector member functions defined in this class. Each element is
1615 either a FUNCTION_DECL, a TEMPLATE_DECL, or an OVERLOAD. All
1616 functions with the same name end up in the same slot. The first
1617 two elements are for constructors, and destructors, respectively.
1618 All template conversion operators to innermost template dependent
1619 types are overloaded on the next slot, if they exist. Note, the
1620 names for these functions will not all be the same. The
1621 non-template conversion operators & templated conversions to
1622 non-innermost template types are next, followed by ordinary member
1623 functions. There may be empty entries at the end of the vector.
1624 The conversion operators are unsorted. The ordinary member
1625 functions are sorted, once the class is complete. */
1626 #define CLASSTYPE_METHOD_VEC(NODE) (LANG_TYPE_CLASS_CHECK (NODE)->methods)
1627
1628 /* For class templates, this is a TREE_LIST of all member data,
1629 functions, types, and friends in the order of declaration.
1630 The TREE_PURPOSE of each TREE_LIST is NULL_TREE for a friend,
1631 and the RECORD_TYPE for the class template otherwise. */
1632 #define CLASSTYPE_DECL_LIST(NODE) (LANG_TYPE_CLASS_CHECK (NODE)->decl_list)
1633
1634 /* The slot in the CLASSTYPE_METHOD_VEC where constructors go. */
1635 #define CLASSTYPE_CONSTRUCTOR_SLOT 0
1636
1637 /* The slot in the CLASSTYPE_METHOD_VEC where destructors go. */
1638 #define CLASSTYPE_DESTRUCTOR_SLOT 1
1639
1640 /* The first slot in the CLASSTYPE_METHOD_VEC where conversion
1641 operators can appear. */
1642 #define CLASSTYPE_FIRST_CONVERSION_SLOT 2
1643
1644 /* A FUNCTION_DECL or OVERLOAD for the constructors for NODE. These
1645 are the constructors that take an in-charge parameter. */
1646 #define CLASSTYPE_CONSTRUCTORS(NODE) \
1647 ((*CLASSTYPE_METHOD_VEC (NODE))[CLASSTYPE_CONSTRUCTOR_SLOT])
1648
1649 /* A FUNCTION_DECL for the destructor for NODE. These are the
1650 destructors that take an in-charge parameter. If
1651 CLASSTYPE_LAZY_DESTRUCTOR is true, then this entry will be NULL
1652 until the destructor is created with lazily_declare_fn. */
1653 #define CLASSTYPE_DESTRUCTORS(NODE) \
1654 (CLASSTYPE_METHOD_VEC (NODE) \
1655 ? (*CLASSTYPE_METHOD_VEC (NODE))[CLASSTYPE_DESTRUCTOR_SLOT] \
1656 : NULL_TREE)
1657
1658 /* A dictionary of the nested user-defined-types (class-types, or enums)
1659 found within this class. This table includes nested member class
1660 templates. */
1661 #define CLASSTYPE_NESTED_UTDS(NODE) \
1662 (LANG_TYPE_CLASS_CHECK (NODE)->nested_udts)
1663
1664 /* Nonzero if NODE has a primary base class, i.e., a base class with
1665 which it shares the virtual function table pointer. */
1666 #define CLASSTYPE_HAS_PRIMARY_BASE_P(NODE) \
1667 (CLASSTYPE_PRIMARY_BINFO (NODE) != NULL_TREE)
1668
1669 /* If non-NULL, this is the binfo for the primary base class, i.e.,
1670 the base class which contains the virtual function table pointer
1671 for this class. */
1672 #define CLASSTYPE_PRIMARY_BINFO(NODE) \
1673 (LANG_TYPE_CLASS_CHECK (NODE)->primary_base)
1674
1675 /* A vector of BINFOs for the direct and indirect virtual base classes
1676 that this type uses in a post-order depth-first left-to-right
1677 order. (In other words, these bases appear in the order that they
1678 should be initialized.) */
1679 #define CLASSTYPE_VBASECLASSES(NODE) (LANG_TYPE_CLASS_CHECK (NODE)->vbases)
1680
1681 /* The type corresponding to NODE when NODE is used as a base class,
1682 i.e., NODE without virtual base classes. */
1683
1684 #define CLASSTYPE_AS_BASE(NODE) (LANG_TYPE_CLASS_CHECK (NODE)->as_base)
1685
1686 /* True iff NODE is the CLASSTYPE_AS_BASE version of some type. */
1687
1688 #define IS_FAKE_BASE_TYPE(NODE) \
1689 (TREE_CODE (NODE) == RECORD_TYPE \
1690 && TYPE_CONTEXT (NODE) && CLASS_TYPE_P (TYPE_CONTEXT (NODE)) \
1691 && CLASSTYPE_AS_BASE (TYPE_CONTEXT (NODE)) == (NODE))
1692
1693 /* These are the size and alignment of the type without its virtual
1694 base classes, for when we use this type as a base itself. */
1695 #define CLASSTYPE_SIZE(NODE) TYPE_SIZE (CLASSTYPE_AS_BASE (NODE))
1696 #define CLASSTYPE_SIZE_UNIT(NODE) TYPE_SIZE_UNIT (CLASSTYPE_AS_BASE (NODE))
1697 #define CLASSTYPE_ALIGN(NODE) TYPE_ALIGN (CLASSTYPE_AS_BASE (NODE))
1698 #define CLASSTYPE_USER_ALIGN(NODE) TYPE_USER_ALIGN (CLASSTYPE_AS_BASE (NODE))
1699
1700 /* The alignment of NODE, without its virtual bases, in bytes. */
1701 #define CLASSTYPE_ALIGN_UNIT(NODE) \
1702 (CLASSTYPE_ALIGN (NODE) / BITS_PER_UNIT)
1703
1704 /* True if this a Java interface type, declared with
1705 '__attribute__ ((java_interface))'. */
1706 #define TYPE_JAVA_INTERFACE(NODE) \
1707 (LANG_TYPE_CLASS_CHECK (NODE)->java_interface)
1708
1709 /* A vec<tree> of virtual functions which cannot be inherited by
1710 derived classes. When deriving from this type, the derived
1711 class must provide its own definition for each of these functions. */
1712 #define CLASSTYPE_PURE_VIRTUALS(NODE) \
1713 (LANG_TYPE_CLASS_CHECK (NODE)->pure_virtuals)
1714
1715 /* Nonzero means that this type is an abstract class type. */
1716 #define ABSTRACT_CLASS_TYPE_P(NODE) \
1717 (CLASS_TYPE_P (NODE) && CLASSTYPE_PURE_VIRTUALS(NODE))
1718
1719 /* Nonzero means that this type has an X() constructor. */
1720 #define TYPE_HAS_DEFAULT_CONSTRUCTOR(NODE) \
1721 (LANG_TYPE_CLASS_CHECK (NODE)->h.has_default_ctor)
1722
1723 /* Nonzero means that this type contains a mutable member. */
1724 #define CLASSTYPE_HAS_MUTABLE(NODE) (LANG_TYPE_CLASS_CHECK (NODE)->has_mutable)
1725 #define TYPE_HAS_MUTABLE_P(NODE) (cp_has_mutable_p (NODE))
1726
1727 /* Nonzero means that this class type is not POD for the purpose of layout
1728 (as defined in the ABI). This is different from the language's POD. */
1729 #define CLASSTYPE_NON_LAYOUT_POD_P(NODE) \
1730 (LANG_TYPE_CLASS_CHECK (NODE)->non_pod_class)
1731
1732 /* Nonzero means that this class type is a non-standard-layout class. */
1733 #define CLASSTYPE_NON_STD_LAYOUT(NODE) \
1734 (LANG_TYPE_CLASS_CHECK (NODE)->non_std_layout)
1735
1736 /* Nonzero means that this class contains pod types whose default
1737 initialization is not a zero initialization (namely, pointers to
1738 data members). */
1739 #define CLASSTYPE_NON_ZERO_INIT_P(NODE) \
1740 (LANG_TYPE_CLASS_CHECK (NODE)->non_zero_init)
1741
1742 /* Nonzero if this class is "empty" in the sense of the C++ ABI. */
1743 #define CLASSTYPE_EMPTY_P(NODE) \
1744 (LANG_TYPE_CLASS_CHECK (NODE)->empty_p)
1745
1746 /* Nonzero if this class is "nearly empty", i.e., contains only a
1747 virtual function table pointer. */
1748 #define CLASSTYPE_NEARLY_EMPTY_P(NODE) \
1749 (LANG_TYPE_CLASS_CHECK (NODE)->nearly_empty_p)
1750
1751 /* Nonzero if this class contains an empty subobject. */
1752 #define CLASSTYPE_CONTAINS_EMPTY_CLASS_P(NODE) \
1753 (LANG_TYPE_CLASS_CHECK (NODE)->contains_empty_class_p)
1754
1755 /* A list of class types of which this type is a friend. The
1756 TREE_VALUE is normally a TYPE, but will be a TEMPLATE_DECL in the
1757 case of a template friend. */
1758 #define CLASSTYPE_FRIEND_CLASSES(NODE) \
1759 (LANG_TYPE_CLASS_CHECK (NODE)->friend_classes)
1760
1761 /* A list of the classes which grant friendship to this class. */
1762 #define CLASSTYPE_BEFRIENDING_CLASSES(NODE) \
1763 (LANG_TYPE_CLASS_CHECK (NODE)->befriending_classes)
1764
1765 /* The associated LAMBDA_EXPR that made this class. */
1766 #define CLASSTYPE_LAMBDA_EXPR(NODE) \
1767 (LANG_TYPE_CLASS_CHECK (NODE)->lambda_expr)
1768 /* The extra mangling scope for this closure type. */
1769 #define LAMBDA_TYPE_EXTRA_SCOPE(NODE) \
1770 (LAMBDA_EXPR_EXTRA_SCOPE (CLASSTYPE_LAMBDA_EXPR (NODE)))
1771
1772 /* Say whether this node was declared as a "class" or a "struct". */
1773 #define CLASSTYPE_DECLARED_CLASS(NODE) \
1774 (LANG_TYPE_CLASS_CHECK (NODE)->declared_class)
1775
1776 /* Nonzero if this class has const members
1777 which have no specified initialization. */
1778 #define CLASSTYPE_READONLY_FIELDS_NEED_INIT(NODE) \
1779 (TYPE_LANG_SPECIFIC (NODE) \
1780 ? LANG_TYPE_CLASS_CHECK (NODE)->h.const_needs_init : 0)
1781 #define SET_CLASSTYPE_READONLY_FIELDS_NEED_INIT(NODE, VALUE) \
1782 (LANG_TYPE_CLASS_CHECK (NODE)->h.const_needs_init = (VALUE))
1783
1784 /* Nonzero if this class has ref members
1785 which have no specified initialization. */
1786 #define CLASSTYPE_REF_FIELDS_NEED_INIT(NODE) \
1787 (TYPE_LANG_SPECIFIC (NODE) \
1788 ? LANG_TYPE_CLASS_CHECK (NODE)->h.ref_needs_init : 0)
1789 #define SET_CLASSTYPE_REF_FIELDS_NEED_INIT(NODE, VALUE) \
1790 (LANG_TYPE_CLASS_CHECK (NODE)->h.ref_needs_init = (VALUE))
1791
1792 /* Nonzero if this class is included from a header file which employs
1793 `#pragma interface', and it is not included in its implementation file. */
1794 #define CLASSTYPE_INTERFACE_ONLY(NODE) \
1795 (LANG_TYPE_CLASS_CHECK (NODE)->interface_only)
1796
1797 /* True if we have already determined whether or not vtables, VTTs,
1798 typeinfo, and other similar per-class data should be emitted in
1799 this translation unit. This flag does not indicate whether or not
1800 these items should be emitted; it only indicates that we know one
1801 way or the other. */
1802 #define CLASSTYPE_INTERFACE_KNOWN(NODE) \
1803 (LANG_TYPE_CLASS_CHECK (NODE)->interface_unknown == 0)
1804 /* The opposite of CLASSTYPE_INTERFACE_KNOWN. */
1805 #define CLASSTYPE_INTERFACE_UNKNOWN(NODE) \
1806 (LANG_TYPE_CLASS_CHECK (NODE)->interface_unknown)
1807
1808 #define SET_CLASSTYPE_INTERFACE_UNKNOWN_X(NODE,X) \
1809 (LANG_TYPE_CLASS_CHECK (NODE)->interface_unknown = !!(X))
1810 #define SET_CLASSTYPE_INTERFACE_UNKNOWN(NODE) \
1811 (LANG_TYPE_CLASS_CHECK (NODE)->interface_unknown = 1)
1812 #define SET_CLASSTYPE_INTERFACE_KNOWN(NODE) \
1813 (LANG_TYPE_CLASS_CHECK (NODE)->interface_unknown = 0)
1814
1815 /* Nonzero if a _DECL node requires us to output debug info for this class. */
1816 #define CLASSTYPE_DEBUG_REQUESTED(NODE) \
1817 (LANG_TYPE_CLASS_CHECK (NODE)->debug_requested)
1818 \f
1819 /* Additional macros for inheritance information. */
1820
1821 /* Nonzero means that this class is on a path leading to a new vtable. */
1822 #define BINFO_VTABLE_PATH_MARKED(NODE) BINFO_FLAG_1 (NODE)
1823
1824 /* Nonzero means B (a BINFO) has its own vtable. Any copies will not
1825 have this flag set. */
1826 #define BINFO_NEW_VTABLE_MARKED(B) (BINFO_FLAG_2 (B))
1827
1828 /* Compare a BINFO_TYPE with another type for equality. For a binfo,
1829 this is functionally equivalent to using same_type_p, but
1830 measurably faster. At least one of the arguments must be a
1831 BINFO_TYPE. The other can be a BINFO_TYPE or a regular type. If
1832 BINFO_TYPE(T) ever stops being the main variant of the class the
1833 binfo is for, this macro must change. */
1834 #define SAME_BINFO_TYPE_P(A, B) ((A) == (B))
1835
1836 /* Any subobject that needs a new vtable must have a vptr and must not
1837 be a non-virtual primary base (since it would then use the vtable from a
1838 derived class and never become non-primary.) */
1839 #define SET_BINFO_NEW_VTABLE_MARKED(B) \
1840 (BINFO_NEW_VTABLE_MARKED (B) = 1, \
1841 gcc_assert (!BINFO_PRIMARY_P (B) || BINFO_VIRTUAL_P (B)), \
1842 gcc_assert (TYPE_VFIELD (BINFO_TYPE (B))))
1843
1844 /* Nonzero if this binfo is for a dependent base - one that should not
1845 be searched. */
1846 #define BINFO_DEPENDENT_BASE_P(NODE) BINFO_FLAG_3 (NODE)
1847
1848 /* Nonzero if this binfo has lost its primary base binfo (because that
1849 is a nearly-empty virtual base that has been taken by some other
1850 base in the complete hierarchy. */
1851 #define BINFO_LOST_PRIMARY_P(NODE) BINFO_FLAG_4 (NODE)
1852
1853 /* Nonzero if this BINFO is a primary base class. */
1854 #define BINFO_PRIMARY_P(NODE) BINFO_FLAG_5(NODE)
1855
1856 /* Used by various search routines. */
1857 #define IDENTIFIER_MARKED(NODE) TREE_LANG_FLAG_0 (NODE)
1858 \f
1859 /* A vec<tree_pair_s> of the vcall indices associated with the class
1860 NODE. The PURPOSE of each element is a FUNCTION_DECL for a virtual
1861 function. The VALUE is the index into the virtual table where the
1862 vcall offset for that function is stored, when NODE is a virtual
1863 base. */
1864 #define CLASSTYPE_VCALL_INDICES(NODE) \
1865 (LANG_TYPE_CLASS_CHECK (NODE)->vcall_indices)
1866
1867 /* The various vtables for the class NODE. The primary vtable will be
1868 first, followed by the construction vtables and VTT, if any. */
1869 #define CLASSTYPE_VTABLES(NODE) \
1870 (LANG_TYPE_CLASS_CHECK (NODE)->vtables)
1871
1872 /* The std::type_info variable representing this class, or NULL if no
1873 such variable has been created. This field is only set for the
1874 TYPE_MAIN_VARIANT of the class. */
1875 #define CLASSTYPE_TYPEINFO_VAR(NODE) \
1876 (LANG_TYPE_CLASS_CHECK (NODE)->typeinfo_var)
1877
1878 /* Accessor macros for the BINFO_VIRTUALS list. */
1879
1880 /* The number of bytes by which to adjust the `this' pointer when
1881 calling this virtual function. Subtract this value from the this
1882 pointer. Always non-NULL, might be constant zero though. */
1883 #define BV_DELTA(NODE) (TREE_PURPOSE (NODE))
1884
1885 /* If non-NULL, the vtable index at which to find the vcall offset
1886 when calling this virtual function. Add the value at that vtable
1887 index to the this pointer. */
1888 #define BV_VCALL_INDEX(NODE) (TREE_TYPE (NODE))
1889
1890 /* The function to call. */
1891 #define BV_FN(NODE) (TREE_VALUE (NODE))
1892
1893 /* Whether or not this entry is for a lost primary virtual base. */
1894 #define BV_LOST_PRIMARY(NODE) (TREE_LANG_FLAG_0 (NODE))
1895 \f
1896 /* For FUNCTION_TYPE or METHOD_TYPE, a list of the exceptions that
1897 this type can raise. Each TREE_VALUE is a _TYPE. The TREE_VALUE
1898 will be NULL_TREE to indicate a throw specification of `()', or
1899 no exceptions allowed. For a noexcept specification, TREE_VALUE
1900 is NULL_TREE and TREE_PURPOSE is the constant-expression. For
1901 a deferred noexcept-specification, TREE_PURPOSE is a DEFERRED_NOEXCEPT
1902 (for templates) or an OVERLOAD list of functions (for implicitly
1903 declared functions). */
1904 #define TYPE_RAISES_EXCEPTIONS(NODE) \
1905 TYPE_LANG_SLOT_1 (FUNC_OR_METHOD_CHECK (NODE))
1906
1907 /* For FUNCTION_TYPE or METHOD_TYPE, return 1 iff it is declared `throw()'
1908 or noexcept(true). */
1909 #define TYPE_NOTHROW_P(NODE) nothrow_spec_p (TYPE_RAISES_EXCEPTIONS (NODE))
1910
1911 /* For FUNCTION_TYPE or METHOD_TYPE, true if NODE is noexcept. This is the
1912 case for things declared noexcept(true) and, with -fnothrow-opt, for
1913 throw() functions. */
1914 #define TYPE_NOEXCEPT_P(NODE) type_noexcept_p (NODE)
1915
1916 /* The binding level associated with the namespace. */
1917 #define NAMESPACE_LEVEL(NODE) \
1918 (LANG_DECL_NS_CHECK (NODE)->level)
1919 \f
1920 /* Flags shared by all forms of DECL_LANG_SPECIFIC.
1921
1922 Some of the flags live here only to make lang_decl_min/fn smaller. Do
1923 not make this struct larger than 32 bits; instead, make sel smaller. */
1924
1925 struct GTY(()) lang_decl_base {
1926 unsigned selector : 16; /* Larger than necessary for faster access. */
1927 ENUM_BITFIELD(languages) language : 4;
1928 unsigned use_template : 2;
1929 unsigned not_really_extern : 1; /* var or fn */
1930 unsigned initialized_in_class : 1; /* var or fn */
1931 unsigned repo_available_p : 1; /* var or fn */
1932 unsigned threadprivate_or_deleted_p : 1; /* var or fn */
1933 unsigned anticipated_p : 1; /* fn, type or template */
1934 unsigned friend_attr : 1; /* fn, type or template */
1935 unsigned template_conv_p : 1; /* var or template */
1936 unsigned odr_used : 1; /* var or fn */
1937 unsigned u2sel : 1;
1938 /* 1 spare bit */
1939 };
1940
1941 /* True for DECL codes which have template info and access. */
1942 #define LANG_DECL_HAS_MIN(NODE) \
1943 (VAR_OR_FUNCTION_DECL_P (NODE) \
1944 || TREE_CODE (NODE) == FIELD_DECL \
1945 || TREE_CODE (NODE) == CONST_DECL \
1946 || TREE_CODE (NODE) == TYPE_DECL \
1947 || TREE_CODE (NODE) == TEMPLATE_DECL \
1948 || TREE_CODE (NODE) == USING_DECL)
1949
1950 /* DECL_LANG_SPECIFIC for the above codes. */
1951
1952 struct GTY(()) lang_decl_min {
1953 struct lang_decl_base base;
1954
1955 /* In a FUNCTION_DECL for which DECL_THUNK_P holds, this is
1956 THUNK_ALIAS.
1957 In a FUNCTION_DECL for which DECL_THUNK_P does not hold,
1958 VAR_DECL, TYPE_DECL, or TEMPLATE_DECL, this is
1959 DECL_TEMPLATE_INFO. */
1960 tree template_info;
1961
1962 union lang_decl_u2 {
1963 /* In a FUNCTION_DECL for which DECL_THUNK_P holds, this is
1964 THUNK_VIRTUAL_OFFSET.
1965 Otherwise this is DECL_ACCESS. */
1966 tree GTY ((tag ("0"))) access;
1967
1968 /* For VAR_DECL in function, this is DECL_DISCRIMINATOR. */
1969 int GTY ((tag ("1"))) discriminator;
1970 } GTY ((desc ("%0.u.base.u2sel"))) u2;
1971 };
1972
1973 /* Additional DECL_LANG_SPECIFIC information for functions. */
1974
1975 struct GTY(()) lang_decl_fn {
1976 struct lang_decl_min min;
1977
1978 /* In an overloaded operator, this is the value of
1979 DECL_OVERLOADED_OPERATOR_P. */
1980 ENUM_BITFIELD (tree_code) operator_code : 16;
1981
1982 unsigned global_ctor_p : 1;
1983 unsigned global_dtor_p : 1;
1984 unsigned constructor_attr : 1;
1985 unsigned destructor_attr : 1;
1986 unsigned assignment_operator_p : 1;
1987 unsigned static_function : 1;
1988 unsigned pure_virtual : 1;
1989 unsigned defaulted_p : 1;
1990
1991 unsigned has_in_charge_parm_p : 1;
1992 unsigned has_vtt_parm_p : 1;
1993 unsigned pending_inline_p : 1;
1994 unsigned nonconverting : 1;
1995 unsigned thunk_p : 1;
1996 unsigned this_thunk_p : 1;
1997 unsigned hidden_friend_p : 1;
1998 unsigned omp_declare_reduction_p : 1;
1999 /* No spare bits on 32-bit hosts, 32 on 64-bit hosts. */
2000
2001 /* For a non-thunk function decl, this is a tree list of
2002 friendly classes. For a thunk function decl, it is the
2003 thunked to function decl. */
2004 tree befriending_classes;
2005
2006 /* For a non-virtual FUNCTION_DECL, this is
2007 DECL_FRIEND_CONTEXT. For a virtual FUNCTION_DECL for which
2008 DECL_THIS_THUNK_P does not hold, this is DECL_THUNKS. Both
2009 this pointer and result pointer adjusting thunks are
2010 chained here. This pointer thunks to return pointer thunks
2011 will be chained on the return pointer thunk. */
2012 tree context;
2013
2014 union lang_decl_u5
2015 {
2016 /* In a non-thunk FUNCTION_DECL or TEMPLATE_DECL, this is
2017 DECL_CLONED_FUNCTION. */
2018 tree GTY ((tag ("0"))) cloned_function;
2019
2020 /* In a FUNCTION_DECL for which THUNK_P holds this is the
2021 THUNK_FIXED_OFFSET. */
2022 HOST_WIDE_INT GTY ((tag ("1"))) fixed_offset;
2023 } GTY ((desc ("%1.thunk_p"))) u5;
2024
2025 union lang_decl_u3
2026 {
2027 struct cp_token_cache * GTY ((tag ("1"))) pending_inline_info;
2028 struct language_function * GTY ((tag ("0")))
2029 saved_language_function;
2030 } GTY ((desc ("%1.pending_inline_p"))) u;
2031
2032 };
2033
2034 /* DECL_LANG_SPECIFIC for namespaces. */
2035
2036 struct GTY(()) lang_decl_ns {
2037 struct lang_decl_base base;
2038 cp_binding_level *level;
2039 };
2040
2041 /* DECL_LANG_SPECIFIC for parameters. */
2042
2043 struct GTY(()) lang_decl_parm {
2044 struct lang_decl_base base;
2045 int level;
2046 int index;
2047 };
2048
2049 /* DECL_LANG_SPECIFIC for all types. It would be nice to just make this a
2050 union rather than a struct containing a union as its only field, but
2051 tree.h declares it as a struct. */
2052
2053 struct GTY((variable_size)) lang_decl {
2054 union GTY((desc ("%h.base.selector"))) lang_decl_u {
2055 struct lang_decl_base GTY ((default)) base;
2056 struct lang_decl_min GTY((tag ("0"))) min;
2057 struct lang_decl_fn GTY ((tag ("1"))) fn;
2058 struct lang_decl_ns GTY((tag ("2"))) ns;
2059 struct lang_decl_parm GTY((tag ("3"))) parm;
2060 } u;
2061 };
2062
2063 /* Looks through a template (if present) to find what it declares. */
2064 #define STRIP_TEMPLATE(NODE) \
2065 (TREE_CODE (NODE) == TEMPLATE_DECL ? DECL_TEMPLATE_RESULT (NODE) : NODE)
2066
2067 #if defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 2007)
2068
2069 #define LANG_DECL_MIN_CHECK(NODE) __extension__ \
2070 ({ struct lang_decl *lt = DECL_LANG_SPECIFIC (NODE); \
2071 if (!LANG_DECL_HAS_MIN (NODE)) \
2072 lang_check_failed (__FILE__, __LINE__, __FUNCTION__); \
2073 &lt->u.min; })
2074
2075 /* We want to be able to check DECL_CONSTRUCTOR_P and such on a function
2076 template, not just on a FUNCTION_DECL. So when looking for things in
2077 lang_decl_fn, look down through a TEMPLATE_DECL into its result. */
2078 #define LANG_DECL_FN_CHECK(NODE) __extension__ \
2079 ({ struct lang_decl *lt = DECL_LANG_SPECIFIC (STRIP_TEMPLATE (NODE)); \
2080 if (!DECL_DECLARES_FUNCTION_P (NODE) || lt->u.base.selector != 1) \
2081 lang_check_failed (__FILE__, __LINE__, __FUNCTION__); \
2082 &lt->u.fn; })
2083
2084 #define LANG_DECL_NS_CHECK(NODE) __extension__ \
2085 ({ struct lang_decl *lt = DECL_LANG_SPECIFIC (NODE); \
2086 if (TREE_CODE (NODE) != NAMESPACE_DECL || lt->u.base.selector != 2) \
2087 lang_check_failed (__FILE__, __LINE__, __FUNCTION__); \
2088 &lt->u.ns; })
2089
2090 #define LANG_DECL_PARM_CHECK(NODE) __extension__ \
2091 ({ struct lang_decl *lt = DECL_LANG_SPECIFIC (NODE); \
2092 if (TREE_CODE (NODE) != PARM_DECL) \
2093 lang_check_failed (__FILE__, __LINE__, __FUNCTION__); \
2094 &lt->u.parm; })
2095
2096 #define LANG_DECL_U2_CHECK(NODE, TF) __extension__ \
2097 ({ struct lang_decl *lt = DECL_LANG_SPECIFIC (NODE); \
2098 if (!LANG_DECL_HAS_MIN (NODE) || lt->u.base.u2sel != TF) \
2099 lang_check_failed (__FILE__, __LINE__, __FUNCTION__); \
2100 &lt->u.min.u2; })
2101
2102 #else
2103
2104 #define LANG_DECL_MIN_CHECK(NODE) \
2105 (&DECL_LANG_SPECIFIC (NODE)->u.min)
2106
2107 #define LANG_DECL_FN_CHECK(NODE) \
2108 (&DECL_LANG_SPECIFIC (STRIP_TEMPLATE (NODE))->u.fn)
2109
2110 #define LANG_DECL_NS_CHECK(NODE) \
2111 (&DECL_LANG_SPECIFIC (NODE)->u.ns)
2112
2113 #define LANG_DECL_PARM_CHECK(NODE) \
2114 (&DECL_LANG_SPECIFIC (NODE)->u.parm)
2115
2116 #define LANG_DECL_U2_CHECK(NODE, TF) \
2117 (&DECL_LANG_SPECIFIC (NODE)->u.min.u2)
2118
2119 #endif /* ENABLE_TREE_CHECKING */
2120
2121 /* For a FUNCTION_DECL or a VAR_DECL, the language linkage for the
2122 declaration. Some entities (like a member function in a local
2123 class, or a local variable) do not have linkage at all, and this
2124 macro should not be used in those cases.
2125
2126 Implementation note: A FUNCTION_DECL without DECL_LANG_SPECIFIC was
2127 created by language-independent code, and has C linkage. Most
2128 VAR_DECLs have C++ linkage, and do not have DECL_LANG_SPECIFIC, but
2129 we do create DECL_LANG_SPECIFIC for variables with non-C++ linkage. */
2130 #define DECL_LANGUAGE(NODE) \
2131 (DECL_LANG_SPECIFIC (NODE) \
2132 ? DECL_LANG_SPECIFIC (NODE)->u.base.language \
2133 : (TREE_CODE (NODE) == FUNCTION_DECL \
2134 ? lang_c : lang_cplusplus))
2135
2136 /* Set the language linkage for NODE to LANGUAGE. */
2137 #define SET_DECL_LANGUAGE(NODE, LANGUAGE) \
2138 (DECL_LANG_SPECIFIC (NODE)->u.base.language = (LANGUAGE))
2139
2140 /* For FUNCTION_DECLs and TEMPLATE_DECLs: nonzero means that this function
2141 is a constructor. */
2142 #define DECL_CONSTRUCTOR_P(NODE) \
2143 DECL_CXX_CONSTRUCTOR_P (STRIP_TEMPLATE (NODE))
2144
2145 /* Nonzero if NODE (a FUNCTION_DECL) is a constructor for a complete
2146 object. */
2147 #define DECL_COMPLETE_CONSTRUCTOR_P(NODE) \
2148 (DECL_CONSTRUCTOR_P (NODE) \
2149 && DECL_NAME (NODE) == complete_ctor_identifier)
2150
2151 /* Nonzero if NODE (a FUNCTION_DECL) is a constructor for a base
2152 object. */
2153 #define DECL_BASE_CONSTRUCTOR_P(NODE) \
2154 (DECL_CONSTRUCTOR_P (NODE) \
2155 && DECL_NAME (NODE) == base_ctor_identifier)
2156
2157 /* Nonzero if NODE (a FUNCTION_DECL) is a constructor, but not either the
2158 specialized in-charge constructor or the specialized not-in-charge
2159 constructor. */
2160 #define DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P(NODE) \
2161 (DECL_DECLARES_FUNCTION_P (NODE) && DECL_CONSTRUCTOR_P (NODE) \
2162 && !DECL_CLONED_FUNCTION_P (NODE))
2163
2164 /* Nonzero if NODE (a FUNCTION_DECL) is a copy constructor. */
2165 #define DECL_COPY_CONSTRUCTOR_P(NODE) \
2166 (DECL_CONSTRUCTOR_P (NODE) && copy_fn_p (NODE) > 0)
2167
2168 /* Nonzero if NODE (a FUNCTION_DECL) is a move constructor. */
2169 #define DECL_MOVE_CONSTRUCTOR_P(NODE) \
2170 (DECL_CONSTRUCTOR_P (NODE) && move_fn_p (NODE))
2171
2172 /* Nonzero if NODE (a FUNCTION_DECL or TEMPLATE_DECL)
2173 is a destructor. */
2174 #define DECL_DESTRUCTOR_P(NODE) \
2175 DECL_CXX_DESTRUCTOR_P (STRIP_TEMPLATE (NODE))
2176
2177 /* Nonzero if NODE (a FUNCTION_DECL) is a destructor, but not the
2178 specialized in-charge constructor, in-charge deleting constructor,
2179 or the base destructor. */
2180 #define DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P(NODE) \
2181 (DECL_DECLARES_FUNCTION_P (NODE) && DECL_DESTRUCTOR_P (NODE) \
2182 && !DECL_CLONED_FUNCTION_P (NODE))
2183
2184 /* Nonzero if NODE (a FUNCTION_DECL) is a destructor for a complete
2185 object. */
2186 #define DECL_COMPLETE_DESTRUCTOR_P(NODE) \
2187 (DECL_DESTRUCTOR_P (NODE) \
2188 && DECL_NAME (NODE) == complete_dtor_identifier)
2189
2190 /* Nonzero if NODE (a FUNCTION_DECL) is a destructor for a base
2191 object. */
2192 #define DECL_BASE_DESTRUCTOR_P(NODE) \
2193 (DECL_DESTRUCTOR_P (NODE) \
2194 && DECL_NAME (NODE) == base_dtor_identifier)
2195
2196 /* Nonzero if NODE (a FUNCTION_DECL) is a destructor for a complete
2197 object that deletes the object after it has been destroyed. */
2198 #define DECL_DELETING_DESTRUCTOR_P(NODE) \
2199 (DECL_DESTRUCTOR_P (NODE) \
2200 && DECL_NAME (NODE) == deleting_dtor_identifier)
2201
2202 /* Nonzero if NODE (a FUNCTION_DECL) is a cloned constructor or
2203 destructor. */
2204 #define DECL_CLONED_FUNCTION_P(NODE) (!!decl_cloned_function_p (NODE, true))
2205
2206 /* If DECL_CLONED_FUNCTION_P holds, this is the function that was
2207 cloned. */
2208 #define DECL_CLONED_FUNCTION(NODE) (*decl_cloned_function_p (NODE, false))
2209
2210 /* Perform an action for each clone of FN, if FN is a function with
2211 clones. This macro should be used like:
2212
2213 FOR_EACH_CLONE (clone, fn)
2214 { ... }
2215
2216 */
2217 #define FOR_EACH_CLONE(CLONE, FN) \
2218 if (TREE_CODE (FN) == FUNCTION_DECL \
2219 && (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (FN) \
2220 || DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (FN))) \
2221 for (CLONE = DECL_CHAIN (FN); \
2222 CLONE && DECL_CLONED_FUNCTION_P (CLONE); \
2223 CLONE = DECL_CHAIN (CLONE))
2224
2225 /* Nonzero if NODE has DECL_DISCRIMINATOR and not DECL_ACCESS. */
2226 #define DECL_DISCRIMINATOR_P(NODE) \
2227 (VAR_P (NODE) && DECL_FUNCTION_SCOPE_P (NODE))
2228
2229 /* Discriminator for name mangling. */
2230 #define DECL_DISCRIMINATOR(NODE) (LANG_DECL_U2_CHECK (NODE, 1)->discriminator)
2231
2232 /* True iff DECL_DISCRIMINATOR is set for a DECL_DISCRIMINATOR_P decl. */
2233 #define DECL_DISCRIMINATOR_SET_P(NODE) \
2234 (DECL_LANG_SPECIFIC (NODE) && DECL_LANG_SPECIFIC (NODE)->u.base.u2sel == 1)
2235
2236 /* The index of a user-declared parameter in its function, starting at 1.
2237 All artificial parameters will have index 0. */
2238 #define DECL_PARM_INDEX(NODE) \
2239 (LANG_DECL_PARM_CHECK (NODE)->index)
2240
2241 /* The level of a user-declared parameter in its function, starting at 1.
2242 A parameter of the function will have level 1; a parameter of the first
2243 nested function declarator (i.e. t in void f (void (*p)(T t))) will have
2244 level 2. */
2245 #define DECL_PARM_LEVEL(NODE) \
2246 (LANG_DECL_PARM_CHECK (NODE)->level)
2247
2248 /* Nonzero if the VTT parm has been added to NODE. */
2249 #define DECL_HAS_VTT_PARM_P(NODE) \
2250 (LANG_DECL_FN_CHECK (NODE)->has_vtt_parm_p)
2251
2252 /* Nonzero if NODE is a FUNCTION_DECL for which a VTT parameter is
2253 required. */
2254 #define DECL_NEEDS_VTT_PARM_P(NODE) \
2255 (CLASSTYPE_VBASECLASSES (DECL_CONTEXT (NODE)) \
2256 && (DECL_BASE_CONSTRUCTOR_P (NODE) \
2257 || DECL_BASE_DESTRUCTOR_P (NODE)))
2258
2259 /* Nonzero if NODE is a user-defined conversion operator. */
2260 #define DECL_CONV_FN_P(NODE) \
2261 (DECL_NAME (NODE) && IDENTIFIER_TYPENAME_P (DECL_NAME (NODE)))
2262
2263 /* If FN is a conversion operator, the type to which it converts.
2264 Otherwise, NULL_TREE. */
2265 #define DECL_CONV_FN_TYPE(FN) \
2266 (DECL_CONV_FN_P (FN) ? TREE_TYPE (DECL_NAME (FN)) : NULL_TREE)
2267
2268 /* Nonzero if NODE, which is a TEMPLATE_DECL, is a template
2269 conversion operator to a type dependent on the innermost template
2270 args. */
2271 #define DECL_TEMPLATE_CONV_FN_P(NODE) \
2272 (DECL_LANG_SPECIFIC (TEMPLATE_DECL_CHECK (NODE))->u.base.template_conv_p)
2273
2274 /* Nonzero if NODE, a static data member, was declared in its class as an
2275 array of unknown bound. */
2276 #define VAR_HAD_UNKNOWN_BOUND(NODE) \
2277 (DECL_LANG_SPECIFIC (VAR_DECL_CHECK (NODE)) \
2278 ? DECL_LANG_SPECIFIC (NODE)->u.base.template_conv_p \
2279 : false)
2280 #define SET_VAR_HAD_UNKNOWN_BOUND(NODE) \
2281 (DECL_LANG_SPECIFIC (VAR_DECL_CHECK (NODE))->u.base.template_conv_p = true)
2282
2283 /* Set the overloaded operator code for NODE to CODE. */
2284 #define SET_OVERLOADED_OPERATOR_CODE(NODE, CODE) \
2285 (LANG_DECL_FN_CHECK (NODE)->operator_code = (CODE))
2286
2287 /* If NODE is an overloaded operator, then this returns the TREE_CODE
2288 associated with the overloaded operator.
2289 DECL_ASSIGNMENT_OPERATOR_P must also be checked to determine
2290 whether or not NODE is an assignment operator. If NODE is not an
2291 overloaded operator, ERROR_MARK is returned. Since the numerical
2292 value of ERROR_MARK is zero, this macro can be used as a predicate
2293 to test whether or not NODE is an overloaded operator. */
2294 #define DECL_OVERLOADED_OPERATOR_P(NODE) \
2295 (IDENTIFIER_OPNAME_P (DECL_NAME (NODE)) \
2296 ? LANG_DECL_FN_CHECK (NODE)->operator_code : ERROR_MARK)
2297
2298 /* Nonzero if NODE is an assignment operator (including += and such). */
2299 #define DECL_ASSIGNMENT_OPERATOR_P(NODE) \
2300 (LANG_DECL_FN_CHECK (NODE)->assignment_operator_p)
2301
2302 /* For FUNCTION_DECLs: nonzero means that this function is a
2303 constructor or a destructor with an extra in-charge parameter to
2304 control whether or not virtual bases are constructed. */
2305 #define DECL_HAS_IN_CHARGE_PARM_P(NODE) \
2306 (LANG_DECL_FN_CHECK (NODE)->has_in_charge_parm_p)
2307
2308 /* Nonzero if DECL is a declaration of __builtin_constant_p. */
2309 #define DECL_IS_BUILTIN_CONSTANT_P(NODE) \
2310 (TREE_CODE (NODE) == FUNCTION_DECL \
2311 && DECL_BUILT_IN_CLASS (NODE) == BUILT_IN_NORMAL \
2312 && DECL_FUNCTION_CODE (NODE) == BUILT_IN_CONSTANT_P)
2313
2314 /* Nonzero for _DECL means that this decl appears in (or will appear
2315 in) as a member in a RECORD_TYPE or UNION_TYPE node. It is also for
2316 detecting circularity in case members are multiply defined. In the
2317 case of a VAR_DECL, it is also used to determine how program storage
2318 should be allocated. */
2319 #define DECL_IN_AGGR_P(NODE) (DECL_LANG_FLAG_3 (NODE))
2320
2321 /* Nonzero for a VAR_DECL means that the variable's initialization (if
2322 any) has been processed. (In general, DECL_INITIALIZED_P is
2323 !DECL_EXTERNAL, but static data members may be initialized even if
2324 not defined.) */
2325 #define DECL_INITIALIZED_P(NODE) \
2326 (TREE_LANG_FLAG_1 (VAR_DECL_CHECK (NODE)))
2327
2328 /* Nonzero for a VAR_DECL iff an explicit initializer was provided
2329 or a non-trivial constructor is called. */
2330 #define DECL_NONTRIVIALLY_INITIALIZED_P(NODE) \
2331 (TREE_LANG_FLAG_3 (VAR_DECL_CHECK (NODE)))
2332
2333 /* Nonzero for a VAR_DECL that was initialized with a
2334 constant-expression. */
2335 #define DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P(NODE) \
2336 (TREE_LANG_FLAG_2 (VAR_DECL_CHECK (NODE)))
2337
2338 /* Nonzero if the DECL was initialized in the class definition itself,
2339 rather than outside the class. This is used for both static member
2340 VAR_DECLS, and FUNCTION_DECLS that are defined in the class. */
2341 #define DECL_INITIALIZED_IN_CLASS_P(DECL) \
2342 (DECL_LANG_SPECIFIC (VAR_OR_FUNCTION_DECL_CHECK (DECL)) \
2343 ->u.base.initialized_in_class)
2344
2345 /* Nonzero if the DECL is used in the sense of 3.2 [basic.def.odr].
2346 Only available for decls with DECL_LANG_SPECIFIC. */
2347 #define DECL_ODR_USED(DECL) \
2348 (DECL_LANG_SPECIFIC (VAR_OR_FUNCTION_DECL_CHECK (DECL)) \
2349 ->u.base.odr_used)
2350
2351 /* Nonzero for DECL means that this decl is just a friend declaration,
2352 and should not be added to the list of members for this class. */
2353 #define DECL_FRIEND_P(NODE) \
2354 (DECL_LANG_SPECIFIC (TYPE_FUNCTION_OR_TEMPLATE_DECL_CHECK (NODE)) \
2355 ->u.base.friend_attr)
2356
2357 /* A TREE_LIST of the types which have befriended this FUNCTION_DECL. */
2358 #define DECL_BEFRIENDING_CLASSES(NODE) \
2359 (LANG_DECL_FN_CHECK (NODE)->befriending_classes)
2360
2361 /* Nonzero for FUNCTION_DECL means that this decl is a static
2362 member function. */
2363 #define DECL_STATIC_FUNCTION_P(NODE) \
2364 (LANG_DECL_FN_CHECK (NODE)->static_function)
2365
2366 /* Nonzero for FUNCTION_DECL means that this decl is a non-static
2367 member function. */
2368 #define DECL_NONSTATIC_MEMBER_FUNCTION_P(NODE) \
2369 (TREE_CODE (TREE_TYPE (NODE)) == METHOD_TYPE)
2370
2371 /* Nonzero for FUNCTION_DECL means that this decl is a member function
2372 (static or non-static). */
2373 #define DECL_FUNCTION_MEMBER_P(NODE) \
2374 (DECL_NONSTATIC_MEMBER_FUNCTION_P (NODE) || DECL_STATIC_FUNCTION_P (NODE))
2375
2376 /* Nonzero for FUNCTION_DECL means that this member function
2377 has `this' as const X *const. */
2378 #define DECL_CONST_MEMFUNC_P(NODE) \
2379 (DECL_NONSTATIC_MEMBER_FUNCTION_P (NODE) \
2380 && CP_TYPE_CONST_P (TREE_TYPE (TREE_VALUE \
2381 (TYPE_ARG_TYPES (TREE_TYPE (NODE))))))
2382
2383 /* Nonzero for FUNCTION_DECL means that this member function
2384 has `this' as volatile X *const. */
2385 #define DECL_VOLATILE_MEMFUNC_P(NODE) \
2386 (DECL_NONSTATIC_MEMBER_FUNCTION_P (NODE) \
2387 && CP_TYPE_VOLATILE_P (TREE_TYPE (TREE_VALUE \
2388 (TYPE_ARG_TYPES (TREE_TYPE (NODE))))))
2389
2390 /* Nonzero for a DECL means that this member is a non-static member. */
2391 #define DECL_NONSTATIC_MEMBER_P(NODE) \
2392 (DECL_NONSTATIC_MEMBER_FUNCTION_P (NODE) \
2393 || TREE_CODE (NODE) == FIELD_DECL)
2394
2395 /* Nonzero for _DECL means that this member object type
2396 is mutable. */
2397 #define DECL_MUTABLE_P(NODE) (DECL_LANG_FLAG_0 (NODE))
2398
2399 /* Nonzero for _DECL means that this constructor or conversion function is
2400 non-converting. */
2401 #define DECL_NONCONVERTING_P(NODE) \
2402 (LANG_DECL_FN_CHECK (NODE)->nonconverting)
2403
2404 /* Nonzero for FUNCTION_DECL means that this member function is a pure
2405 virtual function. */
2406 #define DECL_PURE_VIRTUAL_P(NODE) \
2407 (LANG_DECL_FN_CHECK (NODE)->pure_virtual)
2408
2409 /* True (in a FUNCTION_DECL) if NODE is a virtual function that is an
2410 invalid overrider for a function from a base class. Once we have
2411 complained about an invalid overrider we avoid complaining about it
2412 again. */
2413 #define DECL_INVALID_OVERRIDER_P(NODE) \
2414 (DECL_LANG_FLAG_4 (NODE))
2415
2416 /* True (in a FUNCTION_DECL) if NODE is a function declared with
2417 an override virt-specifier */
2418 #define DECL_OVERRIDE_P(NODE) (TREE_LANG_FLAG_0 (NODE))
2419
2420 /* The thunks associated with NODE, a FUNCTION_DECL. */
2421 #define DECL_THUNKS(NODE) \
2422 (DECL_VIRTUAL_P (NODE) ? LANG_DECL_FN_CHECK (NODE)->context : NULL_TREE)
2423
2424 /* Set DECL_THUNKS. */
2425 #define SET_DECL_THUNKS(NODE,THUNKS) \
2426 (LANG_DECL_FN_CHECK (NODE)->context = (THUNKS))
2427
2428 /* If NODE, a FUNCTION_DECL, is a C++11 inheriting constructor, then this
2429 is the base it inherits from. */
2430 #define DECL_INHERITED_CTOR_BASE(NODE) \
2431 (DECL_CONSTRUCTOR_P (NODE) ? LANG_DECL_FN_CHECK (NODE)->context : NULL_TREE)
2432
2433 /* Set the inherited base. */
2434 #define SET_DECL_INHERITED_CTOR_BASE(NODE,INH) \
2435 (LANG_DECL_FN_CHECK (NODE)->context = (INH))
2436
2437 /* Nonzero if NODE is a thunk, rather than an ordinary function. */
2438 #define DECL_THUNK_P(NODE) \
2439 (TREE_CODE (NODE) == FUNCTION_DECL \
2440 && DECL_LANG_SPECIFIC (NODE) \
2441 && LANG_DECL_FN_CHECK (NODE)->thunk_p)
2442
2443 /* Set DECL_THUNK_P for node. */
2444 #define SET_DECL_THUNK_P(NODE, THIS_ADJUSTING) \
2445 (LANG_DECL_FN_CHECK (NODE)->thunk_p = 1, \
2446 LANG_DECL_FN_CHECK (NODE)->this_thunk_p = (THIS_ADJUSTING))
2447
2448 /* Nonzero if NODE is a this pointer adjusting thunk. */
2449 #define DECL_THIS_THUNK_P(NODE) \
2450 (DECL_THUNK_P (NODE) && LANG_DECL_FN_CHECK (NODE)->this_thunk_p)
2451
2452 /* Nonzero if NODE is a result pointer adjusting thunk. */
2453 #define DECL_RESULT_THUNK_P(NODE) \
2454 (DECL_THUNK_P (NODE) && !LANG_DECL_FN_CHECK (NODE)->this_thunk_p)
2455
2456 /* Nonzero if NODE is a FUNCTION_DECL, but not a thunk. */
2457 #define DECL_NON_THUNK_FUNCTION_P(NODE) \
2458 (TREE_CODE (NODE) == FUNCTION_DECL && !DECL_THUNK_P (NODE))
2459
2460 /* Nonzero if NODE is `extern "C"'. */
2461 #define DECL_EXTERN_C_P(NODE) \
2462 (DECL_LANGUAGE (NODE) == lang_c)
2463
2464 /* Nonzero if NODE is an `extern "C"' function. */
2465 #define DECL_EXTERN_C_FUNCTION_P(NODE) \
2466 (DECL_NON_THUNK_FUNCTION_P (NODE) && DECL_EXTERN_C_P (NODE))
2467
2468 /* True iff DECL is an entity with vague linkage whose definition is
2469 available in this translation unit. */
2470 #define DECL_REPO_AVAILABLE_P(NODE) \
2471 (DECL_LANG_SPECIFIC (NODE)->u.base.repo_available_p)
2472
2473 /* True if DECL is declared 'constexpr'. */
2474 #define DECL_DECLARED_CONSTEXPR_P(DECL) \
2475 DECL_LANG_FLAG_8 (VAR_OR_FUNCTION_DECL_CHECK (STRIP_TEMPLATE (DECL)))
2476
2477 /* Nonzero if this DECL is the __PRETTY_FUNCTION__ variable in a
2478 template function. */
2479 #define DECL_PRETTY_FUNCTION_P(NODE) \
2480 (DECL_NAME (NODE) \
2481 && !strcmp (IDENTIFIER_POINTER (DECL_NAME (NODE)), "__PRETTY_FUNCTION__"))
2482
2483 /* Nonzero if the thread-local variable was declared with __thread
2484 as opposed to thread_local. */
2485 #define DECL_GNU_TLS_P(NODE) \
2486 (TREE_LANG_FLAG_0 (VAR_DECL_CHECK (NODE)))
2487
2488 /* The _TYPE context in which this _DECL appears. This field holds the
2489 class where a virtual function instance is actually defined. */
2490 #define DECL_CLASS_CONTEXT(NODE) \
2491 (DECL_CLASS_SCOPE_P (NODE) ? DECL_CONTEXT (NODE) : NULL_TREE)
2492
2493 /* For a non-member friend function, the class (if any) in which this
2494 friend was defined. For example, given:
2495
2496 struct S { friend void f (); };
2497
2498 the DECL_FRIEND_CONTEXT for `f' will be `S'. */
2499 #define DECL_FRIEND_CONTEXT(NODE) \
2500 ((DECL_DECLARES_FUNCTION_P (NODE) \
2501 && DECL_FRIEND_P (NODE) && !DECL_FUNCTION_MEMBER_P (NODE)) \
2502 ? LANG_DECL_FN_CHECK (NODE)->context \
2503 : NULL_TREE)
2504
2505 /* Set the DECL_FRIEND_CONTEXT for NODE to CONTEXT. */
2506 #define SET_DECL_FRIEND_CONTEXT(NODE, CONTEXT) \
2507 (LANG_DECL_FN_CHECK (NODE)->context = (CONTEXT))
2508
2509 #define CP_DECL_CONTEXT(NODE) \
2510 (!DECL_FILE_SCOPE_P (NODE) ? DECL_CONTEXT (NODE) : global_namespace)
2511 #define CP_TYPE_CONTEXT(NODE) \
2512 (!TYPE_FILE_SCOPE_P (NODE) ? TYPE_CONTEXT (NODE) : global_namespace)
2513 #define FROB_CONTEXT(NODE) \
2514 ((NODE) == global_namespace ? DECL_CONTEXT (NODE) : (NODE))
2515
2516 /* 1 iff NODE has namespace scope, including the global namespace. */
2517 #define DECL_NAMESPACE_SCOPE_P(NODE) \
2518 (!DECL_TEMPLATE_PARM_P (NODE) \
2519 && TREE_CODE (CP_DECL_CONTEXT (NODE)) == NAMESPACE_DECL)
2520
2521 #define TYPE_NAMESPACE_SCOPE_P(NODE) \
2522 (TREE_CODE (CP_TYPE_CONTEXT (NODE)) == NAMESPACE_DECL)
2523
2524 #define NAMESPACE_SCOPE_P(NODE) \
2525 ((DECL_P (NODE) && DECL_NAMESPACE_SCOPE_P (NODE)) \
2526 || (TYPE_P (NODE) && TYPE_NAMESPACE_SCOPE_P (NODE)))
2527
2528 /* 1 iff NODE is a class member. */
2529 #define DECL_CLASS_SCOPE_P(NODE) \
2530 (DECL_CONTEXT (NODE) && TYPE_P (DECL_CONTEXT (NODE)))
2531
2532 #define TYPE_CLASS_SCOPE_P(NODE) \
2533 (TYPE_CONTEXT (NODE) && TYPE_P (TYPE_CONTEXT (NODE)))
2534
2535 /* 1 iff NODE is function-local. */
2536 #define DECL_FUNCTION_SCOPE_P(NODE) \
2537 (DECL_CONTEXT (NODE) \
2538 && TREE_CODE (DECL_CONTEXT (NODE)) == FUNCTION_DECL)
2539
2540 #define TYPE_FUNCTION_SCOPE_P(NODE) \
2541 (TYPE_CONTEXT (NODE) && TREE_CODE (TYPE_CONTEXT (NODE)) == FUNCTION_DECL)
2542
2543 /* 1 iff VAR_DECL node NODE is a type-info decl. This flag is set for
2544 both the primary typeinfo object and the associated NTBS name. */
2545 #define DECL_TINFO_P(NODE) TREE_LANG_FLAG_4 (VAR_DECL_CHECK (NODE))
2546
2547 /* 1 iff VAR_DECL node NODE is virtual table or VTT. */
2548 #define DECL_VTABLE_OR_VTT_P(NODE) TREE_LANG_FLAG_5 (VAR_DECL_CHECK (NODE))
2549
2550 /* 1 iff FUNCTION_TYPE or METHOD_TYPE has a ref-qualifier (either & or &&). */
2551 #define FUNCTION_REF_QUALIFIED(NODE) \
2552 TREE_LANG_FLAG_4 (FUNC_OR_METHOD_CHECK (NODE))
2553
2554 /* 1 iff FUNCTION_TYPE or METHOD_TYPE has &&-ref-qualifier. */
2555 #define FUNCTION_RVALUE_QUALIFIED(NODE) \
2556 TREE_LANG_FLAG_5 (FUNC_OR_METHOD_CHECK (NODE))
2557
2558 /* Returns 1 iff VAR_DECL is a construction virtual table.
2559 DECL_VTABLE_OR_VTT_P will be true in this case and must be checked
2560 before using this macro. */
2561 #define DECL_CONSTRUCTION_VTABLE_P(NODE) \
2562 TREE_LANG_FLAG_6 (VAR_DECL_CHECK (NODE))
2563
2564 /* 1 iff NODE is function-local, but for types. */
2565 #define LOCAL_CLASS_P(NODE) \
2566 (decl_function_context (TYPE_MAIN_DECL (NODE)) != NULL_TREE)
2567
2568 /* For a NAMESPACE_DECL: the list of using namespace directives
2569 The PURPOSE is the used namespace, the value is the namespace
2570 that is the common ancestor. */
2571 #define DECL_NAMESPACE_USING(NODE) DECL_VINDEX (NAMESPACE_DECL_CHECK (NODE))
2572
2573 /* In a NAMESPACE_DECL, the DECL_INITIAL is used to record all users
2574 of a namespace, to record the transitive closure of using namespace. */
2575 #define DECL_NAMESPACE_USERS(NODE) DECL_INITIAL (NAMESPACE_DECL_CHECK (NODE))
2576
2577 /* In a NAMESPACE_DECL, the list of namespaces which have associated
2578 themselves with this one. */
2579 #define DECL_NAMESPACE_ASSOCIATIONS(NODE) \
2580 (NAMESPACE_DECL_CHECK (NODE)->decl_non_common.saved_tree)
2581
2582 /* In a NAMESPACE_DECL, points to the original namespace if this is
2583 a namespace alias. */
2584 #define DECL_NAMESPACE_ALIAS(NODE) \
2585 DECL_ABSTRACT_ORIGIN (NAMESPACE_DECL_CHECK (NODE))
2586 #define ORIGINAL_NAMESPACE(NODE) \
2587 (DECL_NAMESPACE_ALIAS (NODE) ? DECL_NAMESPACE_ALIAS (NODE) : (NODE))
2588
2589 /* Nonzero if NODE is the std namespace. */
2590 #define DECL_NAMESPACE_STD_P(NODE) \
2591 (TREE_CODE (NODE) == NAMESPACE_DECL \
2592 && CP_DECL_CONTEXT (NODE) == global_namespace \
2593 && DECL_NAME (NODE) == std_identifier)
2594
2595 /* In a TREE_LIST concatenating using directives, indicate indirect
2596 directives */
2597 #define TREE_INDIRECT_USING(NODE) TREE_LANG_FLAG_0 (TREE_LIST_CHECK (NODE))
2598
2599 /* In a TREE_LIST in an attribute list, indicates that the attribute
2600 must be applied at instantiation time. */
2601 #define ATTR_IS_DEPENDENT(NODE) TREE_LANG_FLAG_0 (TREE_LIST_CHECK (NODE))
2602
2603 /* In a TREE_LIST in the argument of attribute abi_tag, indicates that the tag
2604 was inherited from a template parameter, not explicitly indicated. */
2605 #define ABI_TAG_IMPLICIT(NODE) TREE_LANG_FLAG_0 (TREE_LIST_CHECK (NODE))
2606
2607 extern tree decl_shadowed_for_var_lookup (tree);
2608 extern void decl_shadowed_for_var_insert (tree, tree);
2609
2610 /* Non zero if this is a using decl for a dependent scope. */
2611 #define DECL_DEPENDENT_P(NODE) DECL_LANG_FLAG_0 (USING_DECL_CHECK (NODE))
2612
2613 /* The scope named in a using decl. */
2614 #define USING_DECL_SCOPE(NODE) TREE_TYPE (USING_DECL_CHECK (NODE))
2615
2616 /* The decls named by a using decl. */
2617 #define USING_DECL_DECLS(NODE) DECL_INITIAL (USING_DECL_CHECK (NODE))
2618
2619 /* Non zero if the using decl refers to a dependent type. */
2620 #define USING_DECL_TYPENAME_P(NODE) DECL_LANG_FLAG_1 (USING_DECL_CHECK (NODE))
2621
2622 /* In a VAR_DECL, true if we have a shadowed local variable
2623 in the shadowed var table for this VAR_DECL. */
2624 #define DECL_HAS_SHADOWED_FOR_VAR_P(NODE) \
2625 (VAR_DECL_CHECK (NODE)->decl_with_vis.shadowed_for_var_p)
2626
2627 /* In a VAR_DECL for a variable declared in a for statement,
2628 this is the shadowed (local) variable. */
2629 #define DECL_SHADOWED_FOR_VAR(NODE) \
2630 (DECL_HAS_SHADOWED_FOR_VAR_P(NODE) ? decl_shadowed_for_var_lookup (NODE) : NULL)
2631
2632 #define SET_DECL_SHADOWED_FOR_VAR(NODE, VAL) \
2633 (decl_shadowed_for_var_insert (NODE, VAL))
2634
2635 /* In a FUNCTION_DECL, this is nonzero if this function was defined in
2636 the class definition. We have saved away the text of the function,
2637 but have not yet processed it. */
2638 #define DECL_PENDING_INLINE_P(NODE) \
2639 (LANG_DECL_FN_CHECK (NODE)->pending_inline_p)
2640
2641 /* If DECL_PENDING_INLINE_P holds, this is the saved text of the
2642 function. */
2643 #define DECL_PENDING_INLINE_INFO(NODE) \
2644 (LANG_DECL_FN_CHECK (NODE)->u.pending_inline_info)
2645
2646 /* Nonzero for TYPE_DECL means that it was written 'using name = type'. */
2647 #define TYPE_DECL_ALIAS_P(NODE) \
2648 DECL_LANG_FLAG_6 (TYPE_DECL_CHECK (NODE))
2649
2650 /* Nonzero for a type which is an alias for another type; i.e, a type
2651 which declaration was written 'using name-of-type =
2652 another-type'. */
2653 #define TYPE_ALIAS_P(NODE) \
2654 (TYPE_P (NODE) \
2655 && TYPE_NAME (NODE) \
2656 && TREE_CODE (TYPE_NAME (NODE)) == TYPE_DECL \
2657 && TYPE_DECL_ALIAS_P (TYPE_NAME (NODE)))
2658
2659 /* For a class type: if this structure has many fields, we'll sort them
2660 and put them into a TREE_VEC. */
2661 #define CLASSTYPE_SORTED_FIELDS(NODE) \
2662 (LANG_TYPE_CLASS_CHECK (NODE)->sorted_fields)
2663
2664 /* If non-NULL for a VAR_DECL, FUNCTION_DECL, TYPE_DECL or
2665 TEMPLATE_DECL, the entity is either a template specialization (if
2666 DECL_USE_TEMPLATE is nonzero) or the abstract instance of the
2667 template itself.
2668
2669 In either case, DECL_TEMPLATE_INFO is a TREE_LIST, whose
2670 TREE_PURPOSE is the TEMPLATE_DECL of which this entity is a
2671 specialization or abstract instance. The TREE_VALUE is the
2672 template arguments used to specialize the template.
2673
2674 Consider:
2675
2676 template <typename T> struct S { friend void f(T) {} };
2677
2678 In this case, S<int>::f is, from the point of view of the compiler,
2679 an instantiation of a template -- but, from the point of view of
2680 the language, each instantiation of S results in a wholly unrelated
2681 global function f. In this case, DECL_TEMPLATE_INFO for S<int>::f
2682 will be non-NULL, but DECL_USE_TEMPLATE will be zero. */
2683 #define DECL_TEMPLATE_INFO(NODE) \
2684 (DECL_LANG_SPECIFIC (VAR_TEMPL_TYPE_FIELD_OR_FUNCTION_DECL_CHECK (NODE)) \
2685 ->u.min.template_info)
2686
2687 /* For a VAR_DECL, indicates that the variable is actually a
2688 non-static data member of anonymous union that has been promoted to
2689 variable status. */
2690 #define DECL_ANON_UNION_VAR_P(NODE) \
2691 (DECL_LANG_FLAG_4 (VAR_DECL_CHECK (NODE)))
2692
2693 /* Template information for a RECORD_TYPE or UNION_TYPE. */
2694 #define CLASSTYPE_TEMPLATE_INFO(NODE) \
2695 (LANG_TYPE_CLASS_CHECK (RECORD_OR_UNION_CHECK (NODE))->template_info)
2696
2697 /* Template information for an ENUMERAL_TYPE. Although an enumeration may
2698 not be a primary template, it may be declared within the scope of a
2699 primary template and the enumeration constants may depend on
2700 non-type template parameters. */
2701 #define ENUM_TEMPLATE_INFO(NODE) \
2702 (TYPE_LANG_SLOT_1 (ENUMERAL_TYPE_CHECK (NODE)))
2703
2704 /* Template information for a template template parameter. */
2705 #define TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO(NODE) \
2706 (LANG_TYPE_CLASS_CHECK (BOUND_TEMPLATE_TEMPLATE_PARM_TYPE_CHECK (NODE)) \
2707 ->template_info)
2708
2709 /* Template information for an ENUMERAL_, RECORD_, UNION_TYPE, or
2710 BOUND_TEMPLATE_TEMPLATE_PARM type. Note that if NODE is a
2711 specialization of an alias template, this accessor returns the
2712 template info for the alias template, not the one (if any) for the
2713 template of the underlying type. */
2714 #define TYPE_TEMPLATE_INFO(NODE) \
2715 ((TYPE_ALIAS_P (NODE) && DECL_LANG_SPECIFIC (TYPE_NAME (NODE))) \
2716 ? (DECL_LANG_SPECIFIC (TYPE_NAME (NODE)) \
2717 ? DECL_TEMPLATE_INFO (TYPE_NAME (NODE)) \
2718 : NULL_TREE) \
2719 : ((TREE_CODE (NODE) == ENUMERAL_TYPE) \
2720 ? ENUM_TEMPLATE_INFO (NODE) \
2721 : ((TREE_CODE (NODE) == BOUND_TEMPLATE_TEMPLATE_PARM) \
2722 ? TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (NODE) \
2723 : (CLASS_TYPE_P (NODE) \
2724 ? CLASSTYPE_TEMPLATE_INFO (NODE) \
2725 : NULL_TREE))))
2726
2727
2728 /* Set the template information for an ENUMERAL_, RECORD_, or
2729 UNION_TYPE to VAL. */
2730 #define SET_TYPE_TEMPLATE_INFO(NODE, VAL) \
2731 (TREE_CODE (NODE) == ENUMERAL_TYPE \
2732 ? (ENUM_TEMPLATE_INFO (NODE) = (VAL)) \
2733 : ((CLASS_TYPE_P (NODE) && !TYPE_ALIAS_P (NODE)) \
2734 ? (CLASSTYPE_TEMPLATE_INFO (NODE) = (VAL)) \
2735 : (DECL_TEMPLATE_INFO (TYPE_NAME (NODE)) = (VAL))))
2736
2737 #define TI_TEMPLATE(NODE) TREE_TYPE (TEMPLATE_INFO_CHECK (NODE))
2738 #define TI_ARGS(NODE) TREE_CHAIN (TEMPLATE_INFO_CHECK (NODE))
2739 #define TI_PENDING_TEMPLATE_FLAG(NODE) TREE_LANG_FLAG_1 (NODE)
2740 /* For a given TREE_VEC containing a template argument list,
2741 this property contains the number of arguments that are not
2742 defaulted. */
2743 #define NON_DEFAULT_TEMPLATE_ARGS_COUNT(NODE) TREE_CHAIN (TREE_VEC_CHECK (NODE))
2744 /* Below are the setter and getter of the NON_DEFAULT_TEMPLATE_ARGS_COUNT
2745 property. */
2746 #define SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT(NODE, INT_VALUE) \
2747 NON_DEFAULT_TEMPLATE_ARGS_COUNT(NODE) = build_int_cst (NULL_TREE, INT_VALUE)
2748 #ifdef ENABLE_CHECKING
2749 #define GET_NON_DEFAULT_TEMPLATE_ARGS_COUNT(NODE) \
2750 int_cst_value (NON_DEFAULT_TEMPLATE_ARGS_COUNT (NODE))
2751 #else
2752 #define GET_NON_DEFAULT_TEMPLATE_ARGS_COUNT(NODE) \
2753 NON_DEFAULT_TEMPLATE_ARGS_COUNT (NODE) \
2754 ? int_cst_value (NON_DEFAULT_TEMPLATE_ARGS_COUNT (NODE)) \
2755 : TREE_VEC_LENGTH (INNERMOST_TEMPLATE_ARGS (NODE))
2756 #endif
2757 /* The list of typedefs - used in the template - that need
2758 access checking at template instantiation time.
2759
2760 FIXME this should be associated with the TEMPLATE_DECL, not the
2761 TEMPLATE_INFO. */
2762 #define TI_TYPEDEFS_NEEDING_ACCESS_CHECKING(NODE) \
2763 ((struct tree_template_info*)TEMPLATE_INFO_CHECK \
2764 (NODE))->typedefs_needing_access_checking
2765
2766 /* We use TREE_VECs to hold template arguments. If there is only one
2767 level of template arguments, then the TREE_VEC contains the
2768 arguments directly. If there is more than one level of template
2769 arguments, then each entry in the TREE_VEC is itself a TREE_VEC,
2770 containing the template arguments for a single level. The first
2771 entry in the outer TREE_VEC is the outermost level of template
2772 parameters; the last is the innermost.
2773
2774 It is incorrect to ever form a template argument vector containing
2775 only one level of arguments, but which is a TREE_VEC containing as
2776 its only entry the TREE_VEC for that level.
2777
2778 For each TREE_VEC containing the template arguments for a single
2779 level, it's possible to get or set the number of non defaulted
2780 template arguments by using the accessor macros
2781 GET_NON_DEFAULT_TEMPLATE_ARGS_COUNT or
2782 SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT. */
2783
2784 /* Nonzero if the template arguments is actually a vector of vectors,
2785 rather than just a vector. */
2786 #define TMPL_ARGS_HAVE_MULTIPLE_LEVELS(NODE) \
2787 (NODE && TREE_VEC_LENGTH (NODE) && TREE_VEC_ELT (NODE, 0) \
2788 && TREE_CODE (TREE_VEC_ELT (NODE, 0)) == TREE_VEC)
2789
2790 /* The depth of a template argument vector. When called directly by
2791 the parser, we use a TREE_LIST rather than a TREE_VEC to represent
2792 template arguments. In fact, we may even see NULL_TREE if there
2793 are no template arguments. In both of those cases, there is only
2794 one level of template arguments. */
2795 #define TMPL_ARGS_DEPTH(NODE) \
2796 (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (NODE) ? TREE_VEC_LENGTH (NODE) : 1)
2797
2798 /* The LEVELth level of the template ARGS. The outermost level of
2799 args is level 1, not level 0. */
2800 #define TMPL_ARGS_LEVEL(ARGS, LEVEL) \
2801 (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (ARGS) \
2802 ? TREE_VEC_ELT (ARGS, (LEVEL) - 1) : (ARGS))
2803
2804 /* Set the LEVELth level of the template ARGS to VAL. This macro does
2805 not work with single-level argument vectors. */
2806 #define SET_TMPL_ARGS_LEVEL(ARGS, LEVEL, VAL) \
2807 (TREE_VEC_ELT (ARGS, (LEVEL) - 1) = (VAL))
2808
2809 /* Accesses the IDXth parameter in the LEVELth level of the ARGS. */
2810 #define TMPL_ARG(ARGS, LEVEL, IDX) \
2811 (TREE_VEC_ELT (TMPL_ARGS_LEVEL (ARGS, LEVEL), IDX))
2812
2813 /* Given a single level of template arguments in NODE, return the
2814 number of arguments. */
2815 #define NUM_TMPL_ARGS(NODE) \
2816 (TREE_VEC_LENGTH (NODE))
2817
2818 /* Returns the innermost level of template arguments in ARGS. */
2819 #define INNERMOST_TEMPLATE_ARGS(NODE) \
2820 (get_innermost_template_args ((NODE), 1))
2821
2822 /* The number of levels of template parameters given by NODE. */
2823 #define TMPL_PARMS_DEPTH(NODE) \
2824 ((HOST_WIDE_INT) TREE_INT_CST_LOW (TREE_PURPOSE (NODE)))
2825
2826 /* The TEMPLATE_DECL instantiated or specialized by NODE. This
2827 TEMPLATE_DECL will be the immediate parent, not the most general
2828 template. For example, in:
2829
2830 template <class T> struct S { template <class U> void f(U); }
2831
2832 the FUNCTION_DECL for S<int>::f<double> will have, as its
2833 DECL_TI_TEMPLATE, `template <class U> S<int>::f<U>'.
2834
2835 As a special case, for a member friend template of a template
2836 class, this value will not be a TEMPLATE_DECL, but rather an
2837 IDENTIFIER_NODE or OVERLOAD indicating the name of the template and
2838 any explicit template arguments provided. For example, in:
2839
2840 template <class T> struct S { friend void f<int>(int, double); }
2841
2842 the DECL_TI_TEMPLATE will be an IDENTIFIER_NODE for `f' and the
2843 DECL_TI_ARGS will be {int}.
2844
2845 For a FIELD_DECL with a non-static data member initializer, this value
2846 is the FIELD_DECL it was instantiated from. */
2847 #define DECL_TI_TEMPLATE(NODE) TI_TEMPLATE (DECL_TEMPLATE_INFO (NODE))
2848
2849 /* The template arguments used to obtain this decl from the most
2850 general form of DECL_TI_TEMPLATE. For the example given for
2851 DECL_TI_TEMPLATE, the DECL_TI_ARGS will be {int, double}. These
2852 are always the full set of arguments required to instantiate this
2853 declaration from the most general template specialized here. */
2854 #define DECL_TI_ARGS(NODE) TI_ARGS (DECL_TEMPLATE_INFO (NODE))
2855
2856 /* The TEMPLATE_DECL associated with NODE, a class type. Even if NODE
2857 will be generated from a partial specialization, the TEMPLATE_DECL
2858 referred to here will be the original template. For example,
2859 given:
2860
2861 template <typename T> struct S {};
2862 template <typename T> struct S<T*> {};
2863
2864 the CLASSTPYE_TI_TEMPLATE for S<int*> will be S, not the S<T*>. */
2865 #define CLASSTYPE_TI_TEMPLATE(NODE) TI_TEMPLATE (CLASSTYPE_TEMPLATE_INFO (NODE))
2866 #define CLASSTYPE_TI_ARGS(NODE) TI_ARGS (CLASSTYPE_TEMPLATE_INFO (NODE))
2867
2868 /* For a template instantiation TYPE, returns the TYPE corresponding
2869 to the primary template. Otherwise returns TYPE itself. */
2870 #define CLASSTYPE_PRIMARY_TEMPLATE_TYPE(TYPE) \
2871 ((CLASSTYPE_USE_TEMPLATE ((TYPE)) \
2872 && !CLASSTYPE_TEMPLATE_SPECIALIZATION ((TYPE))) \
2873 ? TREE_TYPE (DECL_TEMPLATE_RESULT (DECL_PRIMARY_TEMPLATE \
2874 (CLASSTYPE_TI_TEMPLATE ((TYPE))))) \
2875 : (TYPE))
2876
2877 /* Like CLASS_TI_TEMPLATE, but also works for ENUMERAL_TYPEs. */
2878 #define TYPE_TI_TEMPLATE(NODE) \
2879 (TI_TEMPLATE (TYPE_TEMPLATE_INFO (NODE)))
2880
2881 /* Like DECL_TI_ARGS, but for an ENUMERAL_, RECORD_, or UNION_TYPE. */
2882 #define TYPE_TI_ARGS(NODE) \
2883 (TI_ARGS (TYPE_TEMPLATE_INFO (NODE)))
2884
2885 #define INNERMOST_TEMPLATE_PARMS(NODE) TREE_VALUE (NODE)
2886
2887 /* Nonzero if NODE (a TEMPLATE_DECL) is a member template, in the
2888 sense of [temp.mem]. */
2889 #define DECL_MEMBER_TEMPLATE_P(NODE) \
2890 (DECL_LANG_FLAG_1 (TEMPLATE_DECL_CHECK (NODE)))
2891
2892 /* Nonzero if the NODE corresponds to the template parameters for a
2893 member template, whose inline definition is being processed after
2894 the class definition is complete. */
2895 #define TEMPLATE_PARMS_FOR_INLINE(NODE) TREE_LANG_FLAG_1 (NODE)
2896
2897 /* Determine if a declaration (PARM_DECL or FIELD_DECL) is a pack. */
2898 #define DECL_PACK_P(NODE) \
2899 (DECL_P (NODE) && PACK_EXPANSION_P (TREE_TYPE (NODE)))
2900
2901 /* Determines if NODE is an expansion of one or more parameter packs,
2902 e.g., a TYPE_PACK_EXPANSION or EXPR_PACK_EXPANSION. */
2903 #define PACK_EXPANSION_P(NODE) \
2904 (TREE_CODE (NODE) == TYPE_PACK_EXPANSION \
2905 || TREE_CODE (NODE) == EXPR_PACK_EXPANSION)
2906
2907 /* Extracts the type or expression pattern from a TYPE_PACK_EXPANSION or
2908 EXPR_PACK_EXPANSION. */
2909 #define PACK_EXPANSION_PATTERN(NODE) \
2910 (TREE_CODE (NODE) == TYPE_PACK_EXPANSION? TREE_TYPE (NODE) \
2911 : TREE_OPERAND (NODE, 0))
2912
2913 /* Sets the type or expression pattern for a TYPE_PACK_EXPANSION or
2914 EXPR_PACK_EXPANSION. */
2915 #define SET_PACK_EXPANSION_PATTERN(NODE,VALUE) \
2916 if (TREE_CODE (NODE) == TYPE_PACK_EXPANSION) \
2917 TREE_TYPE (NODE) = VALUE; \
2918 else \
2919 TREE_OPERAND (NODE, 0) = VALUE
2920
2921 /* The list of parameter packs used in the PACK_EXPANSION_* node. The
2922 TREE_VALUE of each TREE_LIST contains the parameter packs. */
2923 #define PACK_EXPANSION_PARAMETER_PACKS(NODE) \
2924 *(TREE_CODE (NODE) == EXPR_PACK_EXPANSION \
2925 ? &TREE_OPERAND (NODE, 1) \
2926 : &TYPE_MINVAL (TYPE_PACK_EXPANSION_CHECK (NODE)))
2927
2928 /* Any additional template args to be applied when substituting into
2929 the pattern, set by tsubst_pack_expansion for partial instantiations. */
2930 #define PACK_EXPANSION_EXTRA_ARGS(NODE) \
2931 *(TREE_CODE (NODE) == TYPE_PACK_EXPANSION \
2932 ? &TYPE_MAXVAL (NODE) \
2933 : &TREE_OPERAND ((NODE), 2))
2934
2935 /* True iff this pack expansion is within a function context. */
2936 #define PACK_EXPANSION_LOCAL_P(NODE) TREE_LANG_FLAG_0 (NODE)
2937
2938 /* Determine if this is an argument pack. */
2939 #define ARGUMENT_PACK_P(NODE) \
2940 (TREE_CODE (NODE) == TYPE_ARGUMENT_PACK \
2941 || TREE_CODE (NODE) == NONTYPE_ARGUMENT_PACK)
2942
2943 /* The arguments stored in an argument pack. Arguments are stored in a
2944 TREE_VEC, which may have length zero. */
2945 #define ARGUMENT_PACK_ARGS(NODE) \
2946 (TREE_CODE (NODE) == TYPE_ARGUMENT_PACK? TREE_TYPE (NODE) \
2947 : TREE_OPERAND (NODE, 0))
2948
2949 /* Set the arguments stored in an argument pack. VALUE must be a
2950 TREE_VEC. */
2951 #define SET_ARGUMENT_PACK_ARGS(NODE,VALUE) \
2952 if (TREE_CODE (NODE) == TYPE_ARGUMENT_PACK) \
2953 TREE_TYPE (NODE) = VALUE; \
2954 else \
2955 TREE_OPERAND (NODE, 0) = VALUE
2956
2957 /* Whether the argument pack is "incomplete", meaning that more
2958 arguments can still be deduced. Incomplete argument packs are only
2959 used when the user has provided an explicit template argument list
2960 for a variadic function template. Some of the explicit template
2961 arguments will be placed into the beginning of the argument pack,
2962 but additional arguments might still be deduced. */
2963 #define ARGUMENT_PACK_INCOMPLETE_P(NODE) \
2964 TREE_ADDRESSABLE (ARGUMENT_PACK_ARGS (NODE))
2965
2966 /* When ARGUMENT_PACK_INCOMPLETE_P, stores the explicit template
2967 arguments used to fill this pack. */
2968 #define ARGUMENT_PACK_EXPLICIT_ARGS(NODE) \
2969 TREE_TYPE (ARGUMENT_PACK_ARGS (NODE))
2970
2971 /* In an ARGUMENT_PACK_SELECT, the argument pack from which an
2972 argument will be selected. */
2973 #define ARGUMENT_PACK_SELECT_FROM_PACK(NODE) \
2974 (((struct tree_argument_pack_select *)ARGUMENT_PACK_SELECT_CHECK (NODE))->argument_pack)
2975
2976 /* In an ARGUMENT_PACK_SELECT, the index of the argument we want to
2977 select. */
2978 #define ARGUMENT_PACK_SELECT_INDEX(NODE) \
2979 (((struct tree_argument_pack_select *)ARGUMENT_PACK_SELECT_CHECK (NODE))->index)
2980
2981 /* In an ARGUMENT_PACK_SELECT, the actual underlying argument that the
2982 ARGUMENT_PACK_SELECT represents. */
2983 #define ARGUMENT_PACK_SELECT_ARG(NODE) \
2984 TREE_VEC_ELT (ARGUMENT_PACK_ARGS (ARGUMENT_PACK_SELECT_FROM_PACK (NODE)), \
2985 ARGUMENT_PACK_SELECT_INDEX (NODE));
2986
2987 /* In a FUNCTION_DECL, the saved language-specific per-function data. */
2988 #define DECL_SAVED_FUNCTION_DATA(NODE) \
2989 (LANG_DECL_FN_CHECK (FUNCTION_DECL_CHECK (NODE)) \
2990 ->u.saved_language_function)
2991
2992 /* True if NODE is an implicit INDIRECT_EXPR from convert_from_reference. */
2993 #define REFERENCE_REF_P(NODE) \
2994 (INDIRECT_REF_P (NODE) \
2995 && TREE_TYPE (TREE_OPERAND (NODE, 0)) \
2996 && (TREE_CODE (TREE_TYPE (TREE_OPERAND ((NODE), 0))) \
2997 == REFERENCE_TYPE))
2998
2999 /* True if NODE is a REFERENCE_TYPE which is OK to instantiate to be a
3000 reference to VLA type, because it's used for VLA capture. */
3001 #define REFERENCE_VLA_OK(NODE) \
3002 (TYPE_LANG_FLAG_5 (REFERENCE_TYPE_CHECK (NODE)))
3003
3004 #define NEW_EXPR_USE_GLOBAL(NODE) \
3005 TREE_LANG_FLAG_0 (NEW_EXPR_CHECK (NODE))
3006 #define DELETE_EXPR_USE_GLOBAL(NODE) \
3007 TREE_LANG_FLAG_0 (DELETE_EXPR_CHECK (NODE))
3008 #define DELETE_EXPR_USE_VEC(NODE) \
3009 TREE_LANG_FLAG_1 (DELETE_EXPR_CHECK (NODE))
3010
3011 /* Indicates that this is a non-dependent COMPOUND_EXPR which will
3012 resolve to a function call. */
3013 #define COMPOUND_EXPR_OVERLOADED(NODE) \
3014 TREE_LANG_FLAG_0 (COMPOUND_EXPR_CHECK (NODE))
3015
3016 /* In a CALL_EXPR appearing in a template, true if Koenig lookup
3017 should be performed at instantiation time. */
3018 #define KOENIG_LOOKUP_P(NODE) TREE_LANG_FLAG_0 (CALL_EXPR_CHECK (NODE))
3019
3020 /* Indicates whether a string literal has been parenthesized. Such
3021 usages are disallowed in certain circumstances. */
3022
3023 #define PAREN_STRING_LITERAL_P(NODE) \
3024 TREE_LANG_FLAG_0 (STRING_CST_CHECK (NODE))
3025
3026 /* Nonzero if this AGGR_INIT_EXPR provides for initialization via a
3027 constructor call, rather than an ordinary function call. */
3028 #define AGGR_INIT_VIA_CTOR_P(NODE) \
3029 TREE_LANG_FLAG_0 (AGGR_INIT_EXPR_CHECK (NODE))
3030
3031 /* Nonzero if expanding this AGGR_INIT_EXPR should first zero-initialize
3032 the object. */
3033 #define AGGR_INIT_ZERO_FIRST(NODE) \
3034 TREE_LANG_FLAG_2 (AGGR_INIT_EXPR_CHECK (NODE))
3035
3036 /* AGGR_INIT_EXPR accessors. These are equivalent to the CALL_EXPR
3037 accessors, except for AGGR_INIT_EXPR_SLOT (which takes the place of
3038 CALL_EXPR_STATIC_CHAIN). */
3039
3040 #define AGGR_INIT_EXPR_FN(NODE) TREE_OPERAND (AGGR_INIT_EXPR_CHECK (NODE), 1)
3041 #define AGGR_INIT_EXPR_SLOT(NODE) \
3042 TREE_OPERAND (AGGR_INIT_EXPR_CHECK (NODE), 2)
3043 #define AGGR_INIT_EXPR_ARG(NODE, I) \
3044 TREE_OPERAND (AGGR_INIT_EXPR_CHECK (NODE), (I) + 3)
3045 #define aggr_init_expr_nargs(NODE) (VL_EXP_OPERAND_LENGTH(NODE) - 3)
3046
3047 /* AGGR_INIT_EXPR_ARGP returns a pointer to the argument vector for NODE.
3048 We can't use &AGGR_INIT_EXPR_ARG (NODE, 0) because that will complain if
3049 the argument count is zero when checking is enabled. Instead, do
3050 the pointer arithmetic to advance past the 3 fixed operands in a
3051 AGGR_INIT_EXPR. That produces a valid pointer to just past the end of
3052 the operand array, even if it's not valid to dereference it. */
3053 #define AGGR_INIT_EXPR_ARGP(NODE) \
3054 (&(TREE_OPERAND (AGGR_INIT_EXPR_CHECK (NODE), 0)) + 3)
3055
3056 /* Abstract iterators for AGGR_INIT_EXPRs. */
3057
3058 /* Structure containing iterator state. */
3059 typedef struct aggr_init_expr_arg_iterator_d {
3060 tree t; /* the aggr_init_expr */
3061 int n; /* argument count */
3062 int i; /* next argument index */
3063 } aggr_init_expr_arg_iterator;
3064
3065 /* Initialize the abstract argument list iterator object ITER with the
3066 arguments from AGGR_INIT_EXPR node EXP. */
3067 inline void
3068 init_aggr_init_expr_arg_iterator (tree exp,
3069 aggr_init_expr_arg_iterator *iter)
3070 {
3071 iter->t = exp;
3072 iter->n = aggr_init_expr_nargs (exp);
3073 iter->i = 0;
3074 }
3075
3076 /* Return the next argument from abstract argument list iterator object ITER,
3077 and advance its state. Return NULL_TREE if there are no more arguments. */
3078 inline tree
3079 next_aggr_init_expr_arg (aggr_init_expr_arg_iterator *iter)
3080 {
3081 tree result;
3082 if (iter->i >= iter->n)
3083 return NULL_TREE;
3084 result = AGGR_INIT_EXPR_ARG (iter->t, iter->i);
3085 iter->i++;
3086 return result;
3087 }
3088
3089 /* Initialize the abstract argument list iterator object ITER, then advance
3090 past and return the first argument. Useful in for expressions, e.g.
3091 for (arg = first_aggr_init_expr_arg (exp, &iter); arg;
3092 arg = next_aggr_init_expr_arg (&iter)) */
3093 inline tree
3094 first_aggr_init_expr_arg (tree exp, aggr_init_expr_arg_iterator *iter)
3095 {
3096 init_aggr_init_expr_arg_iterator (exp, iter);
3097 return next_aggr_init_expr_arg (iter);
3098 }
3099
3100 /* Test whether there are more arguments in abstract argument list iterator
3101 ITER, without changing its state. */
3102 inline bool
3103 more_aggr_init_expr_args_p (const aggr_init_expr_arg_iterator *iter)
3104 {
3105 return (iter->i < iter->n);
3106 }
3107
3108 /* Iterate through each argument ARG of AGGR_INIT_EXPR CALL, using variable
3109 ITER (of type aggr_init_expr_arg_iterator) to hold the iteration state. */
3110 #define FOR_EACH_AGGR_INIT_EXPR_ARG(arg, iter, call) \
3111 for ((arg) = first_aggr_init_expr_arg ((call), &(iter)); (arg); \
3112 (arg) = next_aggr_init_expr_arg (&(iter)))
3113
3114 /* VEC_INIT_EXPR accessors. */
3115 #define VEC_INIT_EXPR_SLOT(NODE) TREE_OPERAND (VEC_INIT_EXPR_CHECK (NODE), 0)
3116 #define VEC_INIT_EXPR_INIT(NODE) TREE_OPERAND (VEC_INIT_EXPR_CHECK (NODE), 1)
3117
3118 /* Indicates that a VEC_INIT_EXPR is a potential constant expression.
3119 Only set when the current function is constexpr. */
3120 #define VEC_INIT_EXPR_IS_CONSTEXPR(NODE) \
3121 TREE_LANG_FLAG_0 (VEC_INIT_EXPR_CHECK (NODE))
3122
3123 /* Indicates that a VEC_INIT_EXPR is expressing value-initialization. */
3124 #define VEC_INIT_EXPR_VALUE_INIT(NODE) \
3125 TREE_LANG_FLAG_1 (VEC_INIT_EXPR_CHECK (NODE))
3126
3127 /* The condition under which this MUST_NOT_THROW_EXPR actually blocks
3128 exceptions. NULL_TREE means 'true'. */
3129 #define MUST_NOT_THROW_COND(NODE) \
3130 TREE_OPERAND (MUST_NOT_THROW_EXPR_CHECK (NODE), 1)
3131
3132 /* The TYPE_MAIN_DECL for a class template type is a TYPE_DECL, not a
3133 TEMPLATE_DECL. This macro determines whether or not a given class
3134 type is really a template type, as opposed to an instantiation or
3135 specialization of one. */
3136 #define CLASSTYPE_IS_TEMPLATE(NODE) \
3137 (CLASSTYPE_TEMPLATE_INFO (NODE) \
3138 && !CLASSTYPE_USE_TEMPLATE (NODE) \
3139 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (NODE)))
3140
3141 /* The name used by the user to name the typename type. Typically,
3142 this is an IDENTIFIER_NODE, and the same as the DECL_NAME on the
3143 corresponding TYPE_DECL. However, this may also be a
3144 TEMPLATE_ID_EXPR if we had something like `typename X::Y<T>'. */
3145 #define TYPENAME_TYPE_FULLNAME(NODE) \
3146 (TYPE_VALUES_RAW (TYPENAME_TYPE_CHECK (NODE)))
3147
3148 /* True if a TYPENAME_TYPE was declared as an "enum". */
3149 #define TYPENAME_IS_ENUM_P(NODE) \
3150 (TREE_LANG_FLAG_0 (TYPENAME_TYPE_CHECK (NODE)))
3151
3152 /* True if a TYPENAME_TYPE was declared as a "class", "struct", or
3153 "union". */
3154 #define TYPENAME_IS_CLASS_P(NODE) \
3155 (TREE_LANG_FLAG_1 (TYPENAME_TYPE_CHECK (NODE)))
3156
3157 /* True if a TYPENAME_TYPE is in the process of being resolved. */
3158 #define TYPENAME_IS_RESOLVING_P(NODE) \
3159 (TREE_LANG_FLAG_2 (TYPENAME_TYPE_CHECK (NODE)))
3160
3161 /* [class.virtual]
3162
3163 A class that declares or inherits a virtual function is called a
3164 polymorphic class. */
3165 #define TYPE_POLYMORPHIC_P(NODE) (TREE_LANG_FLAG_2 (NODE))
3166
3167 /* Nonzero if this class has a virtual function table pointer. */
3168 #define TYPE_CONTAINS_VPTR_P(NODE) \
3169 (TYPE_POLYMORPHIC_P (NODE) || CLASSTYPE_VBASECLASSES (NODE))
3170
3171 /* This flag is true of a local VAR_DECL if it was declared in a for
3172 statement, but we are no longer in the scope of the for. */
3173 #define DECL_DEAD_FOR_LOCAL(NODE) DECL_LANG_FLAG_7 (VAR_DECL_CHECK (NODE))
3174
3175 /* This flag is set on a VAR_DECL that is a DECL_DEAD_FOR_LOCAL
3176 if we already emitted a warning about using it. */
3177 #define DECL_ERROR_REPORTED(NODE) DECL_LANG_FLAG_0 (VAR_DECL_CHECK (NODE))
3178
3179 /* Nonzero if NODE is a FUNCTION_DECL (for a function with global
3180 scope) declared in a local scope. */
3181 #define DECL_LOCAL_FUNCTION_P(NODE) \
3182 DECL_LANG_FLAG_0 (FUNCTION_DECL_CHECK (NODE))
3183
3184 /* True if NODE was declared with auto in its return type, but it has
3185 started compilation and so the return type might have been changed by
3186 return type deduction; its declared return type should be found in
3187 DECL_STRUCT_FUNCTION(NODE)->language->x_auto_return_pattern. */
3188 #define FNDECL_USED_AUTO(NODE) \
3189 TREE_LANG_FLAG_2 (FUNCTION_DECL_CHECK (NODE))
3190
3191 /* Nonzero if NODE is a DECL which we know about but which has not
3192 been explicitly declared, such as a built-in function or a friend
3193 declared inside a class. In the latter case DECL_HIDDEN_FRIEND_P
3194 will be set. */
3195 #define DECL_ANTICIPATED(NODE) \
3196 (DECL_LANG_SPECIFIC (TYPE_FUNCTION_OR_TEMPLATE_DECL_CHECK (NODE)) \
3197 ->u.base.anticipated_p)
3198
3199 /* Nonzero if NODE is a FUNCTION_DECL which was declared as a friend
3200 within a class but has not been declared in the surrounding scope.
3201 The function is invisible except via argument dependent lookup. */
3202 #define DECL_HIDDEN_FRIEND_P(NODE) \
3203 (LANG_DECL_FN_CHECK (DECL_COMMON_CHECK (NODE))->hidden_friend_p)
3204
3205 /* Nonzero if NODE is an artificial FUNCTION_DECL for
3206 #pragma omp declare reduction. */
3207 #define DECL_OMP_DECLARE_REDUCTION_P(NODE) \
3208 (LANG_DECL_FN_CHECK (DECL_COMMON_CHECK (NODE))->omp_declare_reduction_p)
3209
3210 /* Nonzero if DECL has been declared threadprivate by
3211 #pragma omp threadprivate. */
3212 #define CP_DECL_THREADPRIVATE_P(DECL) \
3213 (DECL_LANG_SPECIFIC (VAR_DECL_CHECK (DECL))->u.base.threadprivate_or_deleted_p)
3214
3215 /* Nonzero if DECL was declared with '= delete'. */
3216 #define DECL_DELETED_FN(DECL) \
3217 (DECL_LANG_SPECIFIC (FUNCTION_DECL_CHECK (DECL))->u.base.threadprivate_or_deleted_p)
3218
3219 /* Nonzero if DECL was declared with '= default' (maybe implicitly). */
3220 #define DECL_DEFAULTED_FN(DECL) \
3221 (LANG_DECL_FN_CHECK (DECL)->defaulted_p)
3222
3223 /* Nonzero if DECL is explicitly defaulted in the class body. */
3224 #define DECL_DEFAULTED_IN_CLASS_P(DECL) \
3225 (DECL_DEFAULTED_FN (DECL) && DECL_INITIALIZED_IN_CLASS_P (DECL))
3226 /* Nonzero if DECL was defaulted outside the class body. */
3227 #define DECL_DEFAULTED_OUTSIDE_CLASS_P(DECL) \
3228 (DECL_DEFAULTED_FN (DECL) \
3229 && !(DECL_ARTIFICIAL (DECL) || DECL_INITIALIZED_IN_CLASS_P (DECL)))
3230
3231 /* Record whether a typedef for type `int' was actually `signed int'. */
3232 #define C_TYPEDEF_EXPLICITLY_SIGNED(EXP) DECL_LANG_FLAG_1 (EXP)
3233
3234 /* Returns nonzero if DECL has external linkage, as specified by the
3235 language standard. (This predicate may hold even when the
3236 corresponding entity is not actually given external linkage in the
3237 object file; see decl_linkage for details.) */
3238 #define DECL_EXTERNAL_LINKAGE_P(DECL) \
3239 (decl_linkage (DECL) == lk_external)
3240
3241 /* Keep these codes in ascending code order. */
3242
3243 #define INTEGRAL_CODE_P(CODE) \
3244 ((CODE) == ENUMERAL_TYPE \
3245 || (CODE) == BOOLEAN_TYPE \
3246 || (CODE) == INTEGER_TYPE)
3247
3248 /* [basic.fundamental]
3249
3250 Types bool, char, wchar_t, and the signed and unsigned integer types
3251 are collectively called integral types.
3252
3253 Note that INTEGRAL_TYPE_P, as defined in tree.h, allows enumeration
3254 types as well, which is incorrect in C++. Keep these checks in
3255 ascending code order. */
3256 #define CP_INTEGRAL_TYPE_P(TYPE) \
3257 (TREE_CODE (TYPE) == BOOLEAN_TYPE \
3258 || TREE_CODE (TYPE) == INTEGER_TYPE)
3259
3260 /* Returns true if TYPE is an integral or enumeration name. Keep
3261 these checks in ascending code order. */
3262 #define INTEGRAL_OR_ENUMERATION_TYPE_P(TYPE) \
3263 (TREE_CODE (TYPE) == ENUMERAL_TYPE || CP_INTEGRAL_TYPE_P (TYPE))
3264
3265 /* Returns true if TYPE is an integral or unscoped enumeration type. */
3266 #define INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P(TYPE) \
3267 (UNSCOPED_ENUM_P (TYPE) || CP_INTEGRAL_TYPE_P (TYPE))
3268
3269 /* True if the class type TYPE is a literal type. */
3270 #define CLASSTYPE_LITERAL_P(TYPE) \
3271 (LANG_TYPE_CLASS_CHECK (TYPE)->is_literal)
3272
3273 /* [basic.fundamental]
3274
3275 Integral and floating types are collectively called arithmetic
3276 types.
3277
3278 As a GNU extension, we also accept complex types.
3279
3280 Keep these checks in ascending code order. */
3281 #define ARITHMETIC_TYPE_P(TYPE) \
3282 (CP_INTEGRAL_TYPE_P (TYPE) \
3283 || TREE_CODE (TYPE) == REAL_TYPE \
3284 || TREE_CODE (TYPE) == COMPLEX_TYPE)
3285
3286 /* True iff TYPE is cv decltype(nullptr). */
3287 #define NULLPTR_TYPE_P(TYPE) (TREE_CODE (TYPE) == NULLPTR_TYPE)
3288
3289 /* [basic.types]
3290
3291 Arithmetic types, enumeration types, pointer types,
3292 pointer-to-member types, and std::nullptr_t are collectively called
3293 scalar types.
3294
3295 Keep these checks in ascending code order. */
3296 #define SCALAR_TYPE_P(TYPE) \
3297 (TYPE_PTRDATAMEM_P (TYPE) \
3298 || TREE_CODE (TYPE) == ENUMERAL_TYPE \
3299 || ARITHMETIC_TYPE_P (TYPE) \
3300 || TYPE_PTR_P (TYPE) \
3301 || TYPE_PTRMEMFUNC_P (TYPE) \
3302 || NULLPTR_TYPE_P (TYPE))
3303
3304 /* Determines whether this type is a C++0x scoped enumeration
3305 type. Scoped enumerations types are introduced via "enum class" or
3306 "enum struct", e.g.,
3307
3308 enum class Color {
3309 Red, Green, Blue
3310 };
3311
3312 Scoped enumeration types are different from normal (unscoped)
3313 enumeration types in several ways:
3314
3315 - The enumerators of a scoped enumeration type are only available
3316 within the scope of the enumeration type and not in the
3317 enclosing scope. For example, the Red color can be referred to
3318 with "Color::Red" but not "Red".
3319
3320 - Scoped enumerators and enumerations do not implicitly convert
3321 to integers or 'bool'.
3322
3323 - The underlying type of the enum is well-defined. */
3324 #define SCOPED_ENUM_P(TYPE) \
3325 (TREE_CODE (TYPE) == ENUMERAL_TYPE && ENUM_IS_SCOPED (TYPE))
3326
3327 /* Determine whether this is an unscoped enumeration type. */
3328 #define UNSCOPED_ENUM_P(TYPE) \
3329 (TREE_CODE (TYPE) == ENUMERAL_TYPE && !ENUM_IS_SCOPED (TYPE))
3330
3331 /* Set the flag indicating whether an ENUMERAL_TYPE is a C++0x scoped
3332 enumeration type (1) or a normal (unscoped) enumeration type
3333 (0). */
3334 #define SET_SCOPED_ENUM_P(TYPE, VAL) \
3335 (ENUM_IS_SCOPED (TYPE) = (VAL))
3336
3337 #define SET_OPAQUE_ENUM_P(TYPE, VAL) \
3338 (ENUM_IS_OPAQUE (TYPE) = (VAL))
3339
3340 #define OPAQUE_ENUM_P(TYPE) \
3341 (TREE_CODE (TYPE) == ENUMERAL_TYPE && ENUM_IS_OPAQUE (TYPE))
3342
3343 /* Determines whether an ENUMERAL_TYPE has an explicit
3344 underlying type. */
3345 #define ENUM_FIXED_UNDERLYING_TYPE_P(NODE) (TYPE_LANG_FLAG_5 (NODE))
3346
3347 /* Returns the underlying type of the given enumeration type. The
3348 underlying type is determined in different ways, depending on the
3349 properties of the enum:
3350
3351 - In C++0x, the underlying type can be explicitly specified, e.g.,
3352
3353 enum E1 : char { ... } // underlying type is char
3354
3355 - In a C++0x scoped enumeration, the underlying type is int
3356 unless otherwises specified:
3357
3358 enum class E2 { ... } // underlying type is int
3359
3360 - Otherwise, the underlying type is determined based on the
3361 values of the enumerators. In this case, the
3362 ENUM_UNDERLYING_TYPE will not be set until after the definition
3363 of the enumeration is completed by finish_enum. */
3364 #define ENUM_UNDERLYING_TYPE(TYPE) \
3365 TREE_TYPE (ENUMERAL_TYPE_CHECK (TYPE))
3366
3367 /* [dcl.init.aggr]
3368
3369 An aggregate is an array or a class with no user-provided
3370 constructors, no brace-or-equal-initializers for non-static data
3371 members, no private or protected non-static data members, no
3372 base classes, and no virtual functions.
3373
3374 As an extension, we also treat vectors as aggregates. Keep these
3375 checks in ascending code order. */
3376 #define CP_AGGREGATE_TYPE_P(TYPE) \
3377 (TREE_CODE (TYPE) == VECTOR_TYPE \
3378 ||TREE_CODE (TYPE) == ARRAY_TYPE \
3379 || (CLASS_TYPE_P (TYPE) && !CLASSTYPE_NON_AGGREGATE (TYPE)))
3380
3381 /* Nonzero for a class type means that the class type has a
3382 user-declared constructor. */
3383 #define TYPE_HAS_USER_CONSTRUCTOR(NODE) (TYPE_LANG_FLAG_1 (NODE))
3384
3385 /* When appearing in an INDIRECT_REF, it means that the tree structure
3386 underneath is actually a call to a constructor. This is needed
3387 when the constructor must initialize local storage (which can
3388 be automatically destroyed), rather than allowing it to allocate
3389 space from the heap.
3390
3391 When appearing in a SAVE_EXPR, it means that underneath
3392 is a call to a constructor.
3393
3394 When appearing in a CONSTRUCTOR, the expression is a
3395 compound literal.
3396
3397 When appearing in a FIELD_DECL, it means that this field
3398 has been duly initialized in its constructor. */
3399 #define TREE_HAS_CONSTRUCTOR(NODE) (TREE_LANG_FLAG_4 (NODE))
3400
3401 /* True if NODE is a brace-enclosed initializer. */
3402 #define BRACE_ENCLOSED_INITIALIZER_P(NODE) \
3403 (TREE_CODE (NODE) == CONSTRUCTOR && TREE_TYPE (NODE) == init_list_type_node)
3404
3405 /* True if NODE is a compound-literal, i.e., a brace-enclosed
3406 initializer cast to a particular type. */
3407 #define COMPOUND_LITERAL_P(NODE) \
3408 (TREE_CODE (NODE) == CONSTRUCTOR && TREE_HAS_CONSTRUCTOR (NODE))
3409
3410 #define EMPTY_CONSTRUCTOR_P(NODE) (TREE_CODE (NODE) == CONSTRUCTOR \
3411 && vec_safe_is_empty(CONSTRUCTOR_ELTS(NODE))\
3412 && !TREE_HAS_CONSTRUCTOR (NODE))
3413
3414 /* True if NODE is a init-list used as a direct-initializer, i.e.
3415 B b{1,2}, not B b({1,2}) or B b = {1,2}. */
3416 #define CONSTRUCTOR_IS_DIRECT_INIT(NODE) (TREE_LANG_FLAG_0 (CONSTRUCTOR_CHECK (NODE)))
3417
3418 /* True if NODE represents a conversion for direct-initialization in a
3419 template. Set by perform_implicit_conversion_flags. */
3420 #define IMPLICIT_CONV_EXPR_DIRECT_INIT(NODE) \
3421 (TREE_LANG_FLAG_0 (IMPLICIT_CONV_EXPR_CHECK (NODE)))
3422
3423 /* Nonzero means that an object of this type can not be initialized using
3424 an initializer list. */
3425 #define CLASSTYPE_NON_AGGREGATE(NODE) \
3426 (LANG_TYPE_CLASS_CHECK (NODE)->non_aggregate)
3427 #define TYPE_NON_AGGREGATE_CLASS(NODE) \
3428 (CLASS_TYPE_P (NODE) && CLASSTYPE_NON_AGGREGATE (NODE))
3429
3430 /* Nonzero if there is a non-trivial X::op=(cv X&) for this class. */
3431 #define TYPE_HAS_COMPLEX_COPY_ASSIGN(NODE) (LANG_TYPE_CLASS_CHECK (NODE)->has_complex_copy_assign)
3432
3433 /* Nonzero if there is a non-trivial X::X(cv X&) for this class. */
3434 #define TYPE_HAS_COMPLEX_COPY_CTOR(NODE) (LANG_TYPE_CLASS_CHECK (NODE)->has_complex_copy_ctor)
3435
3436 /* Nonzero if there is a non-trivial X::op=(X&&) for this class. */
3437 #define TYPE_HAS_COMPLEX_MOVE_ASSIGN(NODE) (LANG_TYPE_CLASS_CHECK (NODE)->has_complex_move_assign)
3438
3439 /* Nonzero if there is a non-trivial X::X(X&&) for this class. */
3440 #define TYPE_HAS_COMPLEX_MOVE_CTOR(NODE) (LANG_TYPE_CLASS_CHECK (NODE)->has_complex_move_ctor)
3441
3442 /* Nonzero if there is a non-trivial default constructor for this class. */
3443 #define TYPE_HAS_COMPLEX_DFLT(NODE) (LANG_TYPE_CLASS_CHECK (NODE)->has_complex_dflt)
3444
3445 /* Nonzero if TYPE has a trivial destructor. From [class.dtor]:
3446
3447 A destructor is trivial if it is an implicitly declared
3448 destructor and if:
3449
3450 - all of the direct base classes of its class have trivial
3451 destructors,
3452
3453 - for all of the non-static data members of its class that are
3454 of class type (or array thereof), each such class has a
3455 trivial destructor. */
3456 #define TYPE_HAS_TRIVIAL_DESTRUCTOR(NODE) \
3457 (!TYPE_HAS_NONTRIVIAL_DESTRUCTOR (NODE))
3458
3459 /* Nonzero for _TYPE node means that this type does not have a trivial
3460 destructor. Therefore, destroying an object of this type will
3461 involve a call to a destructor. This can apply to objects of
3462 ARRAY_TYPE is the type of the elements needs a destructor. */
3463 #define TYPE_HAS_NONTRIVIAL_DESTRUCTOR(NODE) \
3464 (TYPE_LANG_FLAG_4 (NODE))
3465
3466 /* Nonzero for class type means that the default constructor is trivial. */
3467 #define TYPE_HAS_TRIVIAL_DFLT(NODE) \
3468 (TYPE_HAS_DEFAULT_CONSTRUCTOR (NODE) && ! TYPE_HAS_COMPLEX_DFLT (NODE))
3469
3470 /* Nonzero for class type means that copy initialization of this type can use
3471 a bitwise copy. */
3472 #define TYPE_HAS_TRIVIAL_COPY_CTOR(NODE) \
3473 (TYPE_HAS_COPY_CTOR (NODE) && ! TYPE_HAS_COMPLEX_COPY_CTOR (NODE))
3474
3475 /* Nonzero for class type means that assignment of this type can use
3476 a bitwise copy. */
3477 #define TYPE_HAS_TRIVIAL_COPY_ASSIGN(NODE) \
3478 (TYPE_HAS_COPY_ASSIGN (NODE) && ! TYPE_HAS_COMPLEX_COPY_ASSIGN (NODE))
3479
3480 /* Returns true if NODE is a pointer-to-data-member. */
3481 #define TYPE_PTRDATAMEM_P(NODE) \
3482 (TREE_CODE (NODE) == OFFSET_TYPE)
3483 /* Returns true if NODE is a pointer. */
3484 #define TYPE_PTR_P(NODE) \
3485 (TREE_CODE (NODE) == POINTER_TYPE)
3486
3487 /* Returns true if NODE is an object type:
3488
3489 [basic.types]
3490
3491 An object type is a (possibly cv-qualified) type that is not a
3492 function type, not a reference type, and not a void type.
3493
3494 Keep these checks in ascending order, for speed. */
3495 #define TYPE_OBJ_P(NODE) \
3496 (TREE_CODE (NODE) != REFERENCE_TYPE \
3497 && !VOID_TYPE_P (NODE) \
3498 && TREE_CODE (NODE) != FUNCTION_TYPE \
3499 && TREE_CODE (NODE) != METHOD_TYPE)
3500
3501 /* Returns true if NODE is a pointer to an object. Keep these checks
3502 in ascending tree code order. */
3503 #define TYPE_PTROB_P(NODE) \
3504 (TYPE_PTR_P (NODE) && TYPE_OBJ_P (TREE_TYPE (NODE)))
3505
3506 /* Returns true if NODE is a reference to an object. Keep these checks
3507 in ascending tree code order. */
3508 #define TYPE_REF_OBJ_P(NODE) \
3509 (TREE_CODE (NODE) == REFERENCE_TYPE && TYPE_OBJ_P (TREE_TYPE (NODE)))
3510
3511 /* Returns true if NODE is a pointer to an object, or a pointer to
3512 void. Keep these checks in ascending tree code order. */
3513 #define TYPE_PTROBV_P(NODE) \
3514 (TYPE_PTR_P (NODE) \
3515 && !(TREE_CODE (TREE_TYPE (NODE)) == FUNCTION_TYPE \
3516 || TREE_CODE (TREE_TYPE (NODE)) == METHOD_TYPE))
3517
3518 /* Returns true if NODE is a pointer to function. */
3519 #define TYPE_PTRFN_P(NODE) \
3520 (TYPE_PTR_P (NODE) \
3521 && TREE_CODE (TREE_TYPE (NODE)) == FUNCTION_TYPE)
3522
3523 /* Returns true if NODE is a reference to function. */
3524 #define TYPE_REFFN_P(NODE) \
3525 (TREE_CODE (NODE) == REFERENCE_TYPE \
3526 && TREE_CODE (TREE_TYPE (NODE)) == FUNCTION_TYPE)
3527
3528 /* Nonzero for _TYPE node means that this type is a pointer to member
3529 function type. */
3530 #define TYPE_PTRMEMFUNC_P(NODE) \
3531 (TREE_CODE (NODE) == RECORD_TYPE \
3532 && TYPE_LANG_SPECIFIC (NODE) \
3533 && TYPE_PTRMEMFUNC_FLAG (NODE))
3534
3535 #define TYPE_PTRMEMFUNC_FLAG(NODE) \
3536 (LANG_TYPE_CLASS_CHECK (NODE)->ptrmemfunc_flag)
3537
3538 /* Returns true if NODE is a pointer-to-member. */
3539 #define TYPE_PTRMEM_P(NODE) \
3540 (TYPE_PTRDATAMEM_P (NODE) || TYPE_PTRMEMFUNC_P (NODE))
3541
3542 /* Returns true if NODE is a pointer or a pointer-to-member. */
3543 #define TYPE_PTR_OR_PTRMEM_P(NODE) \
3544 (TYPE_PTR_P (NODE) || TYPE_PTRMEM_P (NODE))
3545
3546 /* Indicates when overload resolution may resolve to a pointer to
3547 member function. [expr.unary.op]/3 */
3548 #define PTRMEM_OK_P(NODE) \
3549 TREE_LANG_FLAG_0 (TREE_CHECK3 ((NODE), ADDR_EXPR, OFFSET_REF, SCOPE_REF))
3550
3551 /* Get the POINTER_TYPE to the METHOD_TYPE associated with this
3552 pointer to member function. TYPE_PTRMEMFUNC_P _must_ be true,
3553 before using this macro. */
3554 #define TYPE_PTRMEMFUNC_FN_TYPE(NODE) \
3555 (TREE_TYPE (TYPE_FIELDS (NODE)))
3556
3557 /* Returns `A' for a type like `int (A::*)(double)' */
3558 #define TYPE_PTRMEMFUNC_OBJECT_TYPE(NODE) \
3559 TYPE_METHOD_BASETYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (NODE)))
3560
3561 /* These are use to manipulate the canonical RECORD_TYPE from the
3562 hashed POINTER_TYPE, and can only be used on the POINTER_TYPE. */
3563 #define TYPE_GET_PTRMEMFUNC_TYPE(NODE) \
3564 (TYPE_LANG_SPECIFIC (NODE) ? LANG_TYPE_PTRMEM_CHECK (NODE)->record : NULL)
3565 #define TYPE_SET_PTRMEMFUNC_TYPE(NODE, VALUE) \
3566 do { \
3567 if (TYPE_LANG_SPECIFIC (NODE) == NULL) \
3568 { \
3569 TYPE_LANG_SPECIFIC (NODE) = ggc_alloc_cleared_lang_type \
3570 (sizeof (struct lang_type_ptrmem)); \
3571 TYPE_LANG_SPECIFIC (NODE)->u.ptrmem.h.is_lang_type_class = 0; \
3572 } \
3573 TYPE_LANG_SPECIFIC (NODE)->u.ptrmem.record = (VALUE); \
3574 } while (0)
3575
3576 /* For a pointer-to-member type of the form `T X::*', this is `X'.
3577 For a type like `void (X::*)() const', this type is `X', not `const
3578 X'. To get at the `const X' you have to look at the
3579 TYPE_PTRMEM_POINTED_TO_TYPE; there, the first parameter will have
3580 type `const X*'. */
3581 #define TYPE_PTRMEM_CLASS_TYPE(NODE) \
3582 (TYPE_PTRDATAMEM_P (NODE) \
3583 ? TYPE_OFFSET_BASETYPE (NODE) \
3584 : TYPE_PTRMEMFUNC_OBJECT_TYPE (NODE))
3585
3586 /* For a pointer-to-member type of the form `T X::*', this is `T'. */
3587 #define TYPE_PTRMEM_POINTED_TO_TYPE(NODE) \
3588 (TYPE_PTRDATAMEM_P (NODE) \
3589 ? TREE_TYPE (NODE) \
3590 : TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (NODE)))
3591
3592 /* For a pointer-to-member constant `X::Y' this is the RECORD_TYPE for
3593 `X'. */
3594 #define PTRMEM_CST_CLASS(NODE) \
3595 TYPE_PTRMEM_CLASS_TYPE (TREE_TYPE (PTRMEM_CST_CHECK (NODE)))
3596
3597 /* For a pointer-to-member constant `X::Y' this is the _DECL for
3598 `Y'. */
3599 #define PTRMEM_CST_MEMBER(NODE) (((ptrmem_cst_t)PTRMEM_CST_CHECK (NODE))->member)
3600
3601 /* The expression in question for a TYPEOF_TYPE. */
3602 #define TYPEOF_TYPE_EXPR(NODE) (TYPE_VALUES_RAW (TYPEOF_TYPE_CHECK (NODE)))
3603
3604 /* The type in question for an UNDERLYING_TYPE. */
3605 #define UNDERLYING_TYPE_TYPE(NODE) \
3606 (TYPE_VALUES_RAW (UNDERLYING_TYPE_CHECK (NODE)))
3607
3608 /* The type in question for BASES. */
3609 #define BASES_TYPE(NODE) \
3610 (TYPE_VALUES_RAW (BASES_CHECK (NODE)))
3611
3612 #define BASES_DIRECT(NODE) \
3613 TREE_LANG_FLAG_0 (BASES_CHECK (NODE))
3614
3615 /* The expression in question for a DECLTYPE_TYPE. */
3616 #define DECLTYPE_TYPE_EXPR(NODE) (TYPE_VALUES_RAW (DECLTYPE_TYPE_CHECK (NODE)))
3617
3618 /* Whether the DECLTYPE_TYPE_EXPR of NODE was originally parsed as an
3619 id-expression or a member-access expression. When false, it was
3620 parsed as a full expression. */
3621 #define DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P(NODE) \
3622 (DECLTYPE_TYPE_CHECK (NODE))->type_common.string_flag
3623
3624 /* These flags indicate that we want different semantics from normal
3625 decltype: lambda capture just drops references, init capture
3626 uses auto semantics, lambda proxies look through implicit dereference. */
3627 #define DECLTYPE_FOR_LAMBDA_CAPTURE(NODE) \
3628 TREE_LANG_FLAG_0 (DECLTYPE_TYPE_CHECK (NODE))
3629 #define DECLTYPE_FOR_INIT_CAPTURE(NODE) \
3630 TREE_LANG_FLAG_1 (DECLTYPE_TYPE_CHECK (NODE))
3631 #define DECLTYPE_FOR_LAMBDA_PROXY(NODE) \
3632 TREE_LANG_FLAG_2 (DECLTYPE_TYPE_CHECK (NODE))
3633
3634 /* Nonzero for VAR_DECL and FUNCTION_DECL node means that `extern' was
3635 specified in its declaration. This can also be set for an
3636 erroneously declared PARM_DECL. */
3637 #define DECL_THIS_EXTERN(NODE) \
3638 DECL_LANG_FLAG_2 (VAR_FUNCTION_OR_PARM_DECL_CHECK (NODE))
3639
3640 /* Nonzero for VAR_DECL and FUNCTION_DECL node means that `static' was
3641 specified in its declaration. This can also be set for an
3642 erroneously declared PARM_DECL. */
3643 #define DECL_THIS_STATIC(NODE) \
3644 DECL_LANG_FLAG_6 (VAR_FUNCTION_OR_PARM_DECL_CHECK (NODE))
3645
3646 /* Nonzero for FIELD_DECL node means that this field is a lambda capture
3647 field for an array of runtime bound. */
3648 #define DECL_VLA_CAPTURE_P(NODE) \
3649 DECL_LANG_FLAG_1 (FIELD_DECL_CHECK (NODE))
3650
3651 /* Nonzero for FIELD_DECL node means that this field is a base class
3652 of the parent object, as opposed to a member field. */
3653 #define DECL_FIELD_IS_BASE(NODE) \
3654 DECL_LANG_FLAG_6 (FIELD_DECL_CHECK (NODE))
3655
3656 /* Nonzero for FIELD_DECL node means that this field is a simple (no
3657 explicit initializer) lambda capture field, making it invisible to
3658 name lookup in unevaluated contexts. */
3659 #define DECL_NORMAL_CAPTURE_P(NODE) \
3660 DECL_LANG_FLAG_7 (FIELD_DECL_CHECK (NODE))
3661
3662 /* Nonzero if TYPE is an anonymous union or struct type. We have to use a
3663 flag for this because "A union for which objects or pointers are
3664 declared is not an anonymous union" [class.union]. */
3665 #define ANON_AGGR_TYPE_P(NODE) \
3666 (CLASS_TYPE_P (NODE) && LANG_TYPE_CLASS_CHECK (NODE)->anon_aggr)
3667 #define SET_ANON_AGGR_TYPE_P(NODE) \
3668 (LANG_TYPE_CLASS_CHECK (NODE)->anon_aggr = 1)
3669
3670 /* Nonzero if TYPE is an anonymous union type. */
3671 #define ANON_UNION_TYPE_P(NODE) \
3672 (TREE_CODE (NODE) == UNION_TYPE && ANON_AGGR_TYPE_P (NODE))
3673
3674 /* Define fields and accessors for nodes representing declared names. */
3675
3676 #define TYPE_WAS_ANONYMOUS(NODE) (LANG_TYPE_CLASS_CHECK (NODE)->was_anonymous)
3677
3678 /* C++: all of these are overloaded! These apply only to TYPE_DECLs. */
3679
3680 /* The format of each node in the DECL_FRIENDLIST is as follows:
3681
3682 The TREE_PURPOSE will be the name of a function, i.e., an
3683 IDENTIFIER_NODE. The TREE_VALUE will be itself a TREE_LIST, whose
3684 TREE_VALUEs are friends with the given name. */
3685 #define DECL_FRIENDLIST(NODE) (DECL_INITIAL (NODE))
3686 #define FRIEND_NAME(LIST) (TREE_PURPOSE (LIST))
3687 #define FRIEND_DECLS(LIST) (TREE_VALUE (LIST))
3688
3689 /* The DECL_ACCESS, if non-NULL, is a TREE_LIST. The TREE_PURPOSE of
3690 each node is a type; the TREE_VALUE is the access granted for this
3691 DECL in that type. The DECL_ACCESS is set by access declarations.
3692 For example, if a member that would normally be public in a
3693 derived class is made protected, then the derived class and the
3694 protected_access_node will appear in the DECL_ACCESS for the node. */
3695 #define DECL_ACCESS(NODE) (LANG_DECL_U2_CHECK (NODE, 0)->access)
3696
3697 /* Nonzero if the FUNCTION_DECL is a global constructor. */
3698 #define DECL_GLOBAL_CTOR_P(NODE) \
3699 (LANG_DECL_FN_CHECK (NODE)->global_ctor_p)
3700
3701 /* Nonzero if the FUNCTION_DECL is a global destructor. */
3702 #define DECL_GLOBAL_DTOR_P(NODE) \
3703 (LANG_DECL_FN_CHECK (NODE)->global_dtor_p)
3704
3705 /* Accessor macros for C++ template decl nodes. */
3706
3707 /* The DECL_TEMPLATE_PARMS are a list. The TREE_PURPOSE of each node
3708 is a INT_CST whose TREE_INT_CST_LOW indicates the level of the
3709 template parameters, with 1 being the outermost set of template
3710 parameters. The TREE_VALUE is a vector, whose elements are the
3711 template parameters at each level. Each element in the vector is a
3712 TREE_LIST, whose TREE_VALUE is a PARM_DECL (if the parameter is a
3713 non-type parameter), or a TYPE_DECL (if the parameter is a type
3714 parameter). The TREE_PURPOSE is the default value, if any. The
3715 TEMPLATE_PARM_INDEX for the parameter is available as the
3716 DECL_INITIAL (for a PARM_DECL) or as the TREE_TYPE (for a
3717 TYPE_DECL). */
3718 #define DECL_TEMPLATE_PARMS(NODE) \
3719 TEMPLATE_DECL_CHECK (NODE)->decl_non_common.arguments
3720 #define DECL_INNERMOST_TEMPLATE_PARMS(NODE) \
3721 INNERMOST_TEMPLATE_PARMS (DECL_TEMPLATE_PARMS (NODE))
3722 #define DECL_NTPARMS(NODE) \
3723 TREE_VEC_LENGTH (DECL_INNERMOST_TEMPLATE_PARMS (NODE))
3724 /* For function, method, class-data templates. */
3725 #define DECL_TEMPLATE_RESULT(NODE) \
3726 DECL_RESULT_FLD (TEMPLATE_DECL_CHECK (NODE))
3727 /* For a function template at namespace scope, DECL_TEMPLATE_INSTANTIATIONS
3728 lists all instantiations and specializations of the function so that
3729 tsubst_friend_function can reassign them to another template if we find
3730 that the namespace-scope template is really a partial instantiation of a
3731 friend template.
3732
3733 For a class template the DECL_TEMPLATE_INSTANTIATIONS lists holds
3734 all instantiations and specializations of the class type, including
3735 partial instantiations and partial specializations, so that if we
3736 explicitly specialize a partial instantiation we can walk the list
3737 in maybe_process_partial_specialization and reassign them or complain
3738 as appropriate.
3739
3740 In both cases, the TREE_PURPOSE of each node contains the arguments
3741 used; the TREE_VALUE contains the generated variable. The template
3742 arguments are always complete. For example, given:
3743
3744 template <class T> struct S1 {
3745 template <class U> struct S2 {};
3746 template <class U> struct S2<U*> {};
3747 };
3748
3749 the record for the partial specialization will contain, as its
3750 argument list, { {T}, {U*} }, and will be on the
3751 DECL_TEMPLATE_INSTANTIATIONS list for `template <class T> template
3752 <class U> struct S1<T>::S2'.
3753
3754 This list is not used for other templates. */
3755 #define DECL_TEMPLATE_INSTANTIATIONS(NODE) \
3756 DECL_VINDEX (TEMPLATE_DECL_CHECK (NODE))
3757
3758 /* For a class template, this list contains the partial
3759 specializations of this template. (Full specializations are not
3760 recorded on this list.) The TREE_PURPOSE holds the arguments used
3761 in the partial specialization (e.g., for `template <class T> struct
3762 S<T*, int>' this will be `T*, int'.) The arguments will also include
3763 any outer template arguments. The TREE_VALUE holds the TEMPLATE_DECL
3764 for the partial specialization. The TREE_TYPE is the _TYPE node for
3765 the partial specialization.
3766
3767 This list is not used for other templates. */
3768 #define DECL_TEMPLATE_SPECIALIZATIONS(NODE) \
3769 DECL_SIZE (TEMPLATE_DECL_CHECK (NODE))
3770
3771 /* Nonzero for a DECL which is actually a template parameter. Keep
3772 these checks in ascending tree code order. */
3773 #define DECL_TEMPLATE_PARM_P(NODE) \
3774 (DECL_LANG_FLAG_0 (NODE) \
3775 && (TREE_CODE (NODE) == CONST_DECL \
3776 || TREE_CODE (NODE) == PARM_DECL \
3777 || TREE_CODE (NODE) == TYPE_DECL \
3778 || TREE_CODE (NODE) == TEMPLATE_DECL))
3779
3780 /* Mark NODE as a template parameter. */
3781 #define SET_DECL_TEMPLATE_PARM_P(NODE) \
3782 (DECL_LANG_FLAG_0 (NODE) = 1)
3783
3784 /* Nonzero if NODE is a template template parameter. */
3785 #define DECL_TEMPLATE_TEMPLATE_PARM_P(NODE) \
3786 (TREE_CODE (NODE) == TEMPLATE_DECL && DECL_TEMPLATE_PARM_P (NODE))
3787
3788 /* Nonzero for a DECL that represents a function template. */
3789 #define DECL_FUNCTION_TEMPLATE_P(NODE) \
3790 (TREE_CODE (NODE) == TEMPLATE_DECL \
3791 && DECL_TEMPLATE_RESULT (NODE) != NULL_TREE \
3792 && TREE_CODE (DECL_TEMPLATE_RESULT (NODE)) == FUNCTION_DECL)
3793
3794 /* Nonzero for a DECL that represents a class template or alias
3795 template. */
3796 #define DECL_TYPE_TEMPLATE_P(NODE) \
3797 (TREE_CODE (NODE) == TEMPLATE_DECL \
3798 && DECL_TEMPLATE_RESULT (NODE) != NULL_TREE \
3799 && TREE_CODE (DECL_TEMPLATE_RESULT (NODE)) == TYPE_DECL)
3800
3801 /* Nonzero for a DECL that represents a class template. */
3802 #define DECL_CLASS_TEMPLATE_P(NODE) \
3803 (DECL_TYPE_TEMPLATE_P (NODE) \
3804 && DECL_IMPLICIT_TYPEDEF_P (DECL_TEMPLATE_RESULT (NODE)))
3805
3806 /* Nonzero for a TEMPLATE_DECL that represents an alias template. */
3807 #define DECL_ALIAS_TEMPLATE_P(NODE) \
3808 (DECL_TYPE_TEMPLATE_P (NODE) \
3809 && !DECL_ARTIFICIAL (DECL_TEMPLATE_RESULT (NODE)))
3810
3811 /* Nonzero for a NODE which declares a type. */
3812 #define DECL_DECLARES_TYPE_P(NODE) \
3813 (TREE_CODE (NODE) == TYPE_DECL || DECL_TYPE_TEMPLATE_P (NODE))
3814
3815 /* Nonzero if NODE declares a function. */
3816 #define DECL_DECLARES_FUNCTION_P(NODE) \
3817 (TREE_CODE (NODE) == FUNCTION_DECL || DECL_FUNCTION_TEMPLATE_P (NODE))
3818
3819 /* Nonzero if NODE is the typedef implicitly generated for a type when
3820 the type is declared. In C++, `struct S {};' is roughly
3821 equivalent to `struct S {}; typedef struct S S;' in C.
3822 DECL_IMPLICIT_TYPEDEF_P will hold for the typedef indicated in this
3823 example. In C++, there is a second implicit typedef for each
3824 class, in the scope of `S' itself, so that you can say `S::S'.
3825 DECL_SELF_REFERENCE_P will hold for that second typedef. */
3826 #define DECL_IMPLICIT_TYPEDEF_P(NODE) \
3827 (TREE_CODE (NODE) == TYPE_DECL && DECL_LANG_FLAG_2 (NODE))
3828 #define SET_DECL_IMPLICIT_TYPEDEF_P(NODE) \
3829 (DECL_LANG_FLAG_2 (NODE) = 1)
3830 #define DECL_SELF_REFERENCE_P(NODE) \
3831 (TREE_CODE (NODE) == TYPE_DECL && DECL_LANG_FLAG_4 (NODE))
3832 #define SET_DECL_SELF_REFERENCE_P(NODE) \
3833 (DECL_LANG_FLAG_4 (NODE) = 1)
3834
3835 /* A `primary' template is one that has its own template header and is not
3836 a partial specialization. A member function of a class template is a
3837 template, but not primary. A member template is primary. Friend
3838 templates are primary, too. */
3839
3840 /* Returns the primary template corresponding to these parameters. */
3841 #define DECL_PRIMARY_TEMPLATE(NODE) \
3842 (TREE_TYPE (DECL_INNERMOST_TEMPLATE_PARMS (NODE)))
3843
3844 /* Returns nonzero if NODE is a primary template. */
3845 #define PRIMARY_TEMPLATE_P(NODE) (DECL_PRIMARY_TEMPLATE (NODE) == (NODE))
3846
3847 /* Nonzero iff NODE is a specialization of a template. The value
3848 indicates the type of specializations:
3849
3850 1=implicit instantiation
3851
3852 2=partial or explicit specialization, e.g.:
3853
3854 template <> int min<int> (int, int),
3855
3856 3=explicit instantiation, e.g.:
3857
3858 template int min<int> (int, int);
3859
3860 Note that NODE will be marked as a specialization even if the
3861 template it is instantiating is not a primary template. For
3862 example, given:
3863
3864 template <typename T> struct O {
3865 void f();
3866 struct I {};
3867 };
3868
3869 both O<int>::f and O<int>::I will be marked as instantiations.
3870
3871 If DECL_USE_TEMPLATE is nonzero, then DECL_TEMPLATE_INFO will also
3872 be non-NULL. */
3873 #define DECL_USE_TEMPLATE(NODE) (DECL_LANG_SPECIFIC (NODE)->u.base.use_template)
3874
3875 /* Like DECL_USE_TEMPLATE, but for class types. */
3876 #define CLASSTYPE_USE_TEMPLATE(NODE) \
3877 (LANG_TYPE_CLASS_CHECK (NODE)->use_template)
3878
3879 /* True if NODE is a specialization of a primary template. */
3880 #define CLASSTYPE_SPECIALIZATION_OF_PRIMARY_TEMPLATE_P(NODE) \
3881 (CLASS_TYPE_P (NODE) \
3882 && CLASSTYPE_USE_TEMPLATE (NODE) \
3883 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (NODE)))
3884
3885 #define DECL_TEMPLATE_INSTANTIATION(NODE) (DECL_USE_TEMPLATE (NODE) & 1)
3886 #define CLASSTYPE_TEMPLATE_INSTANTIATION(NODE) \
3887 (CLASSTYPE_USE_TEMPLATE (NODE) & 1)
3888
3889 #define DECL_TEMPLATE_SPECIALIZATION(NODE) (DECL_USE_TEMPLATE (NODE) == 2)
3890 #define SET_DECL_TEMPLATE_SPECIALIZATION(NODE) (DECL_USE_TEMPLATE (NODE) = 2)
3891
3892 /* Returns true for an explicit or partial specialization of a class
3893 template. */
3894 #define CLASSTYPE_TEMPLATE_SPECIALIZATION(NODE) \
3895 (CLASSTYPE_USE_TEMPLATE (NODE) == 2)
3896 #define SET_CLASSTYPE_TEMPLATE_SPECIALIZATION(NODE) \
3897 (CLASSTYPE_USE_TEMPLATE (NODE) = 2)
3898
3899 #define DECL_IMPLICIT_INSTANTIATION(NODE) (DECL_USE_TEMPLATE (NODE) == 1)
3900 #define SET_DECL_IMPLICIT_INSTANTIATION(NODE) (DECL_USE_TEMPLATE (NODE) = 1)
3901 #define CLASSTYPE_IMPLICIT_INSTANTIATION(NODE) \
3902 (CLASSTYPE_USE_TEMPLATE (NODE) == 1)
3903 #define SET_CLASSTYPE_IMPLICIT_INSTANTIATION(NODE) \
3904 (CLASSTYPE_USE_TEMPLATE (NODE) = 1)
3905
3906 #define DECL_EXPLICIT_INSTANTIATION(NODE) (DECL_USE_TEMPLATE (NODE) == 3)
3907 #define SET_DECL_EXPLICIT_INSTANTIATION(NODE) (DECL_USE_TEMPLATE (NODE) = 3)
3908 #define CLASSTYPE_EXPLICIT_INSTANTIATION(NODE) \
3909 (CLASSTYPE_USE_TEMPLATE (NODE) == 3)
3910 #define SET_CLASSTYPE_EXPLICIT_INSTANTIATION(NODE) \
3911 (CLASSTYPE_USE_TEMPLATE (NODE) = 3)
3912
3913 /* Nonzero if DECL is a friend function which is an instantiation
3914 from the point of view of the compiler, but not from the point of
3915 view of the language. For example given:
3916 template <class T> struct S { friend void f(T) {}; };
3917 the declaration of `void f(int)' generated when S<int> is
3918 instantiated will not be a DECL_TEMPLATE_INSTANTIATION, but will be
3919 a DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION. */
3920 #define DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION(DECL) \
3921 (DECL_TEMPLATE_INFO (DECL) && !DECL_USE_TEMPLATE (DECL))
3922
3923 /* Nonzero if DECL is a function generated from a function 'temploid',
3924 i.e. template, member of class template, or dependent friend. */
3925 #define DECL_TEMPLOID_INSTANTIATION(DECL) \
3926 (DECL_TEMPLATE_INSTANTIATION (DECL) \
3927 || DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (DECL))
3928
3929 /* Nonzero if DECL is either defined implicitly by the compiler or
3930 generated from a temploid. */
3931 #define DECL_GENERATED_P(DECL) \
3932 (DECL_TEMPLOID_INSTANTIATION (DECL) || DECL_DEFAULTED_FN (DECL))
3933
3934 /* Nonzero iff we are currently processing a declaration for an
3935 entity with its own template parameter list, and which is not a
3936 full specialization. */
3937 #define PROCESSING_REAL_TEMPLATE_DECL_P() \
3938 (processing_template_decl > template_class_depth (current_scope ()))
3939
3940 /* Nonzero if this VAR_DECL or FUNCTION_DECL has already been
3941 instantiated, i.e. its definition has been generated from the
3942 pattern given in the template. */
3943 #define DECL_TEMPLATE_INSTANTIATED(NODE) \
3944 DECL_LANG_FLAG_1 (VAR_OR_FUNCTION_DECL_CHECK (NODE))
3945
3946 /* We know what we're doing with this decl now. */
3947 #define DECL_INTERFACE_KNOWN(NODE) DECL_LANG_FLAG_5 (NODE)
3948
3949 /* DECL_EXTERNAL must be set on a decl until the decl is actually emitted,
3950 so that assemble_external will work properly. So we have this flag to
3951 tell us whether the decl is really not external.
3952
3953 This flag does not indicate whether or not the decl is defined in the
3954 current translation unit; it indicates whether or not we should emit the
3955 decl at the end of compilation if it is defined and needed. */
3956 #define DECL_NOT_REALLY_EXTERN(NODE) \
3957 (DECL_LANG_SPECIFIC (NODE)->u.base.not_really_extern)
3958
3959 #define DECL_REALLY_EXTERN(NODE) \
3960 (DECL_EXTERNAL (NODE) && ! DECL_NOT_REALLY_EXTERN (NODE))
3961
3962 /* A thunk is a stub function.
3963
3964 A thunk is an alternate entry point for an ordinary FUNCTION_DECL.
3965 The address of the ordinary FUNCTION_DECL is given by the
3966 DECL_INITIAL, which is always an ADDR_EXPR whose operand is a
3967 FUNCTION_DECL. The job of the thunk is to either adjust the this
3968 pointer before transferring control to the FUNCTION_DECL, or call
3969 FUNCTION_DECL and then adjust the result value. Note, the result
3970 pointer adjusting thunk must perform a call to the thunked
3971 function, (or be implemented via passing some invisible parameter
3972 to the thunked function, which is modified to perform the
3973 adjustment just before returning).
3974
3975 A thunk may perform either, or both, of the following operations:
3976
3977 o Adjust the this or result pointer by a constant offset.
3978 o Adjust the this or result pointer by looking up a vcall or vbase offset
3979 in the vtable.
3980
3981 A this pointer adjusting thunk converts from a base to a derived
3982 class, and hence adds the offsets. A result pointer adjusting thunk
3983 converts from a derived class to a base, and hence subtracts the
3984 offsets. If both operations are performed, then the constant
3985 adjustment is performed first for this pointer adjustment and last
3986 for the result pointer adjustment.
3987
3988 The constant adjustment is given by THUNK_FIXED_OFFSET. If the
3989 vcall or vbase offset is required, THUNK_VIRTUAL_OFFSET is
3990 used. For this pointer adjusting thunks, it is the vcall offset
3991 into the vtable. For result pointer adjusting thunks it is the
3992 binfo of the virtual base to convert to. Use that binfo's vbase
3993 offset.
3994
3995 It is possible to have equivalent covariant thunks. These are
3996 distinct virtual covariant thunks whose vbase offsets happen to
3997 have the same value. THUNK_ALIAS is used to pick one as the
3998 canonical thunk, which will get all the this pointer adjusting
3999 thunks attached to it. */
4000
4001 /* An integer indicating how many bytes should be subtracted from the
4002 this or result pointer when this function is called. */
4003 #define THUNK_FIXED_OFFSET(DECL) \
4004 (DECL_LANG_SPECIFIC (THUNK_FUNCTION_CHECK (DECL))->u.fn.u5.fixed_offset)
4005
4006 /* A tree indicating how to perform the virtual adjustment. For a this
4007 adjusting thunk it is the number of bytes to be added to the vtable
4008 to find the vcall offset. For a result adjusting thunk, it is the
4009 binfo of the relevant virtual base. If NULL, then there is no
4010 virtual adjust. (The vptr is always located at offset zero from
4011 the this or result pointer.) (If the covariant type is within the
4012 class hierarchy being laid out, the vbase index is not yet known
4013 at the point we need to create the thunks, hence the need to use
4014 binfos.) */
4015
4016 #define THUNK_VIRTUAL_OFFSET(DECL) \
4017 (LANG_DECL_U2_CHECK (FUNCTION_DECL_CHECK (DECL), 0)->access)
4018
4019 /* A thunk which is equivalent to another thunk. */
4020 #define THUNK_ALIAS(DECL) \
4021 (DECL_LANG_SPECIFIC (FUNCTION_DECL_CHECK (DECL))->u.min.template_info)
4022
4023 /* For thunk NODE, this is the FUNCTION_DECL thunked to. It is
4024 possible for the target to be a thunk too. */
4025 #define THUNK_TARGET(NODE) \
4026 (LANG_DECL_FN_CHECK (NODE)->befriending_classes)
4027
4028 /* True for a SCOPE_REF iff the "template" keyword was used to
4029 indicate that the qualified name denotes a template. */
4030 #define QUALIFIED_NAME_IS_TEMPLATE(NODE) \
4031 (TREE_LANG_FLAG_1 (SCOPE_REF_CHECK (NODE)))
4032
4033 /* True for an OMP_ATOMIC that has dependent parameters. These are stored
4034 as an expr in operand 1, and integer_zero_node in operand 0. */
4035 #define OMP_ATOMIC_DEPENDENT_P(NODE) \
4036 (TREE_CODE (TREE_OPERAND (OMP_ATOMIC_CHECK (NODE), 0)) == INTEGER_CST)
4037
4038 /* Used while gimplifying continue statements bound to OMP_FOR nodes. */
4039 #define OMP_FOR_GIMPLIFYING_P(NODE) \
4040 (TREE_LANG_FLAG_0 (OMP_LOOP_CHECK (NODE)))
4041
4042 /* A language-specific token attached to the OpenMP data clauses to
4043 hold code (or code fragments) related to ctors, dtors, and op=.
4044 See semantics.c for details. */
4045 #define CP_OMP_CLAUSE_INFO(NODE) \
4046 TREE_TYPE (OMP_CLAUSE_RANGE_CHECK (NODE, OMP_CLAUSE_PRIVATE, \
4047 OMP_CLAUSE_LINEAR))
4048
4049 /* Nonzero if this transaction expression's body contains statements. */
4050 #define TRANSACTION_EXPR_IS_STMT(NODE) \
4051 TREE_LANG_FLAG_0 (TRANSACTION_EXPR_CHECK (NODE))
4052
4053 /* These macros provide convenient access to the various _STMT nodes
4054 created when parsing template declarations. */
4055 #define TRY_STMTS(NODE) TREE_OPERAND (TRY_BLOCK_CHECK (NODE), 0)
4056 #define TRY_HANDLERS(NODE) TREE_OPERAND (TRY_BLOCK_CHECK (NODE), 1)
4057
4058 #define EH_SPEC_STMTS(NODE) TREE_OPERAND (EH_SPEC_BLOCK_CHECK (NODE), 0)
4059 #define EH_SPEC_RAISES(NODE) TREE_OPERAND (EH_SPEC_BLOCK_CHECK (NODE), 1)
4060
4061 #define USING_STMT_NAMESPACE(NODE) TREE_OPERAND (USING_STMT_CHECK (NODE), 0)
4062
4063 /* Nonzero if this try block is a function try block. */
4064 #define FN_TRY_BLOCK_P(NODE) TREE_LANG_FLAG_3 (TRY_BLOCK_CHECK (NODE))
4065 #define HANDLER_PARMS(NODE) TREE_OPERAND (HANDLER_CHECK (NODE), 0)
4066 #define HANDLER_BODY(NODE) TREE_OPERAND (HANDLER_CHECK (NODE), 1)
4067 #define HANDLER_TYPE(NODE) TREE_TYPE (HANDLER_CHECK (NODE))
4068
4069 /* CLEANUP_STMT accessors. The statement(s) covered, the cleanup to run
4070 and the VAR_DECL for which this cleanup exists. */
4071 #define CLEANUP_BODY(NODE) TREE_OPERAND (CLEANUP_STMT_CHECK (NODE), 0)
4072 #define CLEANUP_EXPR(NODE) TREE_OPERAND (CLEANUP_STMT_CHECK (NODE), 1)
4073 #define CLEANUP_DECL(NODE) TREE_OPERAND (CLEANUP_STMT_CHECK (NODE), 2)
4074
4075 /* IF_STMT accessors. These give access to the condition of the if
4076 statement, the then block of the if statement, and the else block
4077 of the if statement if it exists. */
4078 #define IF_COND(NODE) TREE_OPERAND (IF_STMT_CHECK (NODE), 0)
4079 #define THEN_CLAUSE(NODE) TREE_OPERAND (IF_STMT_CHECK (NODE), 1)
4080 #define ELSE_CLAUSE(NODE) TREE_OPERAND (IF_STMT_CHECK (NODE), 2)
4081 #define IF_SCOPE(NODE) TREE_OPERAND (IF_STMT_CHECK (NODE), 3)
4082
4083 /* WHILE_STMT accessors. These give access to the condition of the
4084 while statement and the body of the while statement, respectively. */
4085 #define WHILE_COND(NODE) TREE_OPERAND (WHILE_STMT_CHECK (NODE), 0)
4086 #define WHILE_BODY(NODE) TREE_OPERAND (WHILE_STMT_CHECK (NODE), 1)
4087
4088 /* DO_STMT accessors. These give access to the condition of the do
4089 statement and the body of the do statement, respectively. */
4090 #define DO_COND(NODE) TREE_OPERAND (DO_STMT_CHECK (NODE), 0)
4091 #define DO_BODY(NODE) TREE_OPERAND (DO_STMT_CHECK (NODE), 1)
4092
4093 /* FOR_STMT accessors. These give access to the init statement,
4094 condition, update expression, and body of the for statement,
4095 respectively. */
4096 #define FOR_INIT_STMT(NODE) TREE_OPERAND (FOR_STMT_CHECK (NODE), 0)
4097 #define FOR_COND(NODE) TREE_OPERAND (FOR_STMT_CHECK (NODE), 1)
4098 #define FOR_EXPR(NODE) TREE_OPERAND (FOR_STMT_CHECK (NODE), 2)
4099 #define FOR_BODY(NODE) TREE_OPERAND (FOR_STMT_CHECK (NODE), 3)
4100 #define FOR_SCOPE(NODE) TREE_OPERAND (FOR_STMT_CHECK (NODE), 4)
4101
4102 /* RANGE_FOR_STMT accessors. These give access to the declarator,
4103 expression, body, and scope of the statement, respectively. */
4104 #define RANGE_FOR_DECL(NODE) TREE_OPERAND (RANGE_FOR_STMT_CHECK (NODE), 0)
4105 #define RANGE_FOR_EXPR(NODE) TREE_OPERAND (RANGE_FOR_STMT_CHECK (NODE), 1)
4106 #define RANGE_FOR_BODY(NODE) TREE_OPERAND (RANGE_FOR_STMT_CHECK (NODE), 2)
4107 #define RANGE_FOR_SCOPE(NODE) TREE_OPERAND (RANGE_FOR_STMT_CHECK (NODE), 3)
4108 #define RANGE_FOR_IVDEP(NODE) TREE_LANG_FLAG_6 (RANGE_FOR_STMT_CHECK (NODE))
4109
4110 #define SWITCH_STMT_COND(NODE) TREE_OPERAND (SWITCH_STMT_CHECK (NODE), 0)
4111 #define SWITCH_STMT_BODY(NODE) TREE_OPERAND (SWITCH_STMT_CHECK (NODE), 1)
4112 #define SWITCH_STMT_TYPE(NODE) TREE_OPERAND (SWITCH_STMT_CHECK (NODE), 2)
4113 #define SWITCH_STMT_SCOPE(NODE) TREE_OPERAND (SWITCH_STMT_CHECK (NODE), 3)
4114
4115 /* STMT_EXPR accessor. */
4116 #define STMT_EXPR_STMT(NODE) TREE_OPERAND (STMT_EXPR_CHECK (NODE), 0)
4117
4118 /* EXPR_STMT accessor. This gives the expression associated with an
4119 expression statement. */
4120 #define EXPR_STMT_EXPR(NODE) TREE_OPERAND (EXPR_STMT_CHECK (NODE), 0)
4121
4122 /* True if this TARGET_EXPR was created by build_cplus_new, and so we can
4123 discard it if it isn't useful. */
4124 #define TARGET_EXPR_IMPLICIT_P(NODE) \
4125 TREE_LANG_FLAG_0 (TARGET_EXPR_CHECK (NODE))
4126
4127 /* True if this TARGET_EXPR is the result of list-initialization of a
4128 temporary. */
4129 #define TARGET_EXPR_LIST_INIT_P(NODE) \
4130 TREE_LANG_FLAG_1 (TARGET_EXPR_CHECK (NODE))
4131
4132 /* True if this TARGET_EXPR expresses direct-initialization of an object
4133 to be named later. */
4134 #define TARGET_EXPR_DIRECT_INIT_P(NODE) \
4135 TREE_LANG_FLAG_2 (TARGET_EXPR_CHECK (NODE))
4136
4137 /* True if EXPR expresses direct-initialization of a TYPE. */
4138 #define DIRECT_INIT_EXPR_P(TYPE,EXPR) \
4139 (TREE_CODE (EXPR) == TARGET_EXPR && TREE_LANG_FLAG_2 (EXPR) \
4140 && same_type_ignoring_top_level_qualifiers_p (TYPE, TREE_TYPE (EXPR)))
4141
4142 /* True if this CONVERT_EXPR is for a conversion to virtual base in
4143 an NSDMI, and should be re-evaluated when used in a constructor. */
4144 #define CONVERT_EXPR_VBASE_PATH(NODE) \
4145 TREE_LANG_FLAG_0 (CONVERT_EXPR_CHECK (NODE))
4146
4147 /* True if SIZEOF_EXPR argument is type. */
4148 #define SIZEOF_EXPR_TYPE_P(NODE) \
4149 TREE_LANG_FLAG_0 (SIZEOF_EXPR_CHECK (NODE))
4150
4151 /* An enumeration of the kind of tags that C++ accepts. */
4152 enum tag_types {
4153 none_type = 0, /* Not a tag type. */
4154 record_type, /* "struct" types. */
4155 class_type, /* "class" types. */
4156 union_type, /* "union" types. */
4157 enum_type, /* "enum" types. */
4158 typename_type /* "typename" types. */
4159 };
4160
4161 /* The various kinds of lvalues we distinguish. */
4162 enum cp_lvalue_kind_flags {
4163 clk_none = 0, /* Things that are not an lvalue. */
4164 clk_ordinary = 1, /* An ordinary lvalue. */
4165 clk_rvalueref = 2,/* An xvalue (rvalue formed using an rvalue reference) */
4166 clk_class = 4, /* A prvalue of class-type. */
4167 clk_bitfield = 8, /* An lvalue for a bit-field. */
4168 clk_packed = 16 /* An lvalue for a packed field. */
4169 };
4170
4171 /* This type is used for parameters and variables which hold
4172 combinations of the flags in enum cp_lvalue_kind_flags. */
4173 typedef int cp_lvalue_kind;
4174
4175 /* Various kinds of template specialization, instantiation, etc. */
4176 typedef enum tmpl_spec_kind {
4177 tsk_none, /* Not a template at all. */
4178 tsk_invalid_member_spec, /* An explicit member template
4179 specialization, but the enclosing
4180 classes have not all been explicitly
4181 specialized. */
4182 tsk_invalid_expl_inst, /* An explicit instantiation containing
4183 template parameter lists. */
4184 tsk_excessive_parms, /* A template declaration with too many
4185 template parameter lists. */
4186 tsk_insufficient_parms, /* A template declaration with too few
4187 parameter lists. */
4188 tsk_template, /* A template declaration. */
4189 tsk_expl_spec, /* An explicit specialization. */
4190 tsk_expl_inst /* An explicit instantiation. */
4191 } tmpl_spec_kind;
4192
4193 /* The various kinds of access. BINFO_ACCESS depends on these being
4194 two bit quantities. The numerical values are important; they are
4195 used to initialize RTTI data structures, so changing them changes
4196 the ABI. */
4197 typedef enum access_kind {
4198 ak_none = 0, /* Inaccessible. */
4199 ak_public = 1, /* Accessible, as a `public' thing. */
4200 ak_protected = 2, /* Accessible, as a `protected' thing. */
4201 ak_private = 3 /* Accessible, as a `private' thing. */
4202 } access_kind;
4203
4204 /* The various kinds of special functions. If you add to this list,
4205 you should update special_function_p as well. */
4206 typedef enum special_function_kind {
4207 sfk_none = 0, /* Not a special function. This enumeral
4208 must have value zero; see
4209 special_function_p. */
4210 sfk_constructor, /* A constructor. */
4211 sfk_copy_constructor, /* A copy constructor. */
4212 sfk_move_constructor, /* A move constructor. */
4213 sfk_copy_assignment, /* A copy assignment operator. */
4214 sfk_move_assignment, /* A move assignment operator. */
4215 sfk_destructor, /* A destructor. */
4216 sfk_complete_destructor, /* A destructor for complete objects. */
4217 sfk_base_destructor, /* A destructor for base subobjects. */
4218 sfk_deleting_destructor, /* A destructor for complete objects that
4219 deletes the object after it has been
4220 destroyed. */
4221 sfk_conversion, /* A conversion operator. */
4222 sfk_inheriting_constructor /* An inheriting constructor */
4223 } special_function_kind;
4224
4225 /* The various kinds of linkage. From [basic.link],
4226
4227 A name is said to have linkage when it might denote the same
4228 object, reference, function, type, template, namespace or value
4229 as a name introduced in another scope:
4230
4231 -- When a name has external linkage, the entity it denotes can
4232 be referred to from scopes of other translation units or from
4233 other scopes of the same translation unit.
4234
4235 -- When a name has internal linkage, the entity it denotes can
4236 be referred to by names from other scopes in the same
4237 translation unit.
4238
4239 -- When a name has no linkage, the entity it denotes cannot be
4240 referred to by names from other scopes. */
4241
4242 typedef enum linkage_kind {
4243 lk_none, /* No linkage. */
4244 lk_internal, /* Internal linkage. */
4245 lk_external /* External linkage. */
4246 } linkage_kind;
4247
4248 typedef enum duration_kind {
4249 dk_static,
4250 dk_thread,
4251 dk_auto,
4252 dk_dynamic
4253 } duration_kind;
4254
4255 /* Bitmask flags to control type substitution. */
4256 enum tsubst_flags {
4257 tf_none = 0, /* nothing special */
4258 tf_error = 1 << 0, /* give error messages */
4259 tf_warning = 1 << 1, /* give warnings too */
4260 tf_ignore_bad_quals = 1 << 2, /* ignore bad cvr qualifiers */
4261 tf_keep_type_decl = 1 << 3, /* retain typedef type decls
4262 (make_typename_type use) */
4263 tf_ptrmem_ok = 1 << 4, /* pointers to member ok (internal
4264 instantiate_type use) */
4265 tf_user = 1 << 5, /* found template must be a user template
4266 (lookup_template_class use) */
4267 tf_conv = 1 << 6, /* We are determining what kind of
4268 conversion might be permissible,
4269 not actually performing the
4270 conversion. */
4271 tf_decltype = 1 << 7, /* We are the operand of decltype.
4272 Used to implement the special rules
4273 for calls in decltype (5.2.2/11). */
4274 tf_partial = 1 << 8, /* Doing initial explicit argument
4275 substitution in fn_type_unification. */
4276 /* Convenient substitution flags combinations. */
4277 tf_warning_or_error = tf_warning | tf_error
4278 };
4279
4280 /* This type is used for parameters and variables which hold
4281 combinations of the flags in enum tsubst_flags. */
4282 typedef int tsubst_flags_t;
4283
4284 /* The kind of checking we can do looking in a class hierarchy. */
4285 enum base_access_flags {
4286 ba_any = 0, /* Do not check access, allow an ambiguous base,
4287 prefer a non-virtual base */
4288 ba_unique = 1 << 0, /* Must be a unique base. */
4289 ba_check_bit = 1 << 1, /* Check access. */
4290 ba_check = ba_unique | ba_check_bit,
4291 ba_ignore_scope = 1 << 2 /* Ignore access allowed by local scope. */
4292 };
4293
4294 /* This type is used for parameters and variables which hold
4295 combinations of the flags in enum base_access_flags. */
4296 typedef int base_access;
4297
4298 /* The various kinds of access check during parsing. */
4299 typedef enum deferring_kind {
4300 dk_no_deferred = 0, /* Check access immediately */
4301 dk_deferred = 1, /* Deferred check */
4302 dk_no_check = 2 /* No access check */
4303 } deferring_kind;
4304
4305 /* The kind of base we can find, looking in a class hierarchy.
4306 Values <0 indicate we failed. */
4307 typedef enum base_kind {
4308 bk_inaccessible = -3, /* The base is inaccessible */
4309 bk_ambig = -2, /* The base is ambiguous */
4310 bk_not_base = -1, /* It is not a base */
4311 bk_same_type = 0, /* It is the same type */
4312 bk_proper_base = 1, /* It is a proper base */
4313 bk_via_virtual = 2 /* It is a proper base, but via a virtual
4314 path. This might not be the canonical
4315 binfo. */
4316 } base_kind;
4317
4318 /* Node for "pointer to (virtual) function".
4319 This may be distinct from ptr_type_node so gdb can distinguish them. */
4320 #define vfunc_ptr_type_node vtable_entry_type
4321
4322
4323 /* For building calls to `delete'. */
4324 extern GTY(()) tree integer_two_node;
4325
4326 /* The number of function bodies which we are currently processing.
4327 (Zero if we are at namespace scope, one inside the body of a
4328 function, two inside the body of a function in a local class, etc.) */
4329 extern int function_depth;
4330
4331 /* Nonzero if we are inside eq_specializations, which affects comparison of
4332 PARM_DECLs in cp_tree_equal. */
4333 extern int comparing_specializations;
4334
4335 /* In parser.c. */
4336
4337 /* Nonzero if we are parsing an unevaluated operand: an operand to
4338 sizeof, typeof, or alignof. This is a count since operands to
4339 sizeof can be nested. */
4340
4341 extern int cp_unevaluated_operand;
4342 extern tree cp_convert_range_for (tree, tree, tree, bool);
4343 extern bool parsing_nsdmi (void);
4344
4345 /* in pt.c */
4346
4347 /* These values are used for the `STRICT' parameter to type_unification and
4348 fn_type_unification. Their meanings are described with the
4349 documentation for fn_type_unification. */
4350
4351 typedef enum unification_kind_t {
4352 DEDUCE_CALL,
4353 DEDUCE_CONV,
4354 DEDUCE_EXACT
4355 } unification_kind_t;
4356
4357 /* in class.c */
4358
4359 extern int current_class_depth;
4360
4361 /* An array of all local classes present in this translation unit, in
4362 declaration order. */
4363 extern GTY(()) vec<tree, va_gc> *local_classes;
4364 \f
4365 /* Here's where we control how name mangling takes place. */
4366
4367 /* Cannot use '$' up front, because this confuses gdb
4368 (names beginning with '$' are gdb-local identifiers).
4369
4370 Note that all forms in which the '$' is significant are long enough
4371 for direct indexing (meaning that if we know there is a '$'
4372 at a particular location, we can index into the string at
4373 any other location that provides distinguishing characters). */
4374
4375 /* Define NO_DOT_IN_LABEL in your favorite tm file if your assembler
4376 doesn't allow '.' in symbol names. */
4377 #ifndef NO_DOT_IN_LABEL
4378
4379 #define JOINER '.'
4380
4381 #define AUTO_TEMP_NAME "_.tmp_"
4382 #define VFIELD_BASE ".vf"
4383 #define VFIELD_NAME "_vptr."
4384 #define VFIELD_NAME_FORMAT "_vptr.%s"
4385
4386 #else /* NO_DOT_IN_LABEL */
4387
4388 #ifndef NO_DOLLAR_IN_LABEL
4389
4390 #define JOINER '$'
4391
4392 #define AUTO_TEMP_NAME "_$tmp_"
4393 #define VFIELD_BASE "$vf"
4394 #define VFIELD_NAME "_vptr$"
4395 #define VFIELD_NAME_FORMAT "_vptr$%s"
4396
4397 #else /* NO_DOLLAR_IN_LABEL */
4398
4399 #define AUTO_TEMP_NAME "__tmp_"
4400 #define TEMP_NAME_P(ID_NODE) \
4401 (!strncmp (IDENTIFIER_POINTER (ID_NODE), AUTO_TEMP_NAME, \
4402 sizeof (AUTO_TEMP_NAME) - 1))
4403 #define VTABLE_NAME "__vt_"
4404 #define VTABLE_NAME_P(ID_NODE) \
4405 (!strncmp (IDENTIFIER_POINTER (ID_NODE), VTABLE_NAME, \
4406 sizeof (VTABLE_NAME) - 1))
4407 #define VFIELD_BASE "__vfb"
4408 #define VFIELD_NAME "__vptr_"
4409 #define VFIELD_NAME_P(ID_NODE) \
4410 (!strncmp (IDENTIFIER_POINTER (ID_NODE), VFIELD_NAME, \
4411 sizeof (VFIELD_NAME) - 1))
4412 #define VFIELD_NAME_FORMAT "__vptr_%s"
4413
4414 #endif /* NO_DOLLAR_IN_LABEL */
4415 #endif /* NO_DOT_IN_LABEL */
4416
4417 #define THIS_NAME "this"
4418
4419 #define IN_CHARGE_NAME "__in_chrg"
4420
4421 #define VTBL_PTR_TYPE "__vtbl_ptr_type"
4422 #define VTABLE_DELTA_NAME "__delta"
4423 #define VTABLE_PFN_NAME "__pfn"
4424
4425 #define LAMBDANAME_PREFIX "__lambda"
4426 #define LAMBDANAME_FORMAT LAMBDANAME_PREFIX "%d"
4427
4428 #define UDLIT_OP_ANSI_PREFIX "operator\"\""
4429 #define UDLIT_OP_ANSI_FORMAT UDLIT_OP_ANSI_PREFIX "%s"
4430 #define UDLIT_OP_MANGLED_PREFIX "li"
4431 #define UDLIT_OP_MANGLED_FORMAT UDLIT_OP_MANGLED_PREFIX "%s"
4432 #define UDLIT_OPER_P(ID_NODE) \
4433 (!strncmp (IDENTIFIER_POINTER (ID_NODE), \
4434 UDLIT_OP_ANSI_PREFIX, \
4435 sizeof (UDLIT_OP_ANSI_PREFIX) - 1))
4436 #define UDLIT_OP_SUFFIX(ID_NODE) \
4437 (IDENTIFIER_POINTER (ID_NODE) + sizeof (UDLIT_OP_ANSI_PREFIX) - 1)
4438
4439 #if !defined(NO_DOLLAR_IN_LABEL) || !defined(NO_DOT_IN_LABEL)
4440
4441 #define VTABLE_NAME_P(ID_NODE) (IDENTIFIER_POINTER (ID_NODE)[1] == 'v' \
4442 && IDENTIFIER_POINTER (ID_NODE)[2] == 't' \
4443 && IDENTIFIER_POINTER (ID_NODE)[3] == JOINER)
4444
4445 #define TEMP_NAME_P(ID_NODE) \
4446 (!strncmp (IDENTIFIER_POINTER (ID_NODE), AUTO_TEMP_NAME, sizeof (AUTO_TEMP_NAME)-1))
4447 #define VFIELD_NAME_P(ID_NODE) \
4448 (!strncmp (IDENTIFIER_POINTER (ID_NODE), VFIELD_NAME, sizeof(VFIELD_NAME)-1))
4449
4450 #endif /* !defined(NO_DOLLAR_IN_LABEL) || !defined(NO_DOT_IN_LABEL) */
4451
4452 \f
4453 /* Nonzero if we're done parsing and into end-of-file activities. */
4454
4455 extern int at_eof;
4456
4457 /* A list of namespace-scope objects which have constructors or
4458 destructors which reside in the global scope. The decl is stored
4459 in the TREE_VALUE slot and the initializer is stored in the
4460 TREE_PURPOSE slot. */
4461 extern GTY(()) tree static_aggregates;
4462 /* Likewise, for thread local storage. */
4463 extern GTY(()) tree tls_aggregates;
4464
4465 enum overload_flags { NO_SPECIAL = 0, DTOR_FLAG, TYPENAME_FLAG };
4466
4467 /* These are uses as bits in flags passed to various functions to
4468 control their behavior. Despite the LOOKUP_ prefix, many of these
4469 do not control name lookup. ??? Functions using these flags should
4470 probably be modified to accept explicit boolean flags for the
4471 behaviors relevant to them. */
4472 /* Check for access violations. */
4473 #define LOOKUP_PROTECT (1 << 0)
4474 #define LOOKUP_NORMAL (LOOKUP_PROTECT)
4475 /* Even if the function found by lookup is a virtual function, it
4476 should be called directly. */
4477 #define LOOKUP_NONVIRTUAL (1 << 1)
4478 /* Non-converting (i.e., "explicit") constructors are not tried. This flag
4479 indicates that we are not performing direct-initialization. */
4480 #define LOOKUP_ONLYCONVERTING (1 << 2)
4481 #define LOOKUP_IMPLICIT (LOOKUP_NORMAL | LOOKUP_ONLYCONVERTING)
4482 /* If a temporary is created, it should be created so that it lives
4483 as long as the current variable bindings; otherwise it only lives
4484 until the end of the complete-expression. It also forces
4485 direct-initialization in cases where other parts of the compiler
4486 have already generated a temporary, such as reference
4487 initialization and the catch parameter. */
4488 #define DIRECT_BIND (1 << 3)
4489 /* We're performing a user-defined conversion, so more user-defined
4490 conversions are not permitted (only built-in conversions). */
4491 #define LOOKUP_NO_CONVERSION (1 << 4)
4492 /* The user has explicitly called a destructor. (Therefore, we do
4493 not need to check that the object is non-NULL before calling the
4494 destructor.) */
4495 #define LOOKUP_DESTRUCTOR (1 << 5)
4496 /* Do not permit references to bind to temporaries. */
4497 #define LOOKUP_NO_TEMP_BIND (1 << 6)
4498 /* Do not accept objects, and possibly namespaces. */
4499 #define LOOKUP_PREFER_TYPES (1 << 7)
4500 /* Do not accept objects, and possibly types. */
4501 #define LOOKUP_PREFER_NAMESPACES (1 << 8)
4502 /* Accept types or namespaces. */
4503 #define LOOKUP_PREFER_BOTH (LOOKUP_PREFER_TYPES | LOOKUP_PREFER_NAMESPACES)
4504 /* Return friend declarations and un-declared builtin functions.
4505 (Normally, these entities are registered in the symbol table, but
4506 not found by lookup.) */
4507 #define LOOKUP_HIDDEN (LOOKUP_PREFER_NAMESPACES << 1)
4508 /* Prefer that the lvalue be treated as an rvalue. */
4509 #define LOOKUP_PREFER_RVALUE (LOOKUP_HIDDEN << 1)
4510 /* We're inside an init-list, so narrowing conversions are ill-formed. */
4511 #define LOOKUP_NO_NARROWING (LOOKUP_PREFER_RVALUE << 1)
4512 /* We're looking up a constructor for list-initialization. */
4513 #define LOOKUP_LIST_INIT_CTOR (LOOKUP_NO_NARROWING << 1)
4514 /* This is the first parameter of a copy constructor. */
4515 #define LOOKUP_COPY_PARM (LOOKUP_LIST_INIT_CTOR << 1)
4516 /* We only want to consider list constructors. */
4517 #define LOOKUP_LIST_ONLY (LOOKUP_COPY_PARM << 1)
4518 /* Return after determining which function to call and checking access.
4519 Used by sythesized_method_walk to determine which functions will
4520 be called to initialize subobjects, in order to determine exception
4521 specification and possible implicit delete.
4522 This is kind of a hack, but exiting early avoids problems with trying
4523 to perform argument conversions when the class isn't complete yet. */
4524 #define LOOKUP_SPECULATIVE (LOOKUP_LIST_ONLY << 1)
4525 /* Used by calls from defaulted functions to limit the overload set to avoid
4526 cycles trying to declare them (core issue 1092). */
4527 #define LOOKUP_DEFAULTED (LOOKUP_SPECULATIVE << 1)
4528 /* Used in calls to store_init_value to suppress its usual call to
4529 digest_init. */
4530 #define LOOKUP_ALREADY_DIGESTED (LOOKUP_DEFAULTED << 1)
4531 /* An instantiation with explicit template arguments. */
4532 #define LOOKUP_EXPLICIT_TMPL_ARGS (LOOKUP_ALREADY_DIGESTED << 1)
4533 /* Like LOOKUP_NO_TEMP_BIND, but also prevent binding to xvalues. */
4534 #define LOOKUP_NO_RVAL_BIND (LOOKUP_EXPLICIT_TMPL_ARGS << 1)
4535 /* Used by case_conversion to disregard non-integral conversions. */
4536 #define LOOKUP_NO_NON_INTEGRAL (LOOKUP_NO_RVAL_BIND << 1)
4537 /* Used for delegating constructors in order to diagnose self-delegation. */
4538 #define LOOKUP_DELEGATING_CONS (LOOKUP_NO_NON_INTEGRAL << 1)
4539
4540 #define LOOKUP_NAMESPACES_ONLY(F) \
4541 (((F) & LOOKUP_PREFER_NAMESPACES) && !((F) & LOOKUP_PREFER_TYPES))
4542 #define LOOKUP_TYPES_ONLY(F) \
4543 (!((F) & LOOKUP_PREFER_NAMESPACES) && ((F) & LOOKUP_PREFER_TYPES))
4544 #define LOOKUP_QUALIFIERS_ONLY(F) ((F) & LOOKUP_PREFER_BOTH)
4545
4546
4547 /* These flags are used by the conversion code.
4548 CONV_IMPLICIT : Perform implicit conversions (standard and user-defined).
4549 CONV_STATIC : Perform the explicit conversions for static_cast.
4550 CONV_CONST : Perform the explicit conversions for const_cast.
4551 CONV_REINTERPRET: Perform the explicit conversions for reinterpret_cast.
4552 CONV_PRIVATE : Perform upcasts to private bases.
4553 CONV_FORCE_TEMP : Require a new temporary when converting to the same
4554 aggregate type. */
4555
4556 #define CONV_IMPLICIT 1
4557 #define CONV_STATIC 2
4558 #define CONV_CONST 4
4559 #define CONV_REINTERPRET 8
4560 #define CONV_PRIVATE 16
4561 /* #define CONV_NONCONVERTING 32 */
4562 #define CONV_FORCE_TEMP 64
4563 #define CONV_OLD_CONVERT (CONV_IMPLICIT | CONV_STATIC | CONV_CONST \
4564 | CONV_REINTERPRET)
4565 #define CONV_C_CAST (CONV_IMPLICIT | CONV_STATIC | CONV_CONST \
4566 | CONV_REINTERPRET | CONV_PRIVATE | CONV_FORCE_TEMP)
4567
4568 /* Used by build_expr_type_conversion to indicate which types are
4569 acceptable as arguments to the expression under consideration. */
4570
4571 #define WANT_INT 1 /* integer types, including bool */
4572 #define WANT_FLOAT 2 /* floating point types */
4573 #define WANT_ENUM 4 /* enumerated types */
4574 #define WANT_POINTER 8 /* pointer types */
4575 #define WANT_NULL 16 /* null pointer constant */
4576 #define WANT_VECTOR_OR_COMPLEX 32 /* vector or complex types */
4577 #define WANT_ARITH (WANT_INT | WANT_FLOAT | WANT_VECTOR_OR_COMPLEX)
4578
4579 /* Used with comptypes, and related functions, to guide type
4580 comparison. */
4581
4582 #define COMPARE_STRICT 0 /* Just check if the types are the
4583 same. */
4584 #define COMPARE_BASE 1 /* Check to see if the second type is
4585 derived from the first. */
4586 #define COMPARE_DERIVED 2 /* Like COMPARE_BASE, but in
4587 reverse. */
4588 #define COMPARE_REDECLARATION 4 /* The comparison is being done when
4589 another declaration of an existing
4590 entity is seen. */
4591 #define COMPARE_STRUCTURAL 8 /* The comparison is intended to be
4592 structural. The actual comparison
4593 will be identical to
4594 COMPARE_STRICT. */
4595
4596 /* Used with push_overloaded_decl. */
4597 #define PUSH_GLOBAL 0 /* Push the DECL into namespace scope,
4598 regardless of the current scope. */
4599 #define PUSH_LOCAL 1 /* Push the DECL into the current
4600 scope. */
4601 #define PUSH_USING 2 /* We are pushing this DECL as the
4602 result of a using declaration. */
4603
4604 /* Used with start function. */
4605 #define SF_DEFAULT 0 /* No flags. */
4606 #define SF_PRE_PARSED 1 /* The function declaration has
4607 already been parsed. */
4608 #define SF_INCLASS_INLINE 2 /* The function is an inline, defined
4609 in the class body. */
4610
4611 /* Used with start_decl's initialized parameter. */
4612 #define SD_UNINITIALIZED 0
4613 #define SD_INITIALIZED 1
4614 #define SD_DEFAULTED 2
4615 #define SD_DELETED 3
4616
4617 /* Returns nonzero iff TYPE1 and TYPE2 are the same type, or if TYPE2
4618 is derived from TYPE1, or if TYPE2 is a pointer (reference) to a
4619 class derived from the type pointed to (referred to) by TYPE1. */
4620 #define same_or_base_type_p(TYPE1, TYPE2) \
4621 comptypes ((TYPE1), (TYPE2), COMPARE_BASE)
4622
4623 /* These macros are used to access a TEMPLATE_PARM_INDEX. */
4624 #define TEMPLATE_PARM_INDEX_CAST(NODE) \
4625 ((template_parm_index*)TEMPLATE_PARM_INDEX_CHECK (NODE))
4626 #define TEMPLATE_PARM_IDX(NODE) (TEMPLATE_PARM_INDEX_CAST (NODE)->index)
4627 #define TEMPLATE_PARM_LEVEL(NODE) (TEMPLATE_PARM_INDEX_CAST (NODE)->level)
4628 #define TEMPLATE_PARM_DESCENDANTS(NODE) (TREE_CHAIN (NODE))
4629 #define TEMPLATE_PARM_ORIG_LEVEL(NODE) (TEMPLATE_PARM_INDEX_CAST (NODE)->orig_level)
4630 #define TEMPLATE_PARM_DECL(NODE) (TEMPLATE_PARM_INDEX_CAST (NODE)->decl)
4631 #define TEMPLATE_PARM_PARAMETER_PACK(NODE) \
4632 (TREE_LANG_FLAG_0 (TEMPLATE_PARM_INDEX_CHECK (NODE)))
4633
4634 /* These macros are for accessing the fields of TEMPLATE_TYPE_PARM,
4635 TEMPLATE_TEMPLATE_PARM and BOUND_TEMPLATE_TEMPLATE_PARM nodes. */
4636 #define TEMPLATE_TYPE_PARM_INDEX(NODE) \
4637 (TYPE_VALUES_RAW (TREE_CHECK3 ((NODE), TEMPLATE_TYPE_PARM, \
4638 TEMPLATE_TEMPLATE_PARM, \
4639 BOUND_TEMPLATE_TEMPLATE_PARM)))
4640 #define TEMPLATE_TYPE_IDX(NODE) \
4641 (TEMPLATE_PARM_IDX (TEMPLATE_TYPE_PARM_INDEX (NODE)))
4642 #define TEMPLATE_TYPE_LEVEL(NODE) \
4643 (TEMPLATE_PARM_LEVEL (TEMPLATE_TYPE_PARM_INDEX (NODE)))
4644 #define TEMPLATE_TYPE_ORIG_LEVEL(NODE) \
4645 (TEMPLATE_PARM_ORIG_LEVEL (TEMPLATE_TYPE_PARM_INDEX (NODE)))
4646 #define TEMPLATE_TYPE_DECL(NODE) \
4647 (TEMPLATE_PARM_DECL (TEMPLATE_TYPE_PARM_INDEX (NODE)))
4648 #define TEMPLATE_TYPE_PARAMETER_PACK(NODE) \
4649 (TEMPLATE_PARM_PARAMETER_PACK (TEMPLATE_TYPE_PARM_INDEX (NODE)))
4650
4651 /* True iff this TEMPLATE_TYPE_PARM represents decltype(auto). */
4652 #define AUTO_IS_DECLTYPE(NODE) \
4653 (TYPE_LANG_FLAG_5 (TEMPLATE_TYPE_PARM_CHECK (NODE)))
4654
4655 /* These constants can used as bit flags in the process of tree formatting.
4656
4657 TFF_PLAIN_IDENTIFIER: unqualified part of a name.
4658 TFF_SCOPE: include the class and namespace scope of the name.
4659 TFF_CHASE_TYPEDEF: print the original type-id instead of the typedef-name.
4660 TFF_DECL_SPECIFIERS: print decl-specifiers.
4661 TFF_CLASS_KEY_OR_ENUM: precede a class-type name (resp. enum name) with
4662 a class-key (resp. `enum').
4663 TFF_RETURN_TYPE: include function return type.
4664 TFF_FUNCTION_DEFAULT_ARGUMENTS: include function default parameter values.
4665 TFF_EXCEPTION_SPECIFICATION: show function exception specification.
4666 TFF_TEMPLATE_HEADER: show the template<...> header in a
4667 template-declaration.
4668 TFF_TEMPLATE_NAME: show only template-name.
4669 TFF_EXPR_IN_PARENS: parenthesize expressions.
4670 TFF_NO_FUNCTION_ARGUMENTS: don't show function arguments.
4671 TFF_UNQUALIFIED_NAME: do not print the qualifying scope of the
4672 top-level entity.
4673 TFF_NO_OMIT_DEFAULT_TEMPLATE_ARGUMENTS: do not omit template arguments
4674 identical to their defaults.
4675 TFF_NO_TEMPLATE_BINDINGS: do not print information about the template
4676 arguments for a function template specialization. */
4677
4678 #define TFF_PLAIN_IDENTIFIER (0)
4679 #define TFF_SCOPE (1)
4680 #define TFF_CHASE_TYPEDEF (1 << 1)
4681 #define TFF_DECL_SPECIFIERS (1 << 2)
4682 #define TFF_CLASS_KEY_OR_ENUM (1 << 3)
4683 #define TFF_RETURN_TYPE (1 << 4)
4684 #define TFF_FUNCTION_DEFAULT_ARGUMENTS (1 << 5)
4685 #define TFF_EXCEPTION_SPECIFICATION (1 << 6)
4686 #define TFF_TEMPLATE_HEADER (1 << 7)
4687 #define TFF_TEMPLATE_NAME (1 << 8)
4688 #define TFF_EXPR_IN_PARENS (1 << 9)
4689 #define TFF_NO_FUNCTION_ARGUMENTS (1 << 10)
4690 #define TFF_UNQUALIFIED_NAME (1 << 11)
4691 #define TFF_NO_OMIT_DEFAULT_TEMPLATE_ARGUMENTS (1 << 12)
4692 #define TFF_NO_TEMPLATE_BINDINGS (1 << 13)
4693
4694 /* Returns the TEMPLATE_DECL associated to a TEMPLATE_TEMPLATE_PARM
4695 node. */
4696 #define TEMPLATE_TEMPLATE_PARM_TEMPLATE_DECL(NODE) \
4697 ((TREE_CODE (NODE) == BOUND_TEMPLATE_TEMPLATE_PARM) \
4698 ? TYPE_TI_TEMPLATE (NODE) \
4699 : TYPE_NAME (NODE))
4700
4701 /* in lex.c */
4702
4703 extern void init_reswords (void);
4704
4705 typedef struct GTY(()) operator_name_info_t {
4706 /* The IDENTIFIER_NODE for the operator. */
4707 tree identifier;
4708 /* The name of the operator. */
4709 const char *name;
4710 /* The mangled name of the operator. */
4711 const char *mangled_name;
4712 /* The arity of the operator. */
4713 int arity;
4714 } operator_name_info_t;
4715
4716 /* A mapping from tree codes to operator name information. */
4717 extern GTY(()) operator_name_info_t operator_name_info
4718 [(int) MAX_TREE_CODES];
4719 /* Similar, but for assignment operators. */
4720 extern GTY(()) operator_name_info_t assignment_operator_name_info
4721 [(int) MAX_TREE_CODES];
4722
4723 /* A type-qualifier, or bitmask therefore, using the TYPE_QUAL
4724 constants. */
4725
4726 typedef int cp_cv_quals;
4727
4728 /* Non-static member functions have an optional virt-specifier-seq.
4729 There is a VIRT_SPEC value for each virt-specifier.
4730 They can be combined by bitwise-or to form the complete set of
4731 virt-specifiers for a member function. */
4732 enum virt_specifier
4733 {
4734 VIRT_SPEC_UNSPECIFIED = 0x0,
4735 VIRT_SPEC_FINAL = 0x1,
4736 VIRT_SPEC_OVERRIDE = 0x2
4737 };
4738
4739 /* A type-qualifier, or bitmask therefore, using the VIRT_SPEC
4740 constants. */
4741
4742 typedef int cp_virt_specifiers;
4743
4744 /* Wherever there is a function-cv-qual, there could also be a ref-qualifier:
4745
4746 [dcl.fct]
4747 The return type, the parameter-type-list, the ref-qualifier, and
4748 the cv-qualifier-seq, but not the default arguments or the exception
4749 specification, are part of the function type.
4750
4751 REF_QUAL_NONE Ordinary member function with no ref-qualifier
4752 REF_QUAL_LVALUE Member function with the &-ref-qualifier
4753 REF_QUAL_RVALUE Member function with the &&-ref-qualifier */
4754
4755 enum cp_ref_qualifier {
4756 REF_QUAL_NONE = 0,
4757 REF_QUAL_LVALUE = 1,
4758 REF_QUAL_RVALUE = 2
4759 };
4760
4761 /* A storage class. */
4762
4763 typedef enum cp_storage_class {
4764 /* sc_none must be zero so that zeroing a cp_decl_specifier_seq
4765 sets the storage_class field to sc_none. */
4766 sc_none = 0,
4767 sc_auto,
4768 sc_register,
4769 sc_static,
4770 sc_extern,
4771 sc_mutable
4772 } cp_storage_class;
4773
4774 /* An individual decl-specifier. This is used to index the array of
4775 locations for the declspecs in struct cp_decl_specifier_seq
4776 below. */
4777
4778 typedef enum cp_decl_spec {
4779 ds_first,
4780 ds_signed = ds_first,
4781 ds_unsigned,
4782 ds_short,
4783 ds_long,
4784 ds_const,
4785 ds_volatile,
4786 ds_restrict,
4787 ds_inline,
4788 ds_virtual,
4789 ds_explicit,
4790 ds_friend,
4791 ds_typedef,
4792 ds_alias,
4793 ds_constexpr,
4794 ds_complex,
4795 ds_thread,
4796 ds_type_spec,
4797 ds_redefined_builtin_type_spec,
4798 ds_attribute,
4799 ds_std_attribute,
4800 ds_storage_class,
4801 ds_long_long,
4802 ds_last /* This enumerator must always be the last one. */
4803 } cp_decl_spec;
4804
4805 /* A decl-specifier-seq. */
4806
4807 typedef struct cp_decl_specifier_seq {
4808 /* An array of locations for the declaration sepecifiers, indexed by
4809 enum cp_decl_spec_word. */
4810 source_location locations[ds_last];
4811 /* The primary type, if any, given by the decl-specifier-seq.
4812 Modifiers, like "short", "const", and "unsigned" are not
4813 reflected here. This field will be a TYPE, unless a typedef-name
4814 was used, in which case it will be a TYPE_DECL. */
4815 tree type;
4816 /* The attributes, if any, provided with the specifier sequence. */
4817 tree attributes;
4818 /* The c++11 attributes that follows the type specifier. */
4819 tree std_attributes;
4820 /* If non-NULL, a built-in type that the user attempted to redefine
4821 to some other type. */
4822 tree redefined_builtin_type;
4823 /* The storage class specified -- or sc_none if no storage class was
4824 explicitly specified. */
4825 cp_storage_class storage_class;
4826 /* True iff TYPE_SPEC defines a class or enum. */
4827 BOOL_BITFIELD type_definition_p : 1;
4828 /* True iff multiple types were (erroneously) specified for this
4829 decl-specifier-seq. */
4830 BOOL_BITFIELD multiple_types_p : 1;
4831 /* True iff multiple storage classes were (erroneously) specified
4832 for this decl-specifier-seq or a combination of a storage class
4833 with a typedef specifier. */
4834 BOOL_BITFIELD conflicting_specifiers_p : 1;
4835 /* True iff at least one decl-specifier was found. */
4836 BOOL_BITFIELD any_specifiers_p : 1;
4837 /* True iff at least one type-specifier was found. */
4838 BOOL_BITFIELD any_type_specifiers_p : 1;
4839 /* True iff "int" was explicitly provided. */
4840 BOOL_BITFIELD explicit_int_p : 1;
4841 /* True iff "__int128" was explicitly provided. */
4842 BOOL_BITFIELD explicit_int128_p : 1;
4843 /* True iff "char" was explicitly provided. */
4844 BOOL_BITFIELD explicit_char_p : 1;
4845 /* True iff ds_thread is set for __thread, not thread_local. */
4846 BOOL_BITFIELD gnu_thread_keyword_p : 1;
4847 } cp_decl_specifier_seq;
4848
4849 /* The various kinds of declarators. */
4850
4851 typedef enum cp_declarator_kind {
4852 cdk_id,
4853 cdk_function,
4854 cdk_array,
4855 cdk_pointer,
4856 cdk_reference,
4857 cdk_ptrmem,
4858 cdk_error
4859 } cp_declarator_kind;
4860
4861 /* A declarator. */
4862
4863 typedef struct cp_declarator cp_declarator;
4864
4865 typedef struct cp_parameter_declarator cp_parameter_declarator;
4866
4867 /* A parameter, before it has been semantically analyzed. */
4868 struct cp_parameter_declarator {
4869 /* The next parameter, or NULL_TREE if none. */
4870 cp_parameter_declarator *next;
4871 /* The decl-specifiers-seq for the parameter. */
4872 cp_decl_specifier_seq decl_specifiers;
4873 /* The declarator for the parameter. */
4874 cp_declarator *declarator;
4875 /* The default-argument expression, or NULL_TREE, if none. */
4876 tree default_argument;
4877 /* True iff this is the first parameter in the list and the
4878 parameter sequence ends with an ellipsis. */
4879 bool ellipsis_p;
4880 };
4881
4882 /* A declarator. */
4883 struct cp_declarator {
4884 /* The kind of declarator. */
4885 ENUM_BITFIELD (cp_declarator_kind) kind : 4;
4886 /* Whether we parsed an ellipsis (`...') just before the declarator,
4887 to indicate this is a parameter pack. */
4888 BOOL_BITFIELD parameter_pack_p : 1;
4889 location_t id_loc; /* Currently only set for cdk_id and cdk_function. */
4890 /* GNU Attributes that apply to this declarator. If the declarator
4891 is a pointer or a reference, these attribute apply to the type
4892 pointed to. */
4893 tree attributes;
4894 /* Standard C++11 attributes that apply to this declarator. If the
4895 declarator is a pointer or a reference, these attributes apply
4896 to the pointer, rather than to the type pointed to. */
4897 tree std_attributes;
4898 /* For all but cdk_id and cdk_error, the contained declarator. For
4899 cdk_id and cdk_error, guaranteed to be NULL. */
4900 cp_declarator *declarator;
4901 union {
4902 /* For identifiers. */
4903 struct {
4904 /* If non-NULL, the qualifying scope (a NAMESPACE_DECL or
4905 *_TYPE) for this identifier. */
4906 tree qualifying_scope;
4907 /* The unqualified name of the entity -- an IDENTIFIER_NODE,
4908 BIT_NOT_EXPR, or TEMPLATE_ID_EXPR. */
4909 tree unqualified_name;
4910 /* If this is the name of a function, what kind of special
4911 function (if any). */
4912 special_function_kind sfk;
4913 } id;
4914 /* For functions. */
4915 struct {
4916 /* The parameters to the function as a TREE_LIST of decl/default. */
4917 tree parameters;
4918 /* The cv-qualifiers for the function. */
4919 cp_cv_quals qualifiers;
4920 /* The virt-specifiers for the function. */
4921 cp_virt_specifiers virt_specifiers;
4922 /* The ref-qualifier for the function. */
4923 cp_ref_qualifier ref_qualifier;
4924 /* The exception-specification for the function. */
4925 tree exception_specification;
4926 /* The late-specified return type, if any. */
4927 tree late_return_type;
4928 } function;
4929 /* For arrays. */
4930 struct {
4931 /* The bounds to the array. */
4932 tree bounds;
4933 } array;
4934 /* For cdk_pointer and cdk_ptrmem. */
4935 struct {
4936 /* The cv-qualifiers for the pointer. */
4937 cp_cv_quals qualifiers;
4938 /* For cdk_ptrmem, the class type containing the member. */
4939 tree class_type;
4940 } pointer;
4941 /* For cdk_reference */
4942 struct {
4943 /* The cv-qualifiers for the reference. These qualifiers are
4944 only used to diagnose ill-formed code. */
4945 cp_cv_quals qualifiers;
4946 /* Whether this is an rvalue reference */
4947 bool rvalue_ref;
4948 } reference;
4949 } u;
4950 };
4951
4952 /* A level of template instantiation. */
4953 struct GTY((chain_next ("%h.next"))) tinst_level {
4954 /* The immediately deeper level in the chain. */
4955 struct tinst_level *next;
4956
4957 /* The original node. Can be either a DECL (for a function or static
4958 data member) or a TYPE (for a class), depending on what we were
4959 asked to instantiate. */
4960 tree decl;
4961
4962 /* The location where the template is instantiated. */
4963 location_t locus;
4964
4965 /* errorcount+sorrycount when we pushed this level. */
4966 int errors;
4967
4968 /* True if the location is in a system header. */
4969 bool in_system_header_p;
4970 };
4971
4972 bool decl_spec_seq_has_spec_p (const cp_decl_specifier_seq *, cp_decl_spec);
4973
4974 /* Return the type of the `this' parameter of FNTYPE. */
4975
4976 inline tree
4977 type_of_this_parm (const_tree fntype)
4978 {
4979 function_args_iterator iter;
4980 gcc_assert (TREE_CODE (fntype) == METHOD_TYPE);
4981 function_args_iter_init (&iter, fntype);
4982 return function_args_iter_cond (&iter);
4983 }
4984
4985 /* Return the class of the `this' parameter of FNTYPE. */
4986
4987 inline tree
4988 class_of_this_parm (const_tree fntype)
4989 {
4990 return TREE_TYPE (type_of_this_parm (fntype));
4991 }
4992
4993 /* A parameter list indicating for a function with no parameters,
4994 e.g "int f(void)". */
4995 extern cp_parameter_declarator *no_parameters;
4996
4997 /* True if we saw "#pragma GCC java_exceptions". */
4998 extern bool pragma_java_exceptions;
4999
5000 /* in call.c */
5001 extern bool check_dtor_name (tree, tree);
5002 bool magic_varargs_p (tree);
5003
5004 extern tree build_conditional_expr (location_t, tree, tree, tree,
5005 tsubst_flags_t);
5006 extern tree build_addr_func (tree, tsubst_flags_t);
5007 extern void set_flags_from_callee (tree);
5008 extern tree build_call_a (tree, int, tree*);
5009 extern tree build_call_n (tree, int, ...);
5010 extern bool null_ptr_cst_p (tree);
5011 extern bool null_member_pointer_value_p (tree);
5012 extern bool sufficient_parms_p (const_tree);
5013 extern tree type_decays_to (tree);
5014 extern tree build_user_type_conversion (tree, tree, int,
5015 tsubst_flags_t);
5016 extern tree build_new_function_call (tree, vec<tree, va_gc> **, bool,
5017 tsubst_flags_t);
5018 extern tree build_operator_new_call (tree, vec<tree, va_gc> **, tree *,
5019 tree *, tree, tree *,
5020 tsubst_flags_t);
5021 extern tree build_new_method_call (tree, tree, vec<tree, va_gc> **,
5022 tree, int, tree *,
5023 tsubst_flags_t);
5024 extern tree build_special_member_call (tree, tree, vec<tree, va_gc> **,
5025 tree, int, tsubst_flags_t);
5026 extern tree build_new_op (location_t, enum tree_code,
5027 int, tree, tree, tree, tree *,
5028 tsubst_flags_t);
5029 extern tree build_op_call (tree, vec<tree, va_gc> **,
5030 tsubst_flags_t);
5031 extern tree build_op_delete_call (enum tree_code, tree, tree,
5032 bool, tree, tree,
5033 tsubst_flags_t);
5034 extern bool can_convert (tree, tree, tsubst_flags_t);
5035 extern bool can_convert_standard (tree, tree, tsubst_flags_t);
5036 extern bool can_convert_arg (tree, tree, tree, int,
5037 tsubst_flags_t);
5038 extern bool can_convert_arg_bad (tree, tree, tree, int,
5039 tsubst_flags_t);
5040 extern bool enforce_access (tree, tree, tree,
5041 tsubst_flags_t);
5042 extern void push_defarg_context (tree);
5043 extern void pop_defarg_context (void);
5044 extern tree convert_default_arg (tree, tree, tree, int,
5045 tsubst_flags_t);
5046 extern tree convert_arg_to_ellipsis (tree, tsubst_flags_t);
5047 extern tree build_x_va_arg (source_location, tree, tree);
5048 extern tree cxx_type_promotes_to (tree);
5049 extern tree type_passed_as (tree);
5050 extern tree convert_for_arg_passing (tree, tree, tsubst_flags_t);
5051 extern bool is_properly_derived_from (tree, tree);
5052 extern tree initialize_reference (tree, tree, int,
5053 tsubst_flags_t);
5054 extern tree extend_ref_init_temps (tree, tree, vec<tree, va_gc>**);
5055 extern tree make_temporary_var_for_ref_to_temp (tree, tree);
5056 extern bool type_has_extended_temps (tree);
5057 extern tree strip_top_quals (tree);
5058 extern bool reference_related_p (tree, tree);
5059 extern tree perform_implicit_conversion (tree, tree, tsubst_flags_t);
5060 extern tree perform_implicit_conversion_flags (tree, tree, tsubst_flags_t, int);
5061 extern tree build_integral_nontype_arg_conv (tree, tree, tsubst_flags_t);
5062 extern tree perform_direct_initialization_if_possible (tree, tree, bool,
5063 tsubst_flags_t);
5064 extern tree in_charge_arg_for_name (tree);
5065 extern tree build_cxx_call (tree, int, tree *,
5066 tsubst_flags_t);
5067 extern bool is_std_init_list (tree);
5068 extern bool is_list_ctor (tree);
5069 #ifdef ENABLE_CHECKING
5070 extern void validate_conversion_obstack (void);
5071 #endif /* ENABLE_CHECKING */
5072 extern void mark_versions_used (tree);
5073 extern tree get_function_version_dispatcher (tree);
5074
5075 /* in class.c */
5076 extern tree build_vfield_ref (tree, tree);
5077 extern tree build_base_path (enum tree_code, tree,
5078 tree, int, tsubst_flags_t);
5079 extern tree convert_to_base (tree, tree, bool, bool,
5080 tsubst_flags_t);
5081 extern tree convert_to_base_statically (tree, tree);
5082 extern tree build_vtbl_ref (tree, tree);
5083 extern tree build_vfn_ref (tree, tree);
5084 extern tree get_vtable_decl (tree, int);
5085 extern void resort_type_method_vec (void *, void *,
5086 gt_pointer_operator, void *);
5087 extern bool add_method (tree, tree, tree);
5088 extern bool currently_open_class (tree);
5089 extern tree currently_open_derived_class (tree);
5090 extern tree current_nonlambda_class_type (void);
5091 extern tree finish_struct (tree, tree);
5092 extern void finish_struct_1 (tree);
5093 extern int resolves_to_fixed_type_p (tree, int *);
5094 extern void init_class_processing (void);
5095 extern int is_empty_class (tree);
5096 extern bool is_really_empty_class (tree);
5097 extern void pushclass (tree);
5098 extern void popclass (void);
5099 extern void push_nested_class (tree);
5100 extern void pop_nested_class (void);
5101 extern int current_lang_depth (void);
5102 extern void push_lang_context (tree);
5103 extern void pop_lang_context (void);
5104 extern tree instantiate_type (tree, tree, tsubst_flags_t);
5105 extern void print_class_statistics (void);
5106 extern void build_self_reference (void);
5107 extern int same_signature_p (const_tree, const_tree);
5108 extern void maybe_add_class_template_decl_list (tree, tree, int);
5109 extern void unreverse_member_declarations (tree);
5110 extern void invalidate_class_lookup_cache (void);
5111 extern void maybe_note_name_used_in_class (tree, tree);
5112 extern void note_name_declared_in_class (tree, tree);
5113 extern tree get_vtbl_decl_for_binfo (tree);
5114 extern void debug_class (tree);
5115 extern void debug_thunks (tree);
5116 extern void set_linkage_according_to_type (tree, tree);
5117 extern void determine_key_method (tree);
5118 extern void check_for_override (tree, tree);
5119 extern void push_class_stack (void);
5120 extern void pop_class_stack (void);
5121 extern bool type_has_user_nondefault_constructor (tree);
5122 extern tree in_class_defaulted_default_constructor (tree);
5123 extern bool user_provided_p (tree);
5124 extern bool type_has_user_provided_constructor (tree);
5125 extern bool type_has_user_provided_default_constructor (tree);
5126 extern bool vbase_has_user_provided_move_assign (tree);
5127 extern tree default_init_uninitialized_part (tree);
5128 extern bool trivial_default_constructor_is_constexpr (tree);
5129 extern bool type_has_constexpr_default_constructor (tree);
5130 extern bool type_has_virtual_destructor (tree);
5131 extern bool type_has_move_constructor (tree);
5132 extern bool type_has_move_assign (tree);
5133 extern bool type_has_user_declared_move_constructor (tree);
5134 extern bool type_has_user_declared_move_assign(tree);
5135 extern bool type_build_ctor_call (tree);
5136 extern bool type_build_dtor_call (tree);
5137 extern void explain_non_literal_class (tree);
5138 extern void defaulted_late_check (tree);
5139 extern bool defaultable_fn_check (tree);
5140 extern void fixup_type_variants (tree);
5141 extern void fixup_attribute_variants (tree);
5142 extern tree* decl_cloned_function_p (const_tree, bool);
5143 extern void clone_function_decl (tree, int);
5144 extern void adjust_clone_args (tree);
5145 extern void deduce_noexcept_on_destructor (tree);
5146 extern void insert_late_enum_def_into_classtype_sorted_fields (tree, tree);
5147 extern bool uniquely_derived_from_p (tree, tree);
5148 extern bool publicly_uniquely_derived_p (tree, tree);
5149 extern tree common_enclosing_class (tree, tree);
5150
5151 /* in cvt.c */
5152 extern tree convert_to_reference (tree, tree, int, int, tree,
5153 tsubst_flags_t);
5154 extern tree convert_from_reference (tree);
5155 extern tree force_rvalue (tree, tsubst_flags_t);
5156 extern tree ocp_convert (tree, tree, int, int,
5157 tsubst_flags_t);
5158 extern tree cp_convert (tree, tree, tsubst_flags_t);
5159 extern tree cp_convert_and_check (tree, tree, tsubst_flags_t);
5160 extern tree cp_fold_convert (tree, tree);
5161 extern tree convert_to_void (tree, impl_conv_void,
5162 tsubst_flags_t);
5163 extern tree convert_force (tree, tree, int,
5164 tsubst_flags_t);
5165 extern tree build_expr_type_conversion (int, tree, bool);
5166 extern tree type_promotes_to (tree);
5167 extern tree perform_qualification_conversions (tree, tree);
5168
5169 /* in name-lookup.c */
5170 extern tree pushdecl (tree);
5171 extern tree pushdecl_maybe_friend (tree, bool);
5172 extern void maybe_push_cleanup_level (tree);
5173 extern tree pushtag (tree, tree, tag_scope);
5174 extern tree make_anon_name (void);
5175 extern tree pushdecl_top_level_maybe_friend (tree, bool);
5176 extern tree pushdecl_top_level_and_finish (tree, tree);
5177 extern tree check_for_out_of_scope_variable (tree);
5178 extern void dump (cp_binding_level &ref);
5179 extern void dump (cp_binding_level *ptr);
5180 extern void print_other_binding_stack (cp_binding_level *);
5181 extern tree maybe_push_decl (tree);
5182 extern tree current_decl_namespace (void);
5183
5184 /* decl.c */
5185 extern tree poplevel (int, int, int);
5186 extern void cxx_init_decl_processing (void);
5187 enum cp_tree_node_structure_enum cp_tree_node_structure
5188 (union lang_tree_node *);
5189 extern void finish_scope (void);
5190 extern void push_switch (tree);
5191 extern void pop_switch (void);
5192 extern tree make_lambda_name (void);
5193 extern int decls_match (tree, tree);
5194 extern tree duplicate_decls (tree, tree, bool);
5195 extern tree declare_local_label (tree);
5196 extern tree define_label (location_t, tree);
5197 extern void check_goto (tree);
5198 extern bool check_omp_return (void);
5199 extern tree make_typename_type (tree, tree, enum tag_types, tsubst_flags_t);
5200 extern tree make_unbound_class_template (tree, tree, tree, tsubst_flags_t);
5201 extern tree build_library_fn_ptr (const char *, tree, int);
5202 extern tree build_cp_library_fn_ptr (const char *, tree, int);
5203 extern tree push_library_fn (tree, tree, tree, int);
5204 extern tree push_void_library_fn (tree, tree, int);
5205 extern tree push_throw_library_fn (tree, tree);
5206 extern void warn_misplaced_attr_for_class_type (source_location location,
5207 tree class_type);
5208 extern tree check_tag_decl (cp_decl_specifier_seq *, bool);
5209 extern tree shadow_tag (cp_decl_specifier_seq *);
5210 extern tree groktypename (cp_decl_specifier_seq *, const cp_declarator *, bool);
5211 extern tree start_decl (const cp_declarator *, cp_decl_specifier_seq *, int, tree, tree, tree *);
5212 extern void start_decl_1 (tree, bool);
5213 extern bool check_array_initializer (tree, tree, tree);
5214 extern void cp_finish_decl (tree, tree, bool, tree, int);
5215 extern int cp_complete_array_type (tree *, tree, bool);
5216 extern int cp_complete_array_type_or_error (tree *, tree, bool, tsubst_flags_t);
5217 extern tree build_ptrmemfunc_type (tree);
5218 extern tree build_ptrmem_type (tree, tree);
5219 /* the grokdeclarator prototype is in decl.h */
5220 extern tree build_this_parm (tree, cp_cv_quals);
5221 extern int copy_fn_p (const_tree);
5222 extern bool move_fn_p (const_tree);
5223 extern bool move_signature_fn_p (const_tree);
5224 extern tree get_scope_of_declarator (const cp_declarator *);
5225 extern void grok_special_member_properties (tree);
5226 extern int grok_ctor_properties (const_tree, const_tree);
5227 extern bool grok_op_properties (tree, bool);
5228 extern tree xref_tag (enum tag_types, tree, tag_scope, bool);
5229 extern tree xref_tag_from_type (tree, tree, tag_scope);
5230 extern bool xref_basetypes (tree, tree);
5231 extern tree start_enum (tree, tree, tree, bool, bool *);
5232 extern void finish_enum_value_list (tree);
5233 extern void finish_enum (tree);
5234 extern void build_enumerator (tree, tree, tree, location_t);
5235 extern tree lookup_enumerator (tree, tree);
5236 extern bool start_preparsed_function (tree, tree, int);
5237 extern bool start_function (cp_decl_specifier_seq *,
5238 const cp_declarator *, tree);
5239 extern tree begin_function_body (void);
5240 extern void finish_function_body (tree);
5241 extern tree outer_curly_brace_block (tree);
5242 extern tree finish_function (int);
5243 extern tree grokmethod (cp_decl_specifier_seq *, const cp_declarator *, tree);
5244 extern void maybe_register_incomplete_var (tree);
5245 extern void maybe_commonize_var (tree);
5246 extern void complete_vars (tree);
5247 extern tree static_fn_type (tree);
5248 extern void revert_static_member_fn (tree);
5249 extern void fixup_anonymous_aggr (tree);
5250 extern tree compute_array_index_type (tree, tree, tsubst_flags_t);
5251 extern tree check_default_argument (tree, tree, tsubst_flags_t);
5252 typedef int (*walk_namespaces_fn) (tree, void *);
5253 extern int walk_namespaces (walk_namespaces_fn,
5254 void *);
5255 extern int wrapup_globals_for_namespace (tree, void *);
5256 extern tree create_implicit_typedef (tree, tree);
5257 extern int local_variable_p (const_tree);
5258 extern tree register_dtor_fn (tree);
5259 extern tmpl_spec_kind current_tmpl_spec_kind (int);
5260 extern tree cp_fname_init (const char *, tree *);
5261 extern tree cxx_builtin_function (tree decl);
5262 extern tree cxx_builtin_function_ext_scope (tree decl);
5263 extern tree check_elaborated_type_specifier (enum tag_types, tree, bool);
5264 extern void warn_extern_redeclared_static (tree, tree);
5265 extern tree cxx_comdat_group (tree);
5266 extern bool cp_missing_noreturn_ok_p (tree);
5267 extern void initialize_artificial_var (tree, vec<constructor_elt, va_gc> *);
5268 extern tree check_var_type (tree, tree);
5269 extern tree reshape_init (tree, tree, tsubst_flags_t);
5270 extern tree next_initializable_field (tree);
5271 extern tree fndecl_declared_return_type (tree);
5272 extern bool undeduced_auto_decl (tree);
5273 extern void require_deduced_type (tree);
5274
5275 extern bool defer_mark_used_calls;
5276 extern GTY(()) vec<tree, va_gc> *deferred_mark_used_calls;
5277 extern tree finish_case_label (location_t, tree, tree);
5278 extern tree cxx_maybe_build_cleanup (tree, tsubst_flags_t);
5279
5280 /* in decl2.c */
5281 extern bool check_java_method (tree);
5282 extern tree build_memfn_type (tree, tree, cp_cv_quals, cp_ref_qualifier);
5283 extern tree build_pointer_ptrmemfn_type (tree);
5284 extern tree change_return_type (tree, tree);
5285 extern void maybe_retrofit_in_chrg (tree);
5286 extern void maybe_make_one_only (tree);
5287 extern bool vague_linkage_p (tree);
5288 extern void grokclassfn (tree, tree,
5289 enum overload_flags);
5290 extern tree grok_array_decl (location_t, tree, tree, bool);
5291 extern tree delete_sanity (tree, tree, bool, int, tsubst_flags_t);
5292 extern tree check_classfn (tree, tree, tree);
5293 extern void check_member_template (tree);
5294 extern tree grokfield (const cp_declarator *, cp_decl_specifier_seq *,
5295 tree, bool, tree, tree);
5296 extern tree grokbitfield (const cp_declarator *, cp_decl_specifier_seq *,
5297 tree, tree);
5298 extern tree cp_reconstruct_complex_type (tree, tree);
5299 extern void cplus_decl_attributes (tree *, tree, int);
5300 extern void finish_anon_union (tree);
5301 extern void cp_write_global_declarations (void);
5302 extern tree coerce_new_type (tree);
5303 extern tree coerce_delete_type (tree);
5304 extern void comdat_linkage (tree);
5305 extern void determine_visibility (tree);
5306 extern void constrain_class_visibility (tree);
5307 extern void import_export_decl (tree);
5308 extern tree build_cleanup (tree);
5309 extern tree build_offset_ref_call_from_tree (tree, vec<tree, va_gc> **,
5310 tsubst_flags_t);
5311 extern bool decl_constant_var_p (tree);
5312 extern bool decl_maybe_constant_var_p (tree);
5313 extern void check_default_args (tree);
5314 extern bool mark_used (tree);
5315 extern bool mark_used (tree, tsubst_flags_t);
5316 extern void finish_static_data_member_decl (tree, tree, bool, tree, int);
5317 extern tree cp_build_parm_decl (tree, tree);
5318 extern tree get_guard (tree);
5319 extern tree get_guard_cond (tree);
5320 extern tree set_guard (tree);
5321 extern tree get_tls_wrapper_fn (tree);
5322 extern void mark_needed (tree);
5323 extern bool decl_needed_p (tree);
5324 extern void note_vague_linkage_fn (tree);
5325 extern tree build_artificial_parm (tree, tree);
5326 extern bool possibly_inlined_p (tree);
5327 extern int parm_index (tree);
5328 extern tree vtv_start_verification_constructor_init_function (void);
5329 extern tree vtv_finish_verification_constructor_init_function (tree);
5330 extern bool cp_omp_mappable_type (tree);
5331
5332 /* in error.c */
5333 extern void init_error (void);
5334 extern const char *type_as_string (tree, int);
5335 extern const char *type_as_string_translate (tree, int);
5336 extern const char *decl_as_string (tree, int);
5337 extern const char *decl_as_string_translate (tree, int);
5338 extern const char *decl_as_dwarf_string (tree, int);
5339 extern const char *expr_as_string (tree, int);
5340 extern const char *lang_decl_name (tree, int, bool);
5341 extern const char *lang_decl_dwarf_name (tree, int, bool);
5342 extern const char *language_to_string (enum languages);
5343 extern const char *class_key_or_enum_as_string (tree);
5344 extern void print_instantiation_context (void);
5345 extern void maybe_warn_variadic_templates (void);
5346 extern void maybe_warn_cpp0x (cpp0x_warn_str str);
5347 extern bool pedwarn_cxx98 (location_t, int, const char *, ...) ATTRIBUTE_GCC_DIAG(3,4);
5348 extern location_t location_of (tree);
5349 extern void qualified_name_lookup_error (tree, tree, tree,
5350 location_t);
5351
5352 /* in except.c */
5353 extern void init_exception_processing (void);
5354 extern tree expand_start_catch_block (tree);
5355 extern void expand_end_catch_block (void);
5356 extern tree build_exc_ptr (void);
5357 extern tree build_throw (tree);
5358 extern int nothrow_libfn_p (const_tree);
5359 extern void check_handlers (tree);
5360 extern tree finish_noexcept_expr (tree, tsubst_flags_t);
5361 extern bool expr_noexcept_p (tree, tsubst_flags_t);
5362 extern void perform_deferred_noexcept_checks (void);
5363 extern bool nothrow_spec_p (const_tree);
5364 extern bool type_noexcept_p (const_tree);
5365 extern bool type_throw_all_p (const_tree);
5366 extern tree build_noexcept_spec (tree, int);
5367 extern void choose_personality_routine (enum languages);
5368 extern tree build_must_not_throw_expr (tree,tree);
5369 extern tree eh_type_info (tree);
5370 extern tree begin_eh_spec_block (void);
5371 extern void finish_eh_spec_block (tree, tree);
5372 extern tree build_eh_type_type (tree);
5373 extern tree cp_protect_cleanup_actions (void);
5374 extern tree create_try_catch_expr (tree, tree);
5375
5376 /* in expr.c */
5377 extern tree cplus_expand_constant (tree);
5378 extern tree mark_rvalue_use (tree);
5379 extern tree mark_lvalue_use (tree);
5380 extern tree mark_type_use (tree);
5381 extern void mark_exp_read (tree);
5382
5383 /* friend.c */
5384 extern int is_friend (tree, tree);
5385 extern void make_friend_class (tree, tree, bool);
5386 extern void add_friend (tree, tree, bool);
5387 extern tree do_friend (tree, tree, tree, tree, enum overload_flags, bool);
5388
5389 /* in init.c */
5390 extern tree expand_member_init (tree);
5391 extern void emit_mem_initializers (tree);
5392 extern tree build_aggr_init (tree, tree, int,
5393 tsubst_flags_t);
5394 extern int is_class_type (tree, int);
5395 extern tree get_type_value (tree);
5396 extern tree build_zero_init (tree, tree, bool);
5397 extern tree build_value_init (tree, tsubst_flags_t);
5398 extern tree build_value_init_noctor (tree, tsubst_flags_t);
5399 extern tree build_offset_ref (tree, tree, bool,
5400 tsubst_flags_t);
5401 extern tree throw_bad_array_new_length (void);
5402 extern tree throw_bad_array_length (void);
5403 extern tree build_new (vec<tree, va_gc> **, tree, tree,
5404 vec<tree, va_gc> **, int,
5405 tsubst_flags_t);
5406 extern tree get_temp_regvar (tree, tree);
5407 extern tree build_vec_init (tree, tree, tree, bool, int,
5408 tsubst_flags_t);
5409 extern tree build_delete (tree, tree,
5410 special_function_kind,
5411 int, int, tsubst_flags_t);
5412 extern void push_base_cleanups (void);
5413 extern tree build_vec_delete (tree, tree,
5414 special_function_kind, int,
5415 tsubst_flags_t);
5416 extern tree create_temporary_var (tree);
5417 extern void initialize_vtbl_ptrs (tree);
5418 extern tree build_java_class_ref (tree);
5419 extern tree integral_constant_value (tree);
5420 extern tree decl_constant_value_safe (tree);
5421 extern int diagnose_uninitialized_cst_or_ref_member (tree, bool, bool);
5422 extern tree build_vtbl_address (tree);
5423
5424 /* in lex.c */
5425 extern void cxx_dup_lang_specific_decl (tree);
5426 extern void yyungetc (int, int);
5427
5428 extern tree unqualified_name_lookup_error (tree);
5429 extern tree unqualified_fn_lookup_error (tree);
5430 extern tree build_lang_decl (enum tree_code, tree, tree);
5431 extern tree build_lang_decl_loc (location_t, enum tree_code, tree, tree);
5432 extern void retrofit_lang_decl (tree);
5433 extern tree copy_decl (tree);
5434 extern tree copy_type (tree);
5435 extern tree cxx_make_type (enum tree_code);
5436 extern tree make_class_type (enum tree_code);
5437 extern bool cxx_init (void);
5438 extern void cxx_finish (void);
5439 extern bool in_main_input_context (void);
5440
5441 /* in method.c */
5442 extern void init_method (void);
5443 extern tree make_thunk (tree, bool, tree, tree);
5444 extern void finish_thunk (tree);
5445 extern void use_thunk (tree, bool);
5446 extern bool trivial_fn_p (tree);
5447 extern bool maybe_explain_implicit_delete (tree);
5448 extern void explain_implicit_non_constexpr (tree);
5449 extern void deduce_inheriting_ctor (tree);
5450 extern void synthesize_method (tree);
5451 extern tree lazily_declare_fn (special_function_kind,
5452 tree);
5453 extern tree skip_artificial_parms_for (const_tree, tree);
5454 extern int num_artificial_parms_for (const_tree);
5455 extern tree make_alias_for (tree, tree);
5456 extern tree get_copy_ctor (tree, tsubst_flags_t);
5457 extern tree get_copy_assign (tree);
5458 extern tree get_default_ctor (tree);
5459 extern tree get_dtor (tree, tsubst_flags_t);
5460 extern tree locate_ctor (tree);
5461 extern tree implicitly_declare_fn (special_function_kind, tree,
5462 bool, tree, tree);
5463
5464 /* In optimize.c */
5465 extern bool maybe_clone_body (tree);
5466
5467 /* in pt.c */
5468 extern bool check_template_shadow (tree);
5469 extern tree get_innermost_template_args (tree, int);
5470 extern void maybe_begin_member_template_processing (tree);
5471 extern void maybe_end_member_template_processing (void);
5472 extern tree finish_member_template_decl (tree);
5473 extern void begin_template_parm_list (void);
5474 extern bool begin_specialization (void);
5475 extern void reset_specialization (void);
5476 extern void end_specialization (void);
5477 extern void begin_explicit_instantiation (void);
5478 extern void end_explicit_instantiation (void);
5479 extern tree check_explicit_specialization (tree, tree, int, int);
5480 extern int num_template_headers_for_class (tree);
5481 extern void check_template_variable (tree);
5482 extern tree make_auto (void);
5483 extern tree make_decltype_auto (void);
5484 extern tree do_auto_deduction (tree, tree, tree);
5485 extern tree type_uses_auto (tree);
5486 extern tree type_uses_auto_or_concept (tree);
5487 extern void append_type_to_template_for_access_check (tree, tree, tree,
5488 location_t);
5489 extern tree convert_generic_types_to_packs (tree, int, int);
5490 extern tree splice_late_return_type (tree, tree);
5491 extern bool is_auto (const_tree);
5492 extern bool is_auto_or_concept (const_tree);
5493 extern tree process_template_parm (tree, location_t, tree,
5494 bool, bool);
5495 extern tree end_template_parm_list (tree);
5496 extern void end_template_decl (void);
5497 extern tree maybe_update_decl_type (tree, tree);
5498 extern bool check_default_tmpl_args (tree, tree, bool, bool, int);
5499 extern tree push_template_decl (tree);
5500 extern tree push_template_decl_real (tree, bool);
5501 extern tree add_inherited_template_parms (tree, tree);
5502 extern bool redeclare_class_template (tree, tree);
5503 extern tree lookup_template_class (tree, tree, tree, tree,
5504 int, tsubst_flags_t);
5505 extern tree lookup_template_function (tree, tree);
5506 extern int uses_template_parms (tree);
5507 extern int uses_template_parms_level (tree, int);
5508 extern bool in_template_function (void);
5509 extern tree instantiate_class_template (tree);
5510 extern tree instantiate_template (tree, tree, tsubst_flags_t);
5511 extern tree fn_type_unification (tree, tree, tree,
5512 const tree *, unsigned int,
5513 tree, unification_kind_t, int,
5514 bool, bool);
5515 extern void mark_decl_instantiated (tree, int);
5516 extern int more_specialized_fn (tree, tree, int);
5517 extern void do_decl_instantiation (tree, tree);
5518 extern void do_type_instantiation (tree, tree, tsubst_flags_t);
5519 extern bool always_instantiate_p (tree);
5520 extern void maybe_instantiate_noexcept (tree);
5521 extern tree instantiate_decl (tree, int, bool);
5522 extern int comp_template_parms (const_tree, const_tree);
5523 extern bool uses_parameter_packs (tree);
5524 extern bool template_parameter_pack_p (const_tree);
5525 extern bool function_parameter_pack_p (const_tree);
5526 extern bool function_parameter_expanded_from_pack_p (tree, tree);
5527 extern tree make_pack_expansion (tree);
5528 extern bool check_for_bare_parameter_packs (tree);
5529 extern tree build_template_info (tree, tree);
5530 extern tree get_template_info (const_tree);
5531 extern vec<qualified_typedef_usage_t, va_gc> *get_types_needing_access_check (tree);
5532 extern int template_class_depth (tree);
5533 extern int is_specialization_of (tree, tree);
5534 extern bool is_specialization_of_friend (tree, tree);
5535 extern tree get_pattern_parm (tree, tree);
5536 extern int comp_template_args (tree, tree);
5537 extern tree maybe_process_partial_specialization (tree);
5538 extern tree most_specialized_instantiation (tree);
5539 extern void print_candidates (tree);
5540 extern void instantiate_pending_templates (int);
5541 extern tree tsubst_default_argument (tree, tree, tree,
5542 tsubst_flags_t);
5543 extern tree tsubst (tree, tree, tsubst_flags_t, tree);
5544 extern tree tsubst_copy_and_build (tree, tree, tsubst_flags_t,
5545 tree, bool, bool);
5546 extern tree most_general_template (tree);
5547 extern tree get_mostly_instantiated_function_type (tree);
5548 extern int problematic_instantiation_changed (void);
5549 extern void record_last_problematic_instantiation (void);
5550 extern struct tinst_level *current_instantiation(void);
5551 extern tree maybe_get_template_decl_from_type_decl (tree);
5552 extern int processing_template_parmlist;
5553 extern bool dependent_type_p (tree);
5554 extern bool dependent_scope_p (tree);
5555 extern bool any_dependent_template_arguments_p (const_tree);
5556 extern bool dependent_template_p (tree);
5557 extern bool dependent_template_id_p (tree, tree);
5558 extern bool type_dependent_expression_p (tree);
5559 extern bool any_type_dependent_arguments_p (const vec<tree, va_gc> *);
5560 extern bool any_type_dependent_elements_p (const_tree);
5561 extern bool type_dependent_expression_p_push (tree);
5562 extern bool value_dependent_expression_p (tree);
5563 extern bool instantiation_dependent_expression_p (tree);
5564 extern bool any_value_dependent_elements_p (const_tree);
5565 extern bool dependent_omp_for_p (tree, tree, tree, tree);
5566 extern tree resolve_typename_type (tree, bool);
5567 extern tree template_for_substitution (tree);
5568 extern tree build_non_dependent_expr (tree);
5569 extern void make_args_non_dependent (vec<tree, va_gc> *);
5570 extern bool reregister_specialization (tree, tree, tree);
5571 extern tree fold_non_dependent_expr (tree);
5572 extern tree fold_non_dependent_expr_sfinae (tree, tsubst_flags_t);
5573 extern bool alias_type_or_template_p (tree);
5574 extern bool alias_template_specialization_p (const_tree);
5575 extern bool explicit_class_specialization_p (tree);
5576 extern int push_tinst_level (tree);
5577 extern void pop_tinst_level (void);
5578 extern struct tinst_level *outermost_tinst_level(void);
5579 extern void init_template_processing (void);
5580 extern void print_template_statistics (void);
5581 bool template_template_parameter_p (const_tree);
5582 bool template_type_parameter_p (const_tree);
5583 extern bool primary_template_instantiation_p (const_tree);
5584 extern tree get_primary_template_innermost_parameters (const_tree);
5585 extern tree get_template_parms_at_level (tree, int);
5586 extern tree get_template_innermost_arguments (const_tree);
5587 extern tree get_template_argument_pack_elems (const_tree);
5588 extern tree get_function_template_decl (const_tree);
5589 extern tree resolve_nondeduced_context (tree);
5590 extern hashval_t iterative_hash_template_arg (tree arg, hashval_t val);
5591
5592 /* in repo.c */
5593 extern void init_repo (void);
5594 extern int repo_emit_p (tree);
5595 extern bool repo_export_class_p (const_tree);
5596 extern void finish_repo (void);
5597
5598 /* in rtti.c */
5599 /* A vector of all tinfo decls that haven't been emitted yet. */
5600 extern GTY(()) vec<tree, va_gc> *unemitted_tinfo_decls;
5601
5602 extern void init_rtti_processing (void);
5603 extern tree build_typeid (tree, tsubst_flags_t);
5604 extern tree get_tinfo_decl (tree);
5605 extern tree get_typeid (tree, tsubst_flags_t);
5606 extern tree build_headof (tree);
5607 extern tree build_dynamic_cast (tree, tree, tsubst_flags_t);
5608 extern void emit_support_tinfos (void);
5609 extern bool emit_tinfo_decl (tree);
5610
5611 /* in search.c */
5612 extern bool accessible_base_p (tree, tree, bool);
5613 extern tree lookup_base (tree, tree, base_access,
5614 base_kind *, tsubst_flags_t);
5615 extern tree dcast_base_hint (tree, tree);
5616 extern int accessible_p (tree, tree, bool);
5617 extern int accessible_in_template_p (tree, tree);
5618 extern tree lookup_field_1 (tree, tree, bool);
5619 extern tree lookup_field (tree, tree, int, bool);
5620 extern int lookup_fnfields_1 (tree, tree);
5621 extern tree lookup_fnfields_slot (tree, tree);
5622 extern tree lookup_fnfields_slot_nolazy (tree, tree);
5623 extern int class_method_index_for_fn (tree, tree);
5624 extern tree lookup_fnfields (tree, tree, int);
5625 extern tree lookup_member (tree, tree, int, bool,
5626 tsubst_flags_t);
5627 extern int look_for_overrides (tree, tree);
5628 extern void get_pure_virtuals (tree);
5629 extern void maybe_suppress_debug_info (tree);
5630 extern void note_debug_info_needed (tree);
5631 extern void print_search_statistics (void);
5632 extern void reinit_search_statistics (void);
5633 extern tree current_scope (void);
5634 extern int at_function_scope_p (void);
5635 extern bool at_class_scope_p (void);
5636 extern bool at_namespace_scope_p (void);
5637 extern tree context_for_name_lookup (tree);
5638 extern tree lookup_conversions (tree);
5639 extern tree binfo_from_vbase (tree);
5640 extern tree binfo_for_vbase (tree, tree);
5641 extern tree look_for_overrides_here (tree, tree);
5642 #define dfs_skip_bases ((tree)1)
5643 extern tree dfs_walk_all (tree, tree (*) (tree, void *),
5644 tree (*) (tree, void *), void *);
5645 extern tree dfs_walk_once (tree, tree (*) (tree, void *),
5646 tree (*) (tree, void *), void *);
5647 extern tree binfo_via_virtual (tree, tree);
5648 extern tree build_baselink (tree, tree, tree, tree);
5649 extern tree adjust_result_of_qualified_name_lookup
5650 (tree, tree, tree);
5651 extern tree copied_binfo (tree, tree);
5652 extern tree original_binfo (tree, tree);
5653 extern int shared_member_p (tree);
5654
5655 /* The representation of a deferred access check. */
5656
5657 typedef struct GTY(()) deferred_access_check {
5658 /* The base class in which the declaration is referenced. */
5659 tree binfo;
5660 /* The declaration whose access must be checked. */
5661 tree decl;
5662 /* The declaration that should be used in the error message. */
5663 tree diag_decl;
5664 /* The location of this access. */
5665 location_t loc;
5666 } deferred_access_check;
5667
5668 /* in semantics.c */
5669 extern void push_deferring_access_checks (deferring_kind);
5670 extern void resume_deferring_access_checks (void);
5671 extern void stop_deferring_access_checks (void);
5672 extern void pop_deferring_access_checks (void);
5673 extern vec<deferred_access_check, va_gc> *get_deferred_access_checks (void);
5674 extern void reopen_deferring_access_checks (vec<deferred_access_check, va_gc> *);
5675 extern void pop_to_parent_deferring_access_checks (void);
5676 extern bool perform_access_checks (vec<deferred_access_check, va_gc> *,
5677 tsubst_flags_t);
5678 extern bool perform_deferred_access_checks (tsubst_flags_t);
5679 extern bool perform_or_defer_access_check (tree, tree, tree,
5680 tsubst_flags_t);
5681 extern int stmts_are_full_exprs_p (void);
5682 extern void init_cp_semantics (void);
5683 extern tree do_poplevel (tree);
5684 extern void break_maybe_infinite_loop (void);
5685 extern void add_decl_expr (tree);
5686 extern tree maybe_cleanup_point_expr_void (tree);
5687 extern tree finish_expr_stmt (tree);
5688 extern tree begin_if_stmt (void);
5689 extern void finish_if_stmt_cond (tree, tree);
5690 extern tree finish_then_clause (tree);
5691 extern void begin_else_clause (tree);
5692 extern void finish_else_clause (tree);
5693 extern void finish_if_stmt (tree);
5694 extern tree begin_while_stmt (void);
5695 extern void finish_while_stmt_cond (tree, tree, bool);
5696 extern void finish_while_stmt (tree);
5697 extern tree begin_do_stmt (void);
5698 extern void finish_do_body (tree);
5699 extern void finish_do_stmt (tree, tree, bool);
5700 extern tree finish_return_stmt (tree);
5701 extern tree begin_for_scope (tree *);
5702 extern tree begin_for_stmt (tree, tree);
5703 extern void finish_for_init_stmt (tree);
5704 extern void finish_for_cond (tree, tree, bool);
5705 extern void finish_for_expr (tree, tree);
5706 extern void finish_for_stmt (tree);
5707 extern tree begin_range_for_stmt (tree, tree);
5708 extern void finish_range_for_decl (tree, tree, tree);
5709 extern void finish_range_for_stmt (tree);
5710 extern tree finish_break_stmt (void);
5711 extern tree finish_continue_stmt (void);
5712 extern tree begin_switch_stmt (void);
5713 extern void finish_switch_cond (tree, tree);
5714 extern void finish_switch_stmt (tree);
5715 extern tree finish_goto_stmt (tree);
5716 extern tree begin_try_block (void);
5717 extern void finish_try_block (tree);
5718 extern void finish_handler_sequence (tree);
5719 extern tree begin_function_try_block (tree *);
5720 extern void finish_function_try_block (tree);
5721 extern void finish_function_handler_sequence (tree, tree);
5722 extern void finish_cleanup_try_block (tree);
5723 extern tree begin_handler (void);
5724 extern void finish_handler_parms (tree, tree);
5725 extern void finish_handler (tree);
5726 extern void finish_cleanup (tree, tree);
5727 extern bool literal_type_p (tree);
5728 extern tree register_constexpr_fundef (tree, tree);
5729 extern bool check_constexpr_ctor_body (tree, tree);
5730 extern tree ensure_literal_type_for_constexpr_object (tree);
5731 extern bool potential_constant_expression (tree);
5732 extern bool potential_rvalue_constant_expression (tree);
5733 extern bool require_potential_constant_expression (tree);
5734 extern bool require_potential_rvalue_constant_expression (tree);
5735 extern tree cxx_constant_value (tree);
5736 extern tree maybe_constant_value (tree);
5737 extern tree maybe_constant_init (tree);
5738 extern bool is_sub_constant_expr (tree);
5739 extern bool reduced_constant_expression_p (tree);
5740 extern void explain_invalid_constexpr_fn (tree);
5741 extern vec<tree> cx_error_context (void);
5742
5743 enum {
5744 BCS_NO_SCOPE = 1,
5745 BCS_TRY_BLOCK = 2,
5746 BCS_FN_BODY = 4
5747 };
5748 extern tree begin_compound_stmt (unsigned int);
5749
5750 extern void finish_compound_stmt (tree);
5751 extern tree finish_asm_stmt (int, tree, tree, tree, tree,
5752 tree);
5753 extern tree finish_label_stmt (tree);
5754 extern void finish_label_decl (tree);
5755 extern tree finish_parenthesized_expr (tree);
5756 extern tree force_paren_expr (tree);
5757 extern tree finish_non_static_data_member (tree, tree, tree);
5758 extern tree begin_stmt_expr (void);
5759 extern tree finish_stmt_expr_expr (tree, tree);
5760 extern tree finish_stmt_expr (tree, bool);
5761 extern tree stmt_expr_value_expr (tree);
5762 bool empty_expr_stmt_p (tree);
5763 extern tree perform_koenig_lookup (tree, vec<tree, va_gc> *,
5764 tsubst_flags_t);
5765 extern tree finish_call_expr (tree, vec<tree, va_gc> **, bool,
5766 bool, tsubst_flags_t);
5767 extern tree finish_increment_expr (tree, enum tree_code);
5768 extern tree finish_this_expr (void);
5769 extern tree finish_pseudo_destructor_expr (tree, tree, tree, location_t);
5770 extern tree finish_unary_op_expr (location_t, enum tree_code, tree,
5771 tsubst_flags_t);
5772 extern tree finish_compound_literal (tree, tree, tsubst_flags_t);
5773 extern tree finish_fname (tree);
5774 extern void finish_translation_unit (void);
5775 extern tree finish_template_type_parm (tree, tree);
5776 extern tree finish_template_template_parm (tree, tree);
5777 extern tree begin_class_definition (tree);
5778 extern void finish_template_decl (tree);
5779 extern tree finish_template_type (tree, tree, int);
5780 extern tree finish_base_specifier (tree, tree, bool);
5781 extern void finish_member_declaration (tree);
5782 extern tree finish_id_expression (tree, tree, tree,
5783 cp_id_kind *,
5784 bool, bool, bool *,
5785 bool, bool, bool, bool,
5786 const char **,
5787 location_t);
5788 extern tree finish_typeof (tree);
5789 extern tree finish_underlying_type (tree);
5790 extern tree calculate_bases (tree);
5791 extern tree finish_bases (tree, bool);
5792 extern tree calculate_direct_bases (tree);
5793 extern tree finish_offsetof (tree);
5794 extern void finish_decl_cleanup (tree, tree);
5795 extern void finish_eh_cleanup (tree);
5796 extern void emit_associated_thunks (tree);
5797 extern void finish_mem_initializers (tree);
5798 extern tree check_template_template_default_arg (tree);
5799 extern bool expand_or_defer_fn_1 (tree);
5800 extern void expand_or_defer_fn (tree);
5801 extern void add_typedef_to_current_template_for_access_check (tree, tree,
5802 location_t);
5803 extern void check_accessibility_of_qualified_id (tree, tree, tree);
5804 extern tree finish_qualified_id_expr (tree, tree, bool, bool,
5805 bool, bool, tsubst_flags_t);
5806 extern void simplify_aggr_init_expr (tree *);
5807 extern void finalize_nrv (tree *, tree, tree);
5808 extern void note_decl_for_pch (tree);
5809 extern tree omp_reduction_id (enum tree_code, tree, tree);
5810 extern tree cp_remove_omp_priv_cleanup_stmt (tree *, int *, void *);
5811 extern void cp_check_omp_declare_reduction (tree);
5812 extern tree finish_omp_clauses (tree);
5813 extern void finish_omp_threadprivate (tree);
5814 extern tree begin_omp_structured_block (void);
5815 extern tree finish_omp_structured_block (tree);
5816 extern tree begin_omp_parallel (void);
5817 extern tree finish_omp_parallel (tree, tree);
5818 extern tree begin_omp_task (void);
5819 extern tree finish_omp_task (tree, tree);
5820 extern tree finish_omp_for (location_t, enum tree_code,
5821 tree, tree, tree, tree, tree,
5822 tree, tree);
5823 extern void finish_omp_atomic (enum tree_code, enum tree_code,
5824 tree, tree, tree, tree, tree,
5825 bool);
5826 extern void finish_omp_barrier (void);
5827 extern void finish_omp_flush (void);
5828 extern void finish_omp_taskwait (void);
5829 extern void finish_omp_taskyield (void);
5830 extern void finish_omp_cancel (tree);
5831 extern void finish_omp_cancellation_point (tree);
5832 extern tree begin_transaction_stmt (location_t, tree *, int);
5833 extern void finish_transaction_stmt (tree, tree, int, tree);
5834 extern tree build_transaction_expr (location_t, tree, int, tree);
5835 extern bool cxx_omp_create_clause_info (tree, tree, bool, bool,
5836 bool, bool);
5837 extern tree baselink_for_fns (tree);
5838 extern void finish_static_assert (tree, tree, location_t,
5839 bool);
5840 extern tree finish_decltype_type (tree, bool, tsubst_flags_t);
5841 extern tree finish_trait_expr (enum cp_trait_kind, tree, tree);
5842 extern tree build_lambda_expr (void);
5843 extern tree build_lambda_object (tree);
5844 extern tree begin_lambda_type (tree);
5845 extern tree lambda_capture_field_type (tree, bool);
5846 extern tree lambda_return_type (tree);
5847 extern tree lambda_proxy_type (tree);
5848 extern tree lambda_function (tree);
5849 extern void apply_deduced_return_type (tree, tree);
5850 extern tree add_capture (tree, tree, tree, bool, bool);
5851 extern tree add_default_capture (tree, tree, tree);
5852 extern tree build_capture_proxy (tree);
5853 extern void insert_capture_proxy (tree);
5854 extern void insert_pending_capture_proxies (void);
5855 extern bool is_capture_proxy (tree);
5856 extern bool is_normal_capture_proxy (tree);
5857 extern void register_capture_members (tree);
5858 extern tree lambda_expr_this_capture (tree);
5859 extern tree maybe_resolve_dummy (tree);
5860 extern tree nonlambda_method_basetype (void);
5861 extern void maybe_add_lambda_conv_op (tree);
5862 extern bool is_lambda_ignored_entity (tree);
5863
5864 /* in tree.c */
5865 extern int cp_tree_operand_length (const_tree);
5866 void cp_free_lang_data (tree t);
5867 extern tree force_target_expr (tree, tree, tsubst_flags_t);
5868 extern tree build_target_expr_with_type (tree, tree, tsubst_flags_t);
5869 extern void lang_check_failed (const char *, int,
5870 const char *) ATTRIBUTE_NORETURN;
5871 extern tree stabilize_expr (tree, tree *);
5872 extern void stabilize_call (tree, tree *);
5873 extern bool stabilize_init (tree, tree *);
5874 extern tree add_stmt_to_compound (tree, tree);
5875 extern void init_tree (void);
5876 extern bool pod_type_p (const_tree);
5877 extern bool layout_pod_type_p (const_tree);
5878 extern bool std_layout_type_p (const_tree);
5879 extern bool trivial_type_p (const_tree);
5880 extern bool trivially_copyable_p (const_tree);
5881 extern bool scalarish_type_p (const_tree);
5882 extern bool type_has_nontrivial_default_init (const_tree);
5883 extern bool type_has_nontrivial_copy_init (const_tree);
5884 extern bool class_tmpl_impl_spec_p (const_tree);
5885 extern int zero_init_p (const_tree);
5886 extern bool check_abi_tag_redeclaration (const_tree, const_tree, const_tree);
5887 extern tree strip_typedefs (tree);
5888 extern tree strip_typedefs_expr (tree);
5889 extern tree copy_binfo (tree, tree, tree,
5890 tree *, int);
5891 extern int member_p (const_tree);
5892 extern cp_lvalue_kind real_lvalue_p (const_tree);
5893 extern cp_lvalue_kind lvalue_kind (const_tree);
5894 extern bool lvalue_or_rvalue_with_address_p (const_tree);
5895 extern bool xvalue_p (const_tree);
5896 extern bool builtin_valid_in_constant_expr_p (const_tree);
5897 extern tree build_min (enum tree_code, tree, ...);
5898 extern tree build_min_nt_loc (location_t, enum tree_code,
5899 ...);
5900 extern tree build_min_non_dep (enum tree_code, tree, ...);
5901 extern tree build_min_non_dep_call_vec (tree, tree, vec<tree, va_gc> *);
5902 extern tree build_cplus_new (tree, tree, tsubst_flags_t);
5903 extern tree build_aggr_init_expr (tree, tree);
5904 extern tree get_target_expr (tree);
5905 extern tree get_target_expr_sfinae (tree, tsubst_flags_t);
5906 extern tree build_cplus_array_type (tree, tree);
5907 extern tree build_array_of_n_type (tree, int);
5908 extern bool array_of_runtime_bound_p (tree);
5909 extern tree build_array_copy (tree);
5910 extern tree build_vec_init_expr (tree, tree, tsubst_flags_t);
5911 extern void diagnose_non_constexpr_vec_init (tree);
5912 extern tree hash_tree_cons (tree, tree, tree);
5913 extern tree hash_tree_chain (tree, tree);
5914 extern tree build_qualified_name (tree, tree, tree, bool);
5915 extern tree build_ref_qualified_type (tree, cp_ref_qualifier);
5916 extern int is_overloaded_fn (tree);
5917 extern tree dependent_name (tree);
5918 extern tree get_fns (tree);
5919 extern tree get_first_fn (tree);
5920 extern tree ovl_cons (tree, tree);
5921 extern tree build_overload (tree, tree);
5922 extern tree ovl_scope (tree);
5923 extern bool non_static_member_function_p (tree);
5924 extern const char *cxx_printable_name (tree, int);
5925 extern const char *cxx_printable_name_translate (tree, int);
5926 extern tree build_exception_variant (tree, tree);
5927 extern tree bind_template_template_parm (tree, tree);
5928 extern tree array_type_nelts_total (tree);
5929 extern tree array_type_nelts_top (tree);
5930 extern tree break_out_target_exprs (tree);
5931 extern tree get_type_decl (tree);
5932 extern tree decl_namespace_context (tree);
5933 extern bool decl_anon_ns_mem_p (const_tree);
5934 extern tree lvalue_type (tree);
5935 extern tree error_type (tree);
5936 extern int varargs_function_p (const_tree);
5937 extern bool really_overloaded_fn (tree);
5938 extern bool cp_tree_equal (tree, tree);
5939 extern tree no_linkage_check (tree, bool);
5940 extern void debug_binfo (tree);
5941 extern tree build_dummy_object (tree);
5942 extern tree maybe_dummy_object (tree, tree *);
5943 extern int is_dummy_object (const_tree);
5944 extern const struct attribute_spec cxx_attribute_table[];
5945 extern tree make_ptrmem_cst (tree, tree);
5946 extern tree cp_build_type_attribute_variant (tree, tree);
5947 extern tree cp_build_reference_type (tree, bool);
5948 extern tree move (tree);
5949 extern tree cp_build_qualified_type_real (tree, int, tsubst_flags_t);
5950 #define cp_build_qualified_type(TYPE, QUALS) \
5951 cp_build_qualified_type_real ((TYPE), (QUALS), tf_warning_or_error)
5952 extern bool cv_qualified_p (const_tree);
5953 extern tree cv_unqualified (tree);
5954 extern special_function_kind special_function_p (const_tree);
5955 extern int count_trees (tree);
5956 extern int char_type_p (tree);
5957 extern void verify_stmt_tree (tree);
5958 extern linkage_kind decl_linkage (tree);
5959 extern duration_kind decl_storage_duration (tree);
5960 extern tree cp_walk_subtrees (tree*, int*, walk_tree_fn,
5961 void*, struct pointer_set_t*);
5962 #define cp_walk_tree(tp,func,data,pset) \
5963 walk_tree_1 (tp, func, data, pset, cp_walk_subtrees)
5964 #define cp_walk_tree_without_duplicates(tp,func,data) \
5965 walk_tree_without_duplicates_1 (tp, func, data, cp_walk_subtrees)
5966 extern tree fold_if_not_in_template (tree);
5967 extern tree rvalue (tree);
5968 extern tree convert_bitfield_to_declared_type (tree);
5969 extern tree cp_save_expr (tree);
5970 extern bool cast_valid_in_integral_constant_expression_p (tree);
5971 extern bool cxx_type_hash_eq (const_tree, const_tree);
5972
5973 extern void cxx_print_statistics (void);
5974 extern bool maybe_warn_zero_as_null_pointer_constant (tree, location_t);
5975
5976 /* in ptree.c */
5977 extern void cxx_print_xnode (FILE *, tree, int);
5978 extern void cxx_print_decl (FILE *, tree, int);
5979 extern void cxx_print_type (FILE *, tree, int);
5980 extern void cxx_print_identifier (FILE *, tree, int);
5981 extern void cxx_print_error_function (diagnostic_context *,
5982 const char *,
5983 struct diagnostic_info *);
5984
5985 /* in typeck.c */
5986 extern bool cxx_mark_addressable (tree);
5987 extern int string_conv_p (const_tree, const_tree, int);
5988 extern tree cp_truthvalue_conversion (tree);
5989 extern tree condition_conversion (tree);
5990 extern tree require_complete_type (tree);
5991 extern tree require_complete_type_sfinae (tree, tsubst_flags_t);
5992 extern tree complete_type (tree);
5993 extern tree complete_type_or_else (tree, tree);
5994 extern tree complete_type_or_maybe_complain (tree, tree, tsubst_flags_t);
5995 extern int type_unknown_p (const_tree);
5996 enum { ce_derived, ce_normal, ce_exact };
5997 extern bool comp_except_specs (const_tree, const_tree, int);
5998 extern bool comptypes (tree, tree, int);
5999 extern bool same_type_ignoring_top_level_qualifiers_p (tree, tree);
6000 extern bool compparms (const_tree, const_tree);
6001 extern int comp_cv_qualification (const_tree, const_tree);
6002 extern int comp_cv_qual_signature (tree, tree);
6003 extern tree cxx_sizeof_or_alignof_expr (tree, enum tree_code, bool);
6004 extern tree cxx_sizeof_or_alignof_type (tree, enum tree_code, bool);
6005 extern tree cxx_alignas_expr (tree);
6006 extern tree cxx_sizeof_nowarn (tree);
6007 extern tree is_bitfield_expr_with_lowered_type (const_tree);
6008 extern tree unlowered_expr_type (const_tree);
6009 extern tree decay_conversion (tree, tsubst_flags_t);
6010 extern tree build_class_member_access_expr (tree, tree, tree, bool,
6011 tsubst_flags_t);
6012 extern tree finish_class_member_access_expr (tree, tree, bool,
6013 tsubst_flags_t);
6014 extern tree build_x_indirect_ref (location_t, tree,
6015 ref_operator, tsubst_flags_t);
6016 extern tree cp_build_indirect_ref (tree, ref_operator,
6017 tsubst_flags_t);
6018 extern tree build_array_ref (location_t, tree, tree);
6019 extern tree cp_build_array_ref (location_t, tree, tree,
6020 tsubst_flags_t);
6021 extern tree get_member_function_from_ptrfunc (tree *, tree, tsubst_flags_t);
6022 extern tree cp_build_function_call (tree, tree, tsubst_flags_t);
6023 extern tree cp_build_function_call_nary (tree, tsubst_flags_t, ...)
6024 ATTRIBUTE_SENTINEL;
6025 extern tree cp_build_function_call_vec (tree, vec<tree, va_gc> **,
6026 tsubst_flags_t);
6027 extern tree build_x_binary_op (location_t,
6028 enum tree_code, tree,
6029 enum tree_code, tree,
6030 enum tree_code, tree *,
6031 tsubst_flags_t);
6032 extern tree build_x_array_ref (location_t, tree, tree,
6033 tsubst_flags_t);
6034 extern tree build_x_unary_op (location_t,
6035 enum tree_code, tree,
6036 tsubst_flags_t);
6037 extern tree cp_build_addr_expr (tree, tsubst_flags_t);
6038 extern tree cp_build_addr_expr_strict (tree, tsubst_flags_t);
6039 extern tree cp_build_unary_op (enum tree_code, tree, int,
6040 tsubst_flags_t);
6041 extern tree unary_complex_lvalue (enum tree_code, tree);
6042 extern tree build_x_conditional_expr (location_t, tree, tree, tree,
6043 tsubst_flags_t);
6044 extern tree build_x_compound_expr_from_list (tree, expr_list_kind,
6045 tsubst_flags_t);
6046 extern tree build_x_compound_expr_from_vec (vec<tree, va_gc> *,
6047 const char *, tsubst_flags_t);
6048 extern tree build_x_compound_expr (location_t, tree, tree,
6049 tsubst_flags_t);
6050 extern tree build_compound_expr (location_t, tree, tree);
6051 extern tree cp_build_compound_expr (tree, tree, tsubst_flags_t);
6052 extern tree build_static_cast (tree, tree, tsubst_flags_t);
6053 extern tree build_reinterpret_cast (tree, tree, tsubst_flags_t);
6054 extern tree build_const_cast (tree, tree, tsubst_flags_t);
6055 extern tree build_c_cast (location_t, tree, tree);
6056 extern tree cp_build_c_cast (tree, tree, tsubst_flags_t);
6057 extern tree build_x_modify_expr (location_t, tree,
6058 enum tree_code, tree,
6059 tsubst_flags_t);
6060 extern tree cp_build_modify_expr (tree, enum tree_code, tree,
6061 tsubst_flags_t);
6062 extern tree convert_for_initialization (tree, tree, tree, int,
6063 impl_conv_rhs, tree, int,
6064 tsubst_flags_t);
6065 extern int comp_ptr_ttypes (tree, tree);
6066 extern bool comp_ptr_ttypes_const (tree, tree);
6067 extern bool error_type_p (const_tree);
6068 extern bool ptr_reasonably_similar (const_tree, const_tree);
6069 extern tree build_ptrmemfunc (tree, tree, int, bool,
6070 tsubst_flags_t);
6071 extern int cp_type_quals (const_tree);
6072 extern int type_memfn_quals (const_tree);
6073 extern cp_ref_qualifier type_memfn_rqual (const_tree);
6074 extern tree apply_memfn_quals (tree, cp_cv_quals, cp_ref_qualifier);
6075 extern bool cp_has_mutable_p (const_tree);
6076 extern bool at_least_as_qualified_p (const_tree, const_tree);
6077 extern void cp_apply_type_quals_to_decl (int, tree);
6078 extern tree build_ptrmemfunc1 (tree, tree, tree);
6079 extern void expand_ptrmemfunc_cst (tree, tree *, tree *);
6080 extern tree type_after_usual_arithmetic_conversions (tree, tree);
6081 extern tree common_pointer_type (tree, tree);
6082 extern tree composite_pointer_type (tree, tree, tree, tree,
6083 composite_pointer_operation,
6084 tsubst_flags_t);
6085 extern tree merge_types (tree, tree);
6086 extern tree strip_array_domain (tree);
6087 extern tree check_return_expr (tree, bool *);
6088 extern tree cp_build_binary_op (location_t,
6089 enum tree_code, tree, tree,
6090 tsubst_flags_t);
6091 extern tree build_x_vec_perm_expr (location_t,
6092 tree, tree, tree,
6093 tsubst_flags_t);
6094 #define cxx_sizeof(T) cxx_sizeof_or_alignof_type (T, SIZEOF_EXPR, true)
6095 extern tree build_simple_component_ref (tree, tree);
6096 extern tree build_ptrmemfunc_access_expr (tree, tree);
6097 extern tree build_address (tree);
6098 extern tree build_typed_address (tree, tree);
6099 extern tree build_nop (tree, tree);
6100 extern tree non_reference (tree);
6101 extern tree lookup_anon_field (tree, tree);
6102 extern bool invalid_nonstatic_memfn_p (tree, tsubst_flags_t);
6103 extern tree convert_member_func_to_ptr (tree, tree, tsubst_flags_t);
6104 extern tree convert_ptrmem (tree, tree, bool, bool,
6105 tsubst_flags_t);
6106 extern int lvalue_or_else (tree, enum lvalue_use,
6107 tsubst_flags_t);
6108 extern void check_template_keyword (tree);
6109 extern bool check_raw_literal_operator (const_tree decl);
6110 extern bool check_literal_operator_args (const_tree, bool *, bool *);
6111 extern void maybe_warn_about_useless_cast (tree, tree, tsubst_flags_t);
6112 extern tree cp_perform_integral_promotions (tree, tsubst_flags_t);
6113
6114 /* in typeck2.c */
6115 extern void require_complete_eh_spec_types (tree, tree);
6116 extern void cxx_incomplete_type_diagnostic (const_tree, const_tree, diagnostic_t);
6117 #undef cxx_incomplete_type_error
6118 extern void cxx_incomplete_type_error (const_tree, const_tree);
6119 #define cxx_incomplete_type_error(V,T) \
6120 (cxx_incomplete_type_diagnostic ((V), (T), DK_ERROR))
6121 extern tree error_not_base_type (tree, tree);
6122 extern tree binfo_or_else (tree, tree);
6123 extern void cxx_readonly_error (tree, enum lvalue_use);
6124 extern void complete_type_check_abstract (tree);
6125 extern int abstract_virtuals_error (tree, tree);
6126 extern int abstract_virtuals_error (abstract_class_use, tree);
6127 extern int abstract_virtuals_error_sfinae (tree, tree, tsubst_flags_t);
6128 extern int abstract_virtuals_error_sfinae (abstract_class_use, tree, tsubst_flags_t);
6129
6130 extern tree store_init_value (tree, tree, vec<tree, va_gc>**, int);
6131 extern void check_narrowing (tree, tree);
6132 extern tree digest_init (tree, tree, tsubst_flags_t);
6133 extern tree digest_init_flags (tree, tree, int);
6134 extern tree build_scoped_ref (tree, tree, tree *);
6135 extern tree build_x_arrow (location_t, tree,
6136 tsubst_flags_t);
6137 extern tree build_m_component_ref (tree, tree, tsubst_flags_t);
6138 extern tree build_functional_cast (tree, tree, tsubst_flags_t);
6139 extern tree add_exception_specifier (tree, tree, int);
6140 extern tree merge_exception_specifiers (tree, tree, tree);
6141
6142 /* in mangle.c */
6143 extern void init_mangle (void);
6144 extern void mangle_decl (tree);
6145 extern const char *mangle_type_string (tree);
6146 extern tree mangle_typeinfo_for_type (tree);
6147 extern tree mangle_typeinfo_string_for_type (tree);
6148 extern tree mangle_vtbl_for_type (tree);
6149 extern tree mangle_vtt_for_type (tree);
6150 extern tree mangle_ctor_vtbl_for_type (tree, tree);
6151 extern tree mangle_thunk (tree, int, tree, tree);
6152 extern tree mangle_conv_op_name_for_type (tree);
6153 extern tree mangle_guard_variable (tree);
6154 extern tree mangle_tls_init_fn (tree);
6155 extern tree mangle_tls_wrapper_fn (tree);
6156 extern bool decl_tls_wrapper_p (tree);
6157 extern tree mangle_ref_init_variable (tree);
6158 extern char * get_mangled_vtable_map_var_name (tree);
6159
6160 /* in dump.c */
6161 extern bool cp_dump_tree (void *, tree);
6162
6163 /* In cp/cp-objcp-common.c. */
6164
6165 extern alias_set_type cxx_get_alias_set (tree);
6166 extern bool cxx_warn_unused_global_decl (const_tree);
6167 extern size_t cp_tree_size (enum tree_code);
6168 extern bool cp_var_mod_type_p (tree, tree);
6169 extern void cxx_initialize_diagnostics (diagnostic_context *);
6170 extern int cxx_types_compatible_p (tree, tree);
6171 extern void init_shadowed_var_for_decl (void);
6172 extern bool cxx_block_may_fallthru (const_tree);
6173
6174 /* in cp-gimplify.c */
6175 extern int cp_gimplify_expr (tree *, gimple_seq *,
6176 gimple_seq *);
6177 extern void cp_genericize (tree);
6178 extern bool cxx_omp_const_qual_no_mutable (tree);
6179 extern enum omp_clause_default_kind cxx_omp_predetermined_sharing (tree);
6180 extern tree cxx_omp_clause_default_ctor (tree, tree, tree);
6181 extern tree cxx_omp_clause_copy_ctor (tree, tree, tree);
6182 extern tree cxx_omp_clause_assign_op (tree, tree, tree);
6183 extern tree cxx_omp_clause_dtor (tree, tree);
6184 extern void cxx_omp_finish_clause (tree);
6185 extern bool cxx_omp_privatize_by_reference (const_tree);
6186
6187 /* in name-lookup.c */
6188 extern void suggest_alternatives_for (location_t, tree);
6189 extern tree strip_using_decl (tree);
6190
6191 /* in vtable-class-hierarchy.c */
6192 extern void vtv_compute_class_hierarchy_transitive_closure (void);
6193 extern void vtv_generate_init_routine (void);
6194 extern void vtv_save_class_info (tree);
6195 extern void vtv_recover_class_info (void);
6196 extern void vtv_build_vtable_verify_fndecl (void);
6197
6198 /* In cp-cilkplus.c. */
6199 extern bool cpp_validate_cilk_plus_loop (tree);
6200
6201 /* In cp/cp-array-notations.c */
6202 extern tree expand_array_notation_exprs (tree);
6203 bool cilkplus_an_triplet_types_ok_p (location_t, tree, tree, tree,
6204 tree);
6205 /* In c-family/cilk.c */
6206 extern bool cilk_valid_spawn (tree);
6207
6208 /* -- end of C++ */
6209
6210 #endif /* ! GCC_CP_TREE_H */