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