OSDN Git Service

* langhooks.c (lhd_tree_inlining_add_pending_fn_decls,
[pf3gnuchains/gcc-fork.git] / gcc / cp / cp-tree.h
1 /* Definitions for C++ parsing and type checking.
2    Copyright (C) 1987, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
3    2000, 2001, 2002, 2003, 2004, 2005, 2006  Free Software Foundation, Inc.
4    Contributed by Michael Tiemann (tiemann@cygnus.com)
5
6 This file is part of GCC.
7
8 GCC is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2, or (at your option)
11 any later version.
12
13 GCC is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING.  If not, write to
20 the Free Software Foundation, 51 Franklin Street, Fifth Floor,
21 Boston, MA 02110-1301, USA.  */
22
23 #ifndef GCC_CP_TREE_H
24 #define GCC_CP_TREE_H
25
26 #include "ggc.h"
27 #include "function.h"
28 #include "hashtab.h"
29 #include "splay-tree.h"
30 #include "vec.h"
31 #include "varray.h"
32 #include "c-common.h"
33 #include "name-lookup.h"
34 struct diagnostic_context;
35
36 /* Usage of TREE_LANG_FLAG_?:
37    0: IDENTIFIER_MARKED (IDENTIFIER_NODEs)
38       NEW_EXPR_USE_GLOBAL (in NEW_EXPR).
39       DELETE_EXPR_USE_GLOBAL (in DELETE_EXPR).
40       COMPOUND_EXPR_OVERLOADED (in COMPOUND_EXPR).
41       TREE_INDIRECT_USING (in NAMESPACE_DECL).
42       CLEANUP_P (in TRY_BLOCK)
43       AGGR_INIT_VIA_CTOR_P (in AGGR_INIT_EXPR)
44       PTRMEM_OK_P (in ADDR_EXPR, OFFSET_REF)
45       PAREN_STRING_LITERAL (in STRING_CST)
46       DECL_PRETTY_FUNCTION_P (in VAR_DECL)
47       KOENIG_LOOKUP_P (in CALL_EXPR)
48       STATEMENT_LIST_NO_SCOPE (in STATEMENT_LIST).
49       EXPR_STMT_STMT_EXPR_RESULT (in EXPR_STMT)
50       STMT_EXPR_NO_SCOPE (in STMT_EXPR)
51       BIND_EXPR_TRY_BLOCK (in BIND_EXPR)
52       TYPENAME_IS_ENUM_P (in TYPENAME_TYPE)
53       REFERENCE_REF_P (in INDIRECT_EXPR)
54       QUALIFIED_NAME_IS_TEMPLATE (in SCOPE_REF)
55       OMP_ATOMIC_DEPENDENT_P (in OMP_ATOMIC)
56       OMP_FOR_GIMPLIFYING_P (in OMP_FOR)
57       BASELINK_QUALIFIED_P (in BASELINK)
58       TARGET_EXPR_IMPLICIT_P (in TARGET_EXPR)
59       TEMPLATE_PARM_PARAMETER_PACK (in TEMPLATE_PARM_INDEX)
60    1: IDENTIFIER_VIRTUAL_P (in IDENTIFIER_NODE)
61       TI_PENDING_TEMPLATE_FLAG.
62       TEMPLATE_PARMS_FOR_INLINE.
63       DELETE_EXPR_USE_VEC (in DELETE_EXPR).
64       (TREE_CALLS_NEW) (in _EXPR or _REF) (commented-out).
65       ICS_ELLIPSIS_FLAG (in _CONV)
66       DECL_INITIALIZED_P (in VAR_DECL)
67       TYPENAME_IS_CLASS_P (in TYPENAME_TYPE)
68       STMT_IS_FULL_EXPR_P (in _STMT)
69    2: IDENTIFIER_OPNAME_P (in IDENTIFIER_NODE)
70       ICS_THIS_FLAG (in _CONV)
71       DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (in VAR_DECL)
72       STATEMENT_LIST_TRY_BLOCK (in STATEMENT_LIST)
73    3: (TREE_REFERENCE_EXPR) (in NON_LVALUE_EXPR) (commented-out).
74       ICS_BAD_FLAG (in _CONV)
75       FN_TRY_BLOCK_P (in TRY_BLOCK)
76       IDENTIFIER_CTOR_OR_DTOR_P (in IDENTIFIER_NODE)
77       BIND_EXPR_BODY_BLOCK (in BIND_EXPR)
78       DECL_NON_TRIVIALLY_INITIALIZED_P (in VAR_DECL)
79    4: TREE_HAS_CONSTRUCTOR (in INDIRECT_REF, SAVE_EXPR, CONSTRUCTOR,
80           or FIELD_DECL).
81       IDENTIFIER_TYPENAME_P (in IDENTIFIER_NODE)
82       DECL_TINFO_P (in VAR_DECL)
83    5: C_IS_RESERVED_WORD (in IDENTIFIER_NODE)
84       DECL_VTABLE_OR_VTT_P (in VAR_DECL)
85    6: IDENTIFIER_REPO_CHOSEN (in IDENTIFIER_NODE)
86       DECL_CONSTRUCTION_VTABLE_P (in VAR_DECL)
87       TYPE_MARKED_P (in _TYPE)
88
89    Usage of TYPE_LANG_FLAG_?:
90    0: TYPE_DEPENDENT_P
91    1: TYPE_HAS_CONSTRUCTOR.
92    2: Unused
93    3: TYPE_FOR_JAVA.
94    4: TYPE_HAS_NONTRIVIAL_DESTRUCTOR
95    5: IS_AGGR_TYPE.
96    6: TYPE_DEPENDENT_P_VALID
97
98    Usage of DECL_LANG_FLAG_?:
99    0: DECL_ERROR_REPORTED (in VAR_DECL).
100       DECL_TEMPLATE_PARM_P (in PARM_DECL, CONST_DECL, TYPE_DECL, or TEMPLATE_DECL)
101       DECL_LOCAL_FUNCTION_P (in FUNCTION_DECL)
102       DECL_MUTABLE_P (in FIELD_DECL)
103       DECL_DEPENDENT_P (in USING_DECL)
104    1: C_TYPEDEF_EXPLICITLY_SIGNED (in TYPE_DECL).
105       DECL_TEMPLATE_INSTANTIATED (in a VAR_DECL or a FUNCTION_DECL)
106       DECL_MEMBER_TEMPLATE_P (in TEMPLATE_DECL)
107       FUNCTION_PARAMETER_PACK_P (in PARM_DECL)
108    2: DECL_THIS_EXTERN (in VAR_DECL or FUNCTION_DECL).
109       DECL_IMPLICIT_TYPEDEF_P (in a TYPE_DECL)
110    3: DECL_IN_AGGR_P.
111    4: DECL_C_BIT_FIELD (in a FIELD_DECL)
112       DECL_VAR_MARKED_P (in a VAR_DECL)
113       DECL_SELF_REFERENCE_P (in a TYPE_DECL)
114       DECL_INVALID_OVERRIDER_P (in a FUNCTION_DECL)
115    5: DECL_INTERFACE_KNOWN.
116    6: DECL_THIS_STATIC (in VAR_DECL or FUNCTION_DECL).
117       DECL_FIELD_IS_BASE (in FIELD_DECL)
118    7: DECL_DEAD_FOR_LOCAL (in VAR_DECL).
119       DECL_THUNK_P (in a member FUNCTION_DECL)
120
121    Usage of language-independent fields in a language-dependent manner:
122
123    TYPE_ALIAS_SET
124      This field is used by TYPENAME_TYPEs, TEMPLATE_TYPE_PARMs, and so
125      forth as a substitute for the mark bits provided in `lang_type'.
126      At present, only the six low-order bits are used.
127
128    TYPE_LANG_SLOT_1
129      For an ENUMERAL_TYPE, this is ENUM_TEMPLATE_INFO.
130      For a FUNCTION_TYPE or METHOD_TYPE, this is TYPE_RAISES_EXCEPTIONS
131
132   BINFO_VIRTUALS
133      For a binfo, this is a TREE_LIST.  There is an entry for each
134      virtual function declared either in BINFO or its direct and
135      indirect primary bases.
136
137      The BV_DELTA of each node gives the amount by which to adjust the
138      `this' pointer when calling the function.  If the method is an
139      overridden version of a base class method, then it is assumed
140      that, prior to adjustment, the this pointer points to an object
141      of the base class.
142
143      The BV_VCALL_INDEX of each node, if non-NULL, gives the vtable
144      index of the vcall offset for this entry.
145
146      The BV_FN is the declaration for the virtual function itself.
147
148    BINFO_VTABLE
149      This is an expression with POINTER_TYPE that gives the value
150      to which the vptr should be initialized.  Use get_vtbl_decl_for_binfo
151      to extract the VAR_DECL for the complete vtable.
152
153    DECL_ARGUMENTS
154      For a VAR_DECL this is DECL_ANON_UNION_ELEMS.
155
156    DECL_VINDEX
157      This field is NULL for a non-virtual function.  For a virtual
158      function, it is eventually set to an INTEGER_CST indicating the
159      index in the vtable at which this function can be found.  When
160      a virtual function is declared, but before it is known what
161      function is overridden, this field is the error_mark_node.
162
163      Temporarily, it may be set to a TREE_LIST whose TREE_VALUE is
164      the virtual function this one overrides, and whose TREE_CHAIN is
165      the old DECL_VINDEX.  */
166
167 /* Language-specific tree checkers.  */
168
169 #define VAR_OR_FUNCTION_DECL_CHECK(NODE) \
170   TREE_CHECK2(NODE,VAR_DECL,FUNCTION_DECL)
171
172 #define VAR_FUNCTION_OR_PARM_DECL_CHECK(NODE) \
173   TREE_CHECK3(NODE,VAR_DECL,FUNCTION_DECL,PARM_DECL)
174
175 #define VAR_TEMPL_TYPE_OR_FUNCTION_DECL_CHECK(NODE) \
176   TREE_CHECK4(NODE,VAR_DECL,FUNCTION_DECL,TYPE_DECL,TEMPLATE_DECL)
177
178 #define BOUND_TEMPLATE_TEMPLATE_PARM_TYPE_CHECK(NODE) \
179   TREE_CHECK(NODE,BOUND_TEMPLATE_TEMPLATE_PARM)
180
181 #if defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 2007)
182 #define NON_THUNK_FUNCTION_CHECK(NODE) __extension__                    \
183 ({  const tree __t = (NODE);                                            \
184     if (TREE_CODE (__t) != FUNCTION_DECL &&                             \
185         TREE_CODE (__t) != TEMPLATE_DECL && __t->decl_common.lang_specific      \
186         && __t->decl_common.lang_specific->decl_flags.thunk_p)                  \
187       tree_check_failed (__t, __FILE__, __LINE__, __FUNCTION__, 0);     \
188     __t; })
189 #define THUNK_FUNCTION_CHECK(NODE) __extension__                        \
190 ({  const tree __t = (NODE);                                            \
191     if (TREE_CODE (__t) != FUNCTION_DECL || !__t->decl_common.lang_specific     \
192         || !__t->decl_common.lang_specific->decl_flags.thunk_p)         \
193       tree_check_failed (__t, __FILE__, __LINE__, __FUNCTION__, 0);     \
194      __t; })
195 #else
196 #define NON_THUNK_FUNCTION_CHECK(NODE) (NODE)
197 #define THUNK_FUNCTION_CHECK(NODE) (NODE)
198 #endif
199 \f
200 /* Language-dependent contents of an identifier.  */
201
202 struct lang_identifier GTY(())
203 {
204   struct c_common_identifier c_common;
205   cxx_binding *namespace_bindings;
206   cxx_binding *bindings;
207   tree class_template_info;
208   tree label_value;
209 };
210
211 /* In an IDENTIFIER_NODE, nonzero if this identifier is actually a
212    keyword.  C_RID_CODE (node) is then the RID_* value of the keyword,
213    and C_RID_YYCODE is the token number wanted by Yacc.  */
214
215 #define C_IS_RESERVED_WORD(ID) TREE_LANG_FLAG_5 (ID)
216
217 #define LANG_IDENTIFIER_CAST(NODE) \
218         ((struct lang_identifier*)IDENTIFIER_NODE_CHECK (NODE))
219
220 struct template_parm_index_s GTY(())
221 {
222   struct tree_common common;
223   int index;
224   int level;
225   int orig_level;
226   tree decl;
227 };
228 typedef struct template_parm_index_s template_parm_index;
229
230 struct tinst_level_s GTY(())
231 {
232   struct tree_common common;
233   tree decl;
234   location_t locus;
235   int in_system_header_p;
236 };
237 typedef struct tinst_level_s * tinst_level_t;
238
239 struct ptrmem_cst GTY(())
240 {
241   struct tree_common common;
242   /* This isn't used, but the middle-end expects all constants to have
243      this field.  */
244   rtx rtl;
245   tree member;
246 };
247 typedef struct ptrmem_cst * ptrmem_cst_t;
248
249 #define IDENTIFIER_GLOBAL_VALUE(NODE) \
250   namespace_binding ((NODE), global_namespace)
251 #define SET_IDENTIFIER_GLOBAL_VALUE(NODE, VAL) \
252   set_namespace_binding ((NODE), global_namespace, (VAL))
253 #define IDENTIFIER_NAMESPACE_VALUE(NODE) \
254   namespace_binding ((NODE), current_namespace)
255 #define SET_IDENTIFIER_NAMESPACE_VALUE(NODE, VAL) \
256   set_namespace_binding ((NODE), current_namespace, (VAL))
257
258 #define CLEANUP_P(NODE)         TREE_LANG_FLAG_0 (TRY_BLOCK_CHECK (NODE))
259
260 #define BIND_EXPR_TRY_BLOCK(NODE) \
261   TREE_LANG_FLAG_0 (BIND_EXPR_CHECK (NODE))
262
263 /* Used to mark the block around the member initializers and cleanups.  */
264 #define BIND_EXPR_BODY_BLOCK(NODE) \
265   TREE_LANG_FLAG_3 (BIND_EXPR_CHECK (NODE))
266 #define FUNCTION_NEEDS_BODY_BLOCK(NODE) \
267   (DECL_CONSTRUCTOR_P (NODE) || DECL_DESTRUCTOR_P (NODE))
268
269 #define STATEMENT_LIST_NO_SCOPE(NODE) \
270   TREE_LANG_FLAG_0 (STATEMENT_LIST_CHECK (NODE))
271 #define STATEMENT_LIST_TRY_BLOCK(NODE) \
272   TREE_LANG_FLAG_2 (STATEMENT_LIST_CHECK (NODE))
273
274 /* Nonzero if this statement should be considered a full-expression,
275    i.e., if temporaries created during this statement should have
276    their destructors run at the end of this statement.  */
277 #define STMT_IS_FULL_EXPR_P(NODE) TREE_LANG_FLAG_1 ((NODE))
278
279 /* Marks the result of a statement expression.  */
280 #define EXPR_STMT_STMT_EXPR_RESULT(NODE) \
281   TREE_LANG_FLAG_0 (EXPR_STMT_CHECK (NODE))
282
283 /* Nonzero if this statement-expression does not have an associated scope.  */
284 #define STMT_EXPR_NO_SCOPE(NODE) \
285    TREE_LANG_FLAG_0 (STMT_EXPR_CHECK (NODE))
286
287 /* Returns nonzero iff TYPE1 and TYPE2 are the same type, in the usual
288    sense of `same'.  */
289 #define same_type_p(TYPE1, TYPE2) \
290   comptypes ((TYPE1), (TYPE2), COMPARE_STRICT)
291
292 /* Returns nonzero iff TYPE1 and TYPE2 are the same type, ignoring
293    top-level qualifiers.  */
294 #define same_type_ignoring_top_level_qualifiers_p(TYPE1, TYPE2) \
295   same_type_p (TYPE_MAIN_VARIANT (TYPE1), TYPE_MAIN_VARIANT (TYPE2))
296
297 /* Nonzero if we are presently building a statement tree, rather
298    than expanding each statement as we encounter it.  */
299 #define building_stmt_tree()  (cur_stmt_list != NULL_TREE)
300
301 /* Returns nonzero iff NODE is a declaration for the global function
302    `main'.  */
303 #define DECL_MAIN_P(NODE)                               \
304    (DECL_EXTERN_C_FUNCTION_P (NODE)                     \
305     && DECL_NAME (NODE) != NULL_TREE                    \
306     && MAIN_NAME_P (DECL_NAME (NODE)))
307
308 /* The overloaded FUNCTION_DECL.  */
309 #define OVL_FUNCTION(NODE) \
310   (((struct tree_overload*)OVERLOAD_CHECK (NODE))->function)
311 #define OVL_CHAIN(NODE)      TREE_CHAIN (NODE)
312 /* Polymorphic access to FUNCTION and CHAIN.  */
313 #define OVL_CURRENT(NODE)       \
314   ((TREE_CODE (NODE) == OVERLOAD) ? OVL_FUNCTION (NODE) : (NODE))
315 #define OVL_NEXT(NODE)          \
316   ((TREE_CODE (NODE) == OVERLOAD) ? TREE_CHAIN (NODE) : NULL_TREE)
317 /* If set, this was imported in a using declaration.
318    This is not to confuse with being used somewhere, which
319    is not important for this node.  */
320 #define OVL_USED(NODE)          TREE_USED (NODE)
321
322 struct tree_overload GTY(())
323 {
324   struct tree_common common;
325   tree function;
326 };
327
328 /* Returns true iff NODE is a BASELINK.  */
329 #define BASELINK_P(NODE) \
330   (TREE_CODE (NODE) == BASELINK)
331 /* The BINFO indicating the base from which the BASELINK_FUNCTIONS came.  */
332 #define BASELINK_BINFO(NODE) \
333   (((struct tree_baselink*) BASELINK_CHECK (NODE))->binfo)
334 /* The functions referred to by the BASELINK; either a FUNCTION_DECL,
335    a TEMPLATE_DECL, an OVERLOAD, or a TEMPLATE_ID_EXPR.  */
336 #define BASELINK_FUNCTIONS(NODE) \
337   (((struct tree_baselink*) BASELINK_CHECK (NODE))->functions)
338 /* The BINFO in which the search for the functions indicated by this baselink
339    began.  This base is used to determine the accessibility of functions
340    selected by overload resolution.  */
341 #define BASELINK_ACCESS_BINFO(NODE) \
342   (((struct tree_baselink*) BASELINK_CHECK (NODE))->access_binfo)
343 /* For a type-conversion operator, the BASELINK_OPTYPE indicates the type
344    to which the conversion should occur.  This value is important if
345    the BASELINK_FUNCTIONS include a template conversion operator --
346    the BASELINK_OPTYPE can be used to determine what type the user
347    requested.  */
348 #define BASELINK_OPTYPE(NODE) \
349   (TREE_CHAIN (BASELINK_CHECK (NODE)))
350 /* Nonzero if this baselink was from a qualified lookup.  */
351 #define BASELINK_QUALIFIED_P(NODE) \
352   TREE_LANG_FLAG_0 (BASELINK_CHECK (NODE))
353
354 struct tree_baselink GTY(())
355 {
356   struct tree_common common;
357   tree binfo;
358   tree functions;
359   tree access_binfo;
360 };
361
362 /* The different kinds of ids that we encounter.  */
363
364 typedef enum cp_id_kind
365 {
366   /* Not an id at all.  */
367   CP_ID_KIND_NONE,
368   /* An unqualified-id that is not a template-id.  */
369   CP_ID_KIND_UNQUALIFIED,
370   /* An unqualified-id that is a dependent name.  */
371   CP_ID_KIND_UNQUALIFIED_DEPENDENT,
372   /* An unqualified template-id.  */
373   CP_ID_KIND_TEMPLATE_ID,
374   /* A qualified-id.  */
375   CP_ID_KIND_QUALIFIED
376 } cp_id_kind;
377
378 /* Macros for access to language-specific slots in an identifier.  */
379
380 #define IDENTIFIER_NAMESPACE_BINDINGS(NODE)     \
381   (LANG_IDENTIFIER_CAST (NODE)->namespace_bindings)
382 #define IDENTIFIER_TEMPLATE(NODE)       \
383   (LANG_IDENTIFIER_CAST (NODE)->class_template_info)
384
385 /* The IDENTIFIER_BINDING is the innermost cxx_binding for the
386     identifier.  It's PREVIOUS is the next outermost binding.  Each
387     VALUE field is a DECL for the associated declaration.  Thus,
388     name lookup consists simply of pulling off the node at the front
389     of the list (modulo oddities for looking up the names of types,
390     and such.)  You can use SCOPE field to determine the scope
391     that bound the name.  */
392 #define IDENTIFIER_BINDING(NODE) \
393   (LANG_IDENTIFIER_CAST (NODE)->bindings)
394
395 /* TREE_TYPE only indicates on local and class scope the current
396    type. For namespace scope, the presence of a type in any namespace
397    is indicated with global_type_node, and the real type behind must
398    be found through lookup.  */
399 #define IDENTIFIER_TYPE_VALUE(NODE) identifier_type_value (NODE)
400 #define REAL_IDENTIFIER_TYPE_VALUE(NODE) TREE_TYPE (NODE)
401 #define SET_IDENTIFIER_TYPE_VALUE(NODE,TYPE) (TREE_TYPE (NODE) = (TYPE))
402 #define IDENTIFIER_HAS_TYPE_VALUE(NODE) (IDENTIFIER_TYPE_VALUE (NODE) ? 1 : 0)
403
404 #define IDENTIFIER_LABEL_VALUE(NODE) \
405   (LANG_IDENTIFIER_CAST (NODE)->label_value)
406 #define SET_IDENTIFIER_LABEL_VALUE(NODE, VALUE)   \
407   IDENTIFIER_LABEL_VALUE (NODE) = (VALUE)
408
409 /* Nonzero if this identifier is used as a virtual function name somewhere
410    (optimizes searches).  */
411 #define IDENTIFIER_VIRTUAL_P(NODE) TREE_LANG_FLAG_1 (NODE)
412
413 /* Nonzero if this identifier is the prefix for a mangled C++ operator
414    name.  */
415 #define IDENTIFIER_OPNAME_P(NODE) TREE_LANG_FLAG_2 (NODE)
416
417 /* Nonzero if this identifier is the name of a type-conversion
418    operator.  */
419 #define IDENTIFIER_TYPENAME_P(NODE) \
420   TREE_LANG_FLAG_4 (NODE)
421
422 /* Nonzero if this identifier is the name of a constructor or
423    destructor.  */
424 #define IDENTIFIER_CTOR_OR_DTOR_P(NODE) \
425   TREE_LANG_FLAG_3 (NODE)
426
427 /* True iff NAME is the DECL_ASSEMBLER_NAME for an entity with vague
428    linkage which the prelinker has assigned to this translation
429    unit.  */
430 #define IDENTIFIER_REPO_CHOSEN(NAME) \
431   (TREE_LANG_FLAG_6 (NAME))
432
433 /* In a RECORD_TYPE or UNION_TYPE, nonzero if any component is read-only.  */
434 #define C_TYPE_FIELDS_READONLY(TYPE) \
435   (LANG_TYPE_CLASS_CHECK (TYPE)->fields_readonly)
436
437 /* The tokens stored in the default argument.  */
438
439 #define DEFARG_TOKENS(NODE) \
440   (((struct tree_default_arg *)DEFAULT_ARG_CHECK (NODE))->tokens)
441 #define DEFARG_INSTANTIATIONS(NODE) \
442   (((struct tree_default_arg *)DEFAULT_ARG_CHECK (NODE))->instantiations)
443
444 struct tree_default_arg GTY (())
445 {
446   struct tree_common common;
447   struct cp_token_cache *tokens;
448   VEC(tree,gc) *instantiations;
449 };
450
451 /* The condition associated with the static assertion.  This must be
452    an integral constant expression.  */
453 #define STATIC_ASSERT_CONDITION(NODE) \
454   (((struct tree_static_assert *)STATIC_ASSERT_CHECK (NODE))->condition)
455
456 /* The message associated with the static assertion.  This must be a
457    string constant, which will be emitted as an error message when the
458    static assert condition is false.  */
459 #define STATIC_ASSERT_MESSAGE(NODE) \
460   (((struct tree_static_assert *)STATIC_ASSERT_CHECK (NODE))->message)
461
462 /* Source location information for a static assertion.  */
463 #define STATIC_ASSERT_SOURCE_LOCATION(NODE) \
464   (((struct tree_static_assert *)STATIC_ASSERT_CHECK (NODE))->location)
465
466 struct tree_static_assert GTY (())
467 {
468   struct tree_common common;
469   tree condition;
470   tree message;
471   location_t location;
472 };
473
474 struct tree_argument_pack_select GTY (())
475 {
476   struct tree_common common;
477   tree argument_pack;
478   int index;
479 };
480
481 /* The different kinds of traits that we encounter.  */
482
483 typedef enum cp_trait_kind
484 {
485   CPTK_HAS_NOTHROW_ASSIGN,
486   CPTK_HAS_NOTHROW_CONSTRUCTOR,
487   CPTK_HAS_NOTHROW_COPY,
488   CPTK_HAS_TRIVIAL_ASSIGN,
489   CPTK_HAS_TRIVIAL_CONSTRUCTOR,
490   CPTK_HAS_TRIVIAL_COPY,
491   CPTK_HAS_TRIVIAL_DESTRUCTOR,
492   CPTK_HAS_VIRTUAL_DESTRUCTOR,
493   CPTK_IS_ABSTRACT,
494   CPTK_IS_BASE_OF,
495   CPTK_IS_CLASS,
496   CPTK_IS_CONVERTIBLE_TO,
497   CPTK_IS_EMPTY,
498   CPTK_IS_ENUM,
499   CPTK_IS_POD,
500   CPTK_IS_POLYMORPHIC,
501   CPTK_IS_UNION
502 } cp_trait_kind;
503
504 /* The types that we are processing.  */
505 #define TRAIT_EXPR_TYPE1(NODE) \
506   (((struct tree_trait_expr *)TRAIT_EXPR_CHECK (NODE))->type1)
507
508 #define TRAIT_EXPR_TYPE2(NODE) \
509   (((struct tree_trait_expr *)TRAIT_EXPR_CHECK (NODE))->type2)
510
511 /* The specific trait that we are processing.  */
512 #define TRAIT_EXPR_KIND(NODE) \
513   (((struct tree_trait_expr *)TRAIT_EXPR_CHECK (NODE))->kind)
514
515 struct tree_trait_expr GTY (())
516 {
517   struct tree_common common;
518   tree type1;
519   tree type2;  
520   enum cp_trait_kind kind;
521 };
522
523 enum cp_tree_node_structure_enum {
524   TS_CP_GENERIC,
525   TS_CP_IDENTIFIER,
526   TS_CP_TPI,
527   TS_CP_TINST_LEVEL,
528   TS_CP_PTRMEM,
529   TS_CP_BINDING,
530   TS_CP_OVERLOAD,
531   TS_CP_BASELINK,
532   TS_CP_WRAPPER,
533   TS_CP_DEFAULT_ARG,
534   TS_CP_STATIC_ASSERT,
535   TS_CP_ARGUMENT_PACK_SELECT,
536   TS_CP_TRAIT_EXPR,
537   LAST_TS_CP_ENUM
538 };
539
540 /* The resulting tree type.  */
541 union lang_tree_node GTY((desc ("cp_tree_node_structure (&%h)"),
542        chain_next ("(GIMPLE_STMT_P (&%h.generic) ? (union lang_tree_node *) 0 : (union lang_tree_node *)TREE_CHAIN (&%h.generic))")))
543 {
544   union tree_node GTY ((tag ("TS_CP_GENERIC"),
545                         desc ("tree_node_structure (&%h)"))) generic;
546   struct template_parm_index_s GTY ((tag ("TS_CP_TPI"))) tpi;
547   struct tinst_level_s GTY ((tag ("TS_CP_TINST_LEVEL"))) tinst_level;
548   struct ptrmem_cst GTY ((tag ("TS_CP_PTRMEM"))) ptrmem;
549   struct tree_overload GTY ((tag ("TS_CP_OVERLOAD"))) overload;
550   struct tree_baselink GTY ((tag ("TS_CP_BASELINK"))) baselink;
551   struct tree_default_arg GTY ((tag ("TS_CP_DEFAULT_ARG"))) default_arg;
552   struct lang_identifier GTY ((tag ("TS_CP_IDENTIFIER"))) identifier;
553   struct tree_static_assert GTY ((tag ("TS_CP_STATIC_ASSERT"))) 
554     static_assertion;
555   struct tree_argument_pack_select GTY ((tag ("TS_CP_ARGUMENT_PACK_SELECT")))
556     argument_pack_select;
557   struct tree_trait_expr GTY ((tag ("TS_CP_TRAIT_EXPR")))
558     trait_expression;
559 };
560
561 \f
562 enum cp_tree_index
563 {
564     CPTI_JAVA_BYTE_TYPE,
565     CPTI_JAVA_SHORT_TYPE,
566     CPTI_JAVA_INT_TYPE,
567     CPTI_JAVA_LONG_TYPE,
568     CPTI_JAVA_FLOAT_TYPE,
569     CPTI_JAVA_DOUBLE_TYPE,
570     CPTI_JAVA_CHAR_TYPE,
571     CPTI_JAVA_BOOLEAN_TYPE,
572
573     CPTI_WCHAR_DECL,
574     CPTI_VTABLE_ENTRY_TYPE,
575     CPTI_DELTA_TYPE,
576     CPTI_VTABLE_INDEX_TYPE,
577     CPTI_CLEANUP_TYPE,
578     CPTI_VTT_PARM_TYPE,
579
580     CPTI_CLASS_TYPE,
581     CPTI_UNKNOWN_TYPE,
582     CPTI_VTBL_TYPE,
583     CPTI_VTBL_PTR_TYPE,
584     CPTI_STD,
585     CPTI_ABI,
586     CPTI_CONST_TYPE_INFO_TYPE,
587     CPTI_TYPE_INFO_PTR_TYPE,
588     CPTI_ABORT_FNDECL,
589     CPTI_GLOBAL_DELETE_FNDECL,
590     CPTI_AGGR_TAG,
591
592     CPTI_CTOR_IDENTIFIER,
593     CPTI_COMPLETE_CTOR_IDENTIFIER,
594     CPTI_BASE_CTOR_IDENTIFIER,
595     CPTI_DTOR_IDENTIFIER,
596     CPTI_COMPLETE_DTOR_IDENTIFIER,
597     CPTI_BASE_DTOR_IDENTIFIER,
598     CPTI_DELETING_DTOR_IDENTIFIER,
599     CPTI_DELTA_IDENTIFIER,
600     CPTI_IN_CHARGE_IDENTIFIER,
601     CPTI_VTT_PARM_IDENTIFIER,
602     CPTI_NELTS_IDENTIFIER,
603     CPTI_THIS_IDENTIFIER,
604     CPTI_PFN_IDENTIFIER,
605     CPTI_VPTR_IDENTIFIER,
606     CPTI_STD_IDENTIFIER,
607
608     CPTI_LANG_NAME_C,
609     CPTI_LANG_NAME_CPLUSPLUS,
610     CPTI_LANG_NAME_JAVA,
611
612     CPTI_EMPTY_EXCEPT_SPEC,
613     CPTI_JCLASS,
614     CPTI_TERMINATE,
615     CPTI_CALL_UNEXPECTED,
616     CPTI_ATEXIT,
617     CPTI_DSO_HANDLE,
618     CPTI_DCAST,
619
620     CPTI_KEYED_CLASSES,
621
622     CPTI_MAX
623 };
624
625 extern GTY(()) tree cp_global_trees[CPTI_MAX];
626
627 #define java_byte_type_node             cp_global_trees[CPTI_JAVA_BYTE_TYPE]
628 #define java_short_type_node            cp_global_trees[CPTI_JAVA_SHORT_TYPE]
629 #define java_int_type_node              cp_global_trees[CPTI_JAVA_INT_TYPE]
630 #define java_long_type_node             cp_global_trees[CPTI_JAVA_LONG_TYPE]
631 #define java_float_type_node            cp_global_trees[CPTI_JAVA_FLOAT_TYPE]
632 #define java_double_type_node           cp_global_trees[CPTI_JAVA_DOUBLE_TYPE]
633 #define java_char_type_node             cp_global_trees[CPTI_JAVA_CHAR_TYPE]
634 #define java_boolean_type_node          cp_global_trees[CPTI_JAVA_BOOLEAN_TYPE]
635
636 #define wchar_decl_node                 cp_global_trees[CPTI_WCHAR_DECL]
637 #define vtable_entry_type               cp_global_trees[CPTI_VTABLE_ENTRY_TYPE]
638 /* The type used to represent an offset by which to adjust the `this'
639    pointer in pointer-to-member types.  */
640 #define delta_type_node                 cp_global_trees[CPTI_DELTA_TYPE]
641 /* The type used to represent an index into the vtable.  */
642 #define vtable_index_type               cp_global_trees[CPTI_VTABLE_INDEX_TYPE]
643
644 #define class_type_node                 cp_global_trees[CPTI_CLASS_TYPE]
645 #define unknown_type_node               cp_global_trees[CPTI_UNKNOWN_TYPE]
646 #define vtbl_type_node                  cp_global_trees[CPTI_VTBL_TYPE]
647 #define vtbl_ptr_type_node              cp_global_trees[CPTI_VTBL_PTR_TYPE]
648 #define std_node                        cp_global_trees[CPTI_STD]
649 #define abi_node                        cp_global_trees[CPTI_ABI]
650 #define const_type_info_type_node       cp_global_trees[CPTI_CONST_TYPE_INFO_TYPE]
651 #define type_info_ptr_type              cp_global_trees[CPTI_TYPE_INFO_PTR_TYPE]
652 #define abort_fndecl                    cp_global_trees[CPTI_ABORT_FNDECL]
653 #define global_delete_fndecl            cp_global_trees[CPTI_GLOBAL_DELETE_FNDECL]
654 #define current_aggr                    cp_global_trees[CPTI_AGGR_TAG]
655
656 /* We cache these tree nodes so as to call get_identifier less
657    frequently.  */
658
659 /* The name of a constructor that takes an in-charge parameter to
660    decide whether or not to construct virtual base classes.  */
661 #define ctor_identifier                 cp_global_trees[CPTI_CTOR_IDENTIFIER]
662 /* The name of a constructor that constructs virtual base classes.  */
663 #define complete_ctor_identifier        cp_global_trees[CPTI_COMPLETE_CTOR_IDENTIFIER]
664 /* The name of a constructor that does not construct virtual base classes.  */
665 #define base_ctor_identifier            cp_global_trees[CPTI_BASE_CTOR_IDENTIFIER]
666 /* The name of a destructor that takes an in-charge parameter to
667    decide whether or not to destroy virtual base classes and whether
668    or not to delete the object.  */
669 #define dtor_identifier                 cp_global_trees[CPTI_DTOR_IDENTIFIER]
670 /* The name of a destructor that destroys virtual base classes.  */
671 #define complete_dtor_identifier        cp_global_trees[CPTI_COMPLETE_DTOR_IDENTIFIER]
672 /* The name of a destructor that does not destroy virtual base
673    classes.  */
674 #define base_dtor_identifier            cp_global_trees[CPTI_BASE_DTOR_IDENTIFIER]
675 /* The name of a destructor that destroys virtual base classes, and
676    then deletes the entire object.  */
677 #define deleting_dtor_identifier        cp_global_trees[CPTI_DELETING_DTOR_IDENTIFIER]
678 #define delta_identifier                cp_global_trees[CPTI_DELTA_IDENTIFIER]
679 #define in_charge_identifier            cp_global_trees[CPTI_IN_CHARGE_IDENTIFIER]
680 /* The name of the parameter that contains a pointer to the VTT to use
681    for this subobject constructor or destructor.  */
682 #define vtt_parm_identifier             cp_global_trees[CPTI_VTT_PARM_IDENTIFIER]
683 #define nelts_identifier                cp_global_trees[CPTI_NELTS_IDENTIFIER]
684 #define this_identifier                 cp_global_trees[CPTI_THIS_IDENTIFIER]
685 #define pfn_identifier                  cp_global_trees[CPTI_PFN_IDENTIFIER]
686 #define vptr_identifier                 cp_global_trees[CPTI_VPTR_IDENTIFIER]
687 /* The name of the std namespace.  */
688 #define std_identifier                  cp_global_trees[CPTI_STD_IDENTIFIER]
689 #define lang_name_c                     cp_global_trees[CPTI_LANG_NAME_C]
690 #define lang_name_cplusplus             cp_global_trees[CPTI_LANG_NAME_CPLUSPLUS]
691 #define lang_name_java                  cp_global_trees[CPTI_LANG_NAME_JAVA]
692
693 /* Exception specifier used for throw().  */
694 #define empty_except_spec               cp_global_trees[CPTI_EMPTY_EXCEPT_SPEC]
695
696 /* If non-NULL, a POINTER_TYPE equivalent to (java::lang::Class*).  */
697 #define jclass_node                     cp_global_trees[CPTI_JCLASS]
698
699 /* The declaration for `std::terminate'.  */
700 #define terminate_node                  cp_global_trees[CPTI_TERMINATE]
701
702 /* The declaration for "__cxa_call_unexpected".  */
703 #define call_unexpected_node            cp_global_trees[CPTI_CALL_UNEXPECTED]
704
705 /* A pointer to `std::atexit'.  */
706 #define atexit_node                     cp_global_trees[CPTI_ATEXIT]
707
708 /* A pointer to `__dso_handle'.  */
709 #define dso_handle_node                 cp_global_trees[CPTI_DSO_HANDLE]
710
711 /* The declaration of the dynamic_cast runtime.  */
712 #define dynamic_cast_node               cp_global_trees[CPTI_DCAST]
713
714 /* The type of a destructor.  */
715 #define cleanup_type                    cp_global_trees[CPTI_CLEANUP_TYPE]
716
717 /* The type of the vtt parameter passed to subobject constructors and
718    destructors.  */
719 #define vtt_parm_type                   cp_global_trees[CPTI_VTT_PARM_TYPE]
720
721 /* A TREE_LIST of the dynamic classes whose vtables may have to be
722    emitted in this translation unit.  */
723
724 #define keyed_classes                   cp_global_trees[CPTI_KEYED_CLASSES]
725
726 /* Node to indicate default access. This must be distinct from the
727    access nodes in tree.h.  */
728
729 #define access_default_node             null_node
730
731 /* Global state.  */
732
733 struct saved_scope GTY(())
734 {
735   VEC(cxx_saved_binding,gc) *old_bindings;
736   tree old_namespace;
737   tree decl_ns_list;
738   tree class_name;
739   tree class_type;
740   tree access_specifier;
741   tree function_decl;
742   VEC(tree,gc) *lang_base;
743   tree lang_name;
744   tree template_parms;
745   struct cp_binding_level *x_previous_class_level;
746   tree x_saved_tree;
747
748   int x_processing_template_decl;
749   int x_processing_specialization;
750   BOOL_BITFIELD x_processing_explicit_instantiation : 1;
751   BOOL_BITFIELD need_pop_function_context : 1;
752   BOOL_BITFIELD skip_evaluation : 1;
753
754   struct stmt_tree_s x_stmt_tree;
755
756   struct cp_binding_level *class_bindings;
757   struct cp_binding_level *bindings;
758
759   struct saved_scope *prev;
760 };
761
762 /* The current open namespace.  */
763
764 #define current_namespace scope_chain->old_namespace
765
766 /* The stack for namespaces of current declarations.  */
767
768 #define decl_namespace_list scope_chain->decl_ns_list
769
770 /* IDENTIFIER_NODE: name of current class */
771
772 #define current_class_name scope_chain->class_name
773
774 /* _TYPE: the type of the current class */
775
776 #define current_class_type scope_chain->class_type
777
778 /* When parsing a class definition, the access specifier most recently
779    given by the user, or, if no access specifier was given, the
780    default value appropriate for the kind of class (i.e., struct,
781    class, or union).  */
782
783 #define current_access_specifier scope_chain->access_specifier
784
785 /* Pointer to the top of the language name stack.  */
786
787 #define current_lang_base scope_chain->lang_base
788 #define current_lang_name scope_chain->lang_name
789
790 /* When parsing a template declaration, a TREE_LIST representing the
791    active template parametesr.  Each node in the list represents one
792    level of template parameters.  The innermost level is first in the
793    list.  The depth of each level is stored as an INTEGER_CST in the
794    TREE_PURPOSE of each node.  The parameters for that level are
795    stored in the TREE_VALUE.  */
796
797 #define current_template_parms scope_chain->template_parms
798
799 #define processing_template_decl scope_chain->x_processing_template_decl
800 #define processing_specialization scope_chain->x_processing_specialization
801 #define processing_explicit_instantiation scope_chain->x_processing_explicit_instantiation
802
803 /* The cached class binding level, from the most recently exited
804    class, or NULL if none.  */
805
806 #define previous_class_level scope_chain->x_previous_class_level
807
808 /* A list of private types mentioned, for deferred access checking.  */
809
810 extern GTY(()) struct saved_scope *scope_chain;
811
812 struct cxx_int_tree_map GTY(())
813 {
814   unsigned int uid;
815   tree to;
816 };
817
818 extern unsigned int cxx_int_tree_map_hash (const void *);
819 extern int cxx_int_tree_map_eq (const void *, const void *);
820
821 /* Global state pertinent to the current function.  */
822
823 struct language_function GTY(())
824 {
825   struct c_language_function base;
826
827   tree x_cdtor_label;
828   tree x_current_class_ptr;
829   tree x_current_class_ref;
830   tree x_eh_spec_block;
831   tree x_in_charge_parm;
832   tree x_vtt_parm;
833   tree x_return_value;
834
835   BOOL_BITFIELD returns_value : 1;
836   BOOL_BITFIELD returns_null : 1;
837   BOOL_BITFIELD returns_abnormally : 1;
838   BOOL_BITFIELD in_function_try_handler : 1;
839   BOOL_BITFIELD in_base_initializer : 1;
840
841   /* True if this function can throw an exception.  */
842   BOOL_BITFIELD can_throw : 1;
843
844   htab_t GTY((param_is(struct named_label_entry))) x_named_labels;
845   struct cp_binding_level *bindings;
846   VEC(tree,gc) *x_local_names;
847   htab_t GTY((param_is (struct cxx_int_tree_map))) extern_decl_map;
848 };
849
850 /* The current C++-specific per-function global variables.  */
851
852 #define cp_function_chain (cfun->language)
853
854 /* In a constructor destructor, the point at which all derived class
855    destroying/construction has been has been done. Ie. just before a
856    constructor returns, or before any base class destroying will be done
857    in a destructor.  */
858
859 #define cdtor_label cp_function_chain->x_cdtor_label
860
861 /* When we're processing a member function, current_class_ptr is the
862    PARM_DECL for the `this' pointer.  The current_class_ref is an
863    expression for `*this'.  */
864
865 #define current_class_ptr \
866   (cfun ? cp_function_chain->x_current_class_ptr : NULL_TREE)
867 #define current_class_ref \
868   (cfun ? cp_function_chain->x_current_class_ref : NULL_TREE)
869
870 /* The EH_SPEC_BLOCK for the exception-specifiers for the current
871    function, if any.  */
872
873 #define current_eh_spec_block cp_function_chain->x_eh_spec_block
874
875 /* The `__in_chrg' parameter for the current function.  Only used for
876    constructors and destructors.  */
877
878 #define current_in_charge_parm cp_function_chain->x_in_charge_parm
879
880 /* The `__vtt_parm' parameter for the current function.  Only used for
881    constructors and destructors.  */
882
883 #define current_vtt_parm cp_function_chain->x_vtt_parm
884
885 /* Set to 0 at beginning of a function definition, set to 1 if
886    a return statement that specifies a return value is seen.  */
887
888 #define current_function_returns_value cp_function_chain->returns_value
889
890 /* Set to 0 at beginning of a function definition, set to 1 if
891    a return statement with no argument is seen.  */
892
893 #define current_function_returns_null cp_function_chain->returns_null
894
895 /* Set to 0 at beginning of a function definition, set to 1 if
896    a call to a noreturn function is seen.  */
897
898 #define current_function_returns_abnormally \
899   cp_function_chain->returns_abnormally
900
901 /* Nonzero if we are processing a base initializer.  Zero elsewhere.  */
902 #define in_base_initializer cp_function_chain->in_base_initializer
903
904 #define in_function_try_handler cp_function_chain->in_function_try_handler
905
906 /* Expression always returned from function, or error_mark_node
907    otherwise, for use by the automatic named return value optimization.  */
908
909 #define current_function_return_value \
910   (cp_function_chain->x_return_value)
911
912 /* True if NAME is the IDENTIFIER_NODE for an overloaded "operator
913    new" or "operator delete".  */
914 #define NEW_DELETE_OPNAME_P(NAME)               \
915   ((NAME) == ansi_opname (NEW_EXPR)             \
916    || (NAME) == ansi_opname (VEC_NEW_EXPR)      \
917    || (NAME) == ansi_opname (DELETE_EXPR)       \
918    || (NAME) == ansi_opname (VEC_DELETE_EXPR))
919
920 #define ansi_opname(CODE) \
921   (operator_name_info[(int) (CODE)].identifier)
922 #define ansi_assopname(CODE) \
923   (assignment_operator_name_info[(int) (CODE)].identifier)
924
925 /* True if NODE is an erroneous expression.  */
926
927 #define error_operand_p(NODE)                                   \
928   ((NODE) == error_mark_node                                    \
929    || ((NODE) && TREE_TYPE ((NODE)) == error_mark_node))
930 \f
931 /* C++ language-specific tree codes.  */
932 #define DEFTREECODE(SYM, NAME, TYPE, LENGTH) SYM,
933 enum cplus_tree_code {
934   CP_DUMMY_TREE_CODE = LAST_C_TREE_CODE,
935 #include "cp-tree.def"
936   LAST_CPLUS_TREE_CODE
937 };
938 #undef DEFTREECODE
939
940 /* TRUE if a tree code represents a statement.  */
941 extern bool statement_code_p[MAX_TREE_CODES];
942
943 #define STATEMENT_CODE_P(CODE) statement_code_p[(int) (CODE)]
944
945 enum languages { lang_c, lang_cplusplus, lang_java };
946
947 /* Macros to make error reporting functions' lives easier.  */
948 #define TYPE_IDENTIFIER(NODE) (DECL_NAME (TYPE_NAME (NODE)))
949 #define TYPE_LINKAGE_IDENTIFIER(NODE) \
950   (TYPE_IDENTIFIER (TYPE_MAIN_VARIANT (NODE)))
951 #define TYPE_NAME_STRING(NODE) (IDENTIFIER_POINTER (TYPE_IDENTIFIER (NODE)))
952 #define TYPE_NAME_LENGTH(NODE) (IDENTIFIER_LENGTH (TYPE_IDENTIFIER (NODE)))
953
954 /* Nonzero if NODE has no name for linkage purposes.  */
955 #define TYPE_ANONYMOUS_P(NODE) \
956   (TAGGED_TYPE_P (NODE) && ANON_AGGRNAME_P (TYPE_LINKAGE_IDENTIFIER (NODE)))
957
958 /* The _DECL for this _TYPE.  */
959 #define TYPE_MAIN_DECL(NODE) (TYPE_STUB_DECL (TYPE_MAIN_VARIANT (NODE)))
960
961 /* Nonzero if T is a class (or struct or union) type.  Also nonzero
962    for template type parameters, typename types, and instantiated
963    template template parameters.  Despite its name,
964    this macro has nothing to do with the definition of aggregate given
965    in the standard.  Think of this macro as MAYBE_CLASS_TYPE_P.  Keep
966    these checks in ascending code order.  */
967 #define IS_AGGR_TYPE(T)                                 \
968   (TREE_CODE (T) == TEMPLATE_TYPE_PARM                  \
969    || TREE_CODE (T) == TYPENAME_TYPE                    \
970    || TREE_CODE (T) == TYPEOF_TYPE                      \
971    || TREE_CODE (T) == BOUND_TEMPLATE_TEMPLATE_PARM     \
972    || TYPE_LANG_FLAG_5 (T))
973
974 /* Set IS_AGGR_TYPE for T to VAL.  T must be a class, struct, or
975    union type.  */
976 #define SET_IS_AGGR_TYPE(T, VAL) \
977   (TYPE_LANG_FLAG_5 (T) = (VAL))
978
979 /* Nonzero if T is a class type.  Zero for template type parameters,
980    typename types, and so forth.  */
981 #define CLASS_TYPE_P(T) \
982   (IS_AGGR_TYPE_CODE (TREE_CODE (T)) && TYPE_LANG_FLAG_5 (T))
983
984 /* Nonzero if T is a class type but not an union.  */
985 #define NON_UNION_CLASS_TYPE_P(T) \
986   (CLASS_TYPE_P (T) && TREE_CODE (T) != UNION_TYPE)
987
988 /* Keep these checks in ascending code order.  */
989 #define IS_AGGR_TYPE_CODE(T)    \
990   ((T) == RECORD_TYPE || (T) == UNION_TYPE)
991 #define TAGGED_TYPE_P(T) \
992   (CLASS_TYPE_P (T) || TREE_CODE (T) == ENUMERAL_TYPE)
993 #define IS_OVERLOAD_TYPE(T) TAGGED_TYPE_P (T)
994
995 /* True if this a "Java" type, defined in 'extern "Java"'.  */
996 #define TYPE_FOR_JAVA(NODE) TYPE_LANG_FLAG_3 (NODE)
997
998 /* True if this type is dependent.  This predicate is only valid if
999    TYPE_DEPENDENT_P_VALID is true.  */
1000 #define TYPE_DEPENDENT_P(NODE) TYPE_LANG_FLAG_0 (NODE)
1001
1002 /* True if dependent_type_p has been called for this type, with the
1003    result that TYPE_DEPENDENT_P is valid.  */
1004 #define TYPE_DEPENDENT_P_VALID(NODE) TYPE_LANG_FLAG_6(NODE)
1005
1006 /* Nonzero if this type is const-qualified.  */
1007 #define CP_TYPE_CONST_P(NODE)                           \
1008   ((cp_type_quals (NODE) & TYPE_QUAL_CONST) != 0)
1009
1010 /* Nonzero if this type is volatile-qualified.  */
1011 #define CP_TYPE_VOLATILE_P(NODE)                        \
1012   ((cp_type_quals (NODE) & TYPE_QUAL_VOLATILE) != 0)
1013
1014 /* Nonzero if this type is restrict-qualified.  */
1015 #define CP_TYPE_RESTRICT_P(NODE)                        \
1016   ((cp_type_quals (NODE) & TYPE_QUAL_RESTRICT) != 0)
1017
1018 /* Nonzero if this type is const-qualified, but not
1019    volatile-qualified.  Other qualifiers are ignored.  This macro is
1020    used to test whether or not it is OK to bind an rvalue to a
1021    reference.  */
1022 #define CP_TYPE_CONST_NON_VOLATILE_P(NODE)                              \
1023   ((cp_type_quals (NODE) & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE))      \
1024    == TYPE_QUAL_CONST)
1025
1026 #define FUNCTION_ARG_CHAIN(NODE) \
1027   TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (NODE)))
1028
1029 /* Given a FUNCTION_DECL, returns the first TREE_LIST out of TYPE_ARG_TYPES
1030    which refers to a user-written parameter.  */
1031 #define FUNCTION_FIRST_USER_PARMTYPE(NODE) \
1032   skip_artificial_parms_for ((NODE), TYPE_ARG_TYPES (TREE_TYPE (NODE)))
1033
1034 /* Similarly, but for DECL_ARGUMENTS.  */
1035 #define FUNCTION_FIRST_USER_PARM(NODE) \
1036   skip_artificial_parms_for ((NODE), DECL_ARGUMENTS (NODE))
1037
1038 #define PROMOTES_TO_AGGR_TYPE(NODE, CODE)       \
1039   (((CODE) == TREE_CODE (NODE)                  \
1040     && IS_AGGR_TYPE (TREE_TYPE (NODE)))         \
1041    || IS_AGGR_TYPE (NODE))
1042
1043 /* Nonzero iff TYPE is derived from PARENT. Ignores accessibility and
1044    ambiguity issues.  */
1045 #define DERIVED_FROM_P(PARENT, TYPE) \
1046   (lookup_base ((TYPE), (PARENT), ba_any, NULL) != NULL_TREE)
1047 /* Nonzero iff TYPE is uniquely derived from PARENT. Ignores
1048    accessibility.  */
1049 #define UNIQUELY_DERIVED_FROM_P(PARENT, TYPE) \
1050   (lookup_base ((TYPE), (PARENT), ba_unique | ba_quiet, NULL) != NULL_TREE)
1051 /* Nonzero iff TYPE is publicly & uniquely derived from PARENT.  */
1052 #define PUBLICLY_UNIQUELY_DERIVED_P(PARENT, TYPE) \
1053   (lookup_base ((TYPE), (PARENT), ba_ignore_scope | ba_check | ba_quiet, \
1054                 NULL) != NULL_TREE)
1055
1056 /* Gives the visibility specification for a class type.  */
1057 #define CLASSTYPE_VISIBILITY(TYPE)              \
1058         DECL_VISIBILITY (TYPE_NAME (TYPE))
1059 #define CLASSTYPE_VISIBILITY_SPECIFIED(TYPE)    \
1060         DECL_VISIBILITY_SPECIFIED (TYPE_NAME (TYPE))
1061
1062 typedef struct tree_pair_s GTY (())
1063 {
1064   tree purpose;
1065   tree value;
1066 } tree_pair_s;
1067 typedef tree_pair_s *tree_pair_p;
1068 DEF_VEC_O (tree_pair_s);
1069 DEF_VEC_ALLOC_O (tree_pair_s,gc);
1070
1071 /* This is a few header flags for 'struct lang_type'.  Actually,
1072    all but the first are used only for lang_type_class; they
1073    are put in this structure to save space.  */
1074 struct lang_type_header GTY(())
1075 {
1076   BOOL_BITFIELD is_lang_type_class : 1;
1077
1078   BOOL_BITFIELD has_type_conversion : 1;
1079   BOOL_BITFIELD has_init_ref : 1;
1080   BOOL_BITFIELD has_default_ctor : 1;
1081   BOOL_BITFIELD const_needs_init : 1;
1082   BOOL_BITFIELD ref_needs_init : 1;
1083   BOOL_BITFIELD has_const_assign_ref : 1;
1084
1085   BOOL_BITFIELD spare : 1;
1086 };
1087
1088 /* This structure provides additional information above and beyond
1089    what is provide in the ordinary tree_type.  In the past, we used it
1090    for the types of class types, template parameters types, typename
1091    types, and so forth.  However, there can be many (tens to hundreds
1092    of thousands) of template parameter types in a compilation, and
1093    there's no need for this additional information in that case.
1094    Therefore, we now use this data structure only for class types.
1095
1096    In the past, it was thought that there would be relatively few
1097    class types.  However, in the presence of heavy use of templates,
1098    many (i.e., thousands) of classes can easily be generated.
1099    Therefore, we should endeavor to keep the size of this structure to
1100    a minimum.  */
1101 struct lang_type_class GTY(())
1102 {
1103   struct lang_type_header h;
1104
1105   unsigned char align;
1106
1107   unsigned has_mutable : 1;
1108   unsigned com_interface : 1;
1109   unsigned non_pod_class : 1;
1110   unsigned nearly_empty_p : 1;
1111   unsigned user_align : 1;
1112   unsigned has_assign_ref : 1;
1113   unsigned has_new : 1;
1114   unsigned has_array_new : 1;
1115
1116   unsigned gets_delete : 2;
1117   unsigned interface_only : 1;
1118   unsigned interface_unknown : 1;
1119   unsigned contains_empty_class_p : 1;
1120   unsigned anon_aggr : 1;
1121   unsigned non_zero_init : 1;
1122   unsigned empty_p : 1;
1123
1124   unsigned vec_new_uses_cookie : 1;
1125   unsigned declared_class : 1;
1126   unsigned diamond_shaped : 1;
1127   unsigned repeated_base : 1;
1128   unsigned being_defined : 1;
1129   unsigned java_interface : 1;
1130   unsigned debug_requested : 1;
1131   unsigned fields_readonly : 1;
1132
1133   unsigned use_template : 2;
1134   unsigned ptrmemfunc_flag : 1;
1135   unsigned was_anonymous : 1;
1136   unsigned lazy_default_ctor : 1;
1137   unsigned lazy_copy_ctor : 1;
1138   unsigned lazy_assignment_op : 1;
1139   unsigned lazy_destructor : 1;
1140
1141   unsigned has_const_init_ref : 1;
1142   unsigned has_complex_init_ref : 1;
1143   unsigned has_complex_assign_ref : 1;
1144   unsigned non_aggregate : 1;
1145   unsigned has_complex_dflt : 1;
1146
1147   /* When adding a flag here, consider whether or not it ought to
1148      apply to a template instance if it applies to the template.  If
1149      so, make sure to copy it in instantiate_class_template!  */
1150
1151   /* There are some bits left to fill out a 32-bit word.  Keep track
1152      of this by updating the size of this bitfield whenever you add or
1153      remove a flag.  */
1154   unsigned dummy : 11;
1155
1156   tree primary_base;
1157   VEC(tree_pair_s,gc) *vcall_indices;
1158   tree vtables;
1159   tree typeinfo_var;
1160   VEC(tree,gc) *vbases;
1161   binding_table nested_udts;
1162   tree as_base;
1163   VEC(tree,gc) *pure_virtuals;
1164   tree friend_classes;
1165   VEC(tree,gc) * GTY((reorder ("resort_type_method_vec"))) methods;
1166   tree key_method;
1167   tree decl_list;
1168   tree template_info;
1169   tree befriending_classes;
1170   /* In a RECORD_TYPE, information specific to Objective-C++, such
1171      as a list of adopted protocols or a pointer to a corresponding
1172      @interface.  See objc/objc-act.h for details.  */
1173   tree objc_info;
1174 };
1175
1176 struct lang_type_ptrmem GTY(())
1177 {
1178   struct lang_type_header h;
1179   tree record;
1180 };
1181
1182 struct lang_type GTY(())
1183 {
1184   union lang_type_u
1185   {
1186     struct lang_type_header GTY((skip (""))) h;
1187     struct lang_type_class  GTY((tag ("1"))) c;
1188     struct lang_type_ptrmem GTY((tag ("0"))) ptrmem;
1189   } GTY((desc ("%h.h.is_lang_type_class"))) u;
1190 };
1191
1192 #if defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 2007)
1193
1194 #define LANG_TYPE_CLASS_CHECK(NODE) __extension__               \
1195 ({  struct lang_type *lt = TYPE_LANG_SPECIFIC (NODE);           \
1196     if (! lt->u.h.is_lang_type_class)                           \
1197       lang_check_failed (__FILE__, __LINE__, __FUNCTION__);     \
1198     &lt->u.c; })
1199
1200 #define LANG_TYPE_PTRMEM_CHECK(NODE) __extension__              \
1201 ({  struct lang_type *lt = TYPE_LANG_SPECIFIC (NODE);           \
1202     if (lt->u.h.is_lang_type_class)                             \
1203       lang_check_failed (__FILE__, __LINE__, __FUNCTION__);     \
1204     &lt->u.ptrmem; })
1205
1206 #else
1207
1208 #define LANG_TYPE_CLASS_CHECK(NODE) (&TYPE_LANG_SPECIFIC (NODE)->u.c)
1209 #define LANG_TYPE_PTRMEM_CHECK(NODE) (&TYPE_LANG_SPECIFIC (NODE)->u.ptrmem)
1210
1211 #endif /* ENABLE_TREE_CHECKING */
1212
1213 /* Fields used for storing information before the class is defined.
1214    After the class is defined, these fields hold other information.  */
1215
1216 /* VEC(tree) of friends which were defined inline in this class
1217    definition.  */
1218 #define CLASSTYPE_INLINE_FRIENDS(NODE) CLASSTYPE_PURE_VIRTUALS (NODE)
1219
1220 /* Nonzero for _CLASSTYPE means that operator delete is defined.  */
1221 #define TYPE_GETS_DELETE(NODE) (LANG_TYPE_CLASS_CHECK (NODE)->gets_delete)
1222 #define TYPE_GETS_REG_DELETE(NODE) (TYPE_GETS_DELETE (NODE) & 1)
1223
1224 /* Nonzero if `new NODE[x]' should cause the allocation of extra
1225    storage to indicate how many array elements are in use.  */
1226 #define TYPE_VEC_NEW_USES_COOKIE(NODE)                  \
1227   (CLASS_TYPE_P (NODE)                                  \
1228    && LANG_TYPE_CLASS_CHECK (NODE)->vec_new_uses_cookie)
1229
1230 /* Nonzero means that this _CLASSTYPE node defines ways of converting
1231    itself to other types.  */
1232 #define TYPE_HAS_CONVERSION(NODE) \
1233   (LANG_TYPE_CLASS_CHECK (NODE)->h.has_type_conversion)
1234
1235 /* Nonzero means that NODE (a class type) has a default constructor --
1236    but that it has not yet been declared.  */
1237 #define CLASSTYPE_LAZY_DEFAULT_CTOR(NODE) \
1238   (LANG_TYPE_CLASS_CHECK (NODE)->lazy_default_ctor)
1239
1240 /* Nonzero means that NODE (a class type) has a copy constructor --
1241    but that it has not yet been declared.  */
1242 #define CLASSTYPE_LAZY_COPY_CTOR(NODE) \
1243   (LANG_TYPE_CLASS_CHECK (NODE)->lazy_copy_ctor)
1244
1245 /* Nonzero means that NODE (a class type) has an assignment operator
1246    -- but that it has not yet been declared.  */
1247 #define CLASSTYPE_LAZY_ASSIGNMENT_OP(NODE) \
1248   (LANG_TYPE_CLASS_CHECK (NODE)->lazy_assignment_op)
1249
1250 /* Nonzero means that NODE (a class type) has a destructor -- but that
1251    it has not yet been declared.  */
1252 #define CLASSTYPE_LAZY_DESTRUCTOR(NODE) \
1253   (LANG_TYPE_CLASS_CHECK (NODE)->lazy_destructor)
1254
1255 /* Nonzero means that this _CLASSTYPE node overloads operator=(X&).  */
1256 #define TYPE_HAS_ASSIGN_REF(NODE) (LANG_TYPE_CLASS_CHECK (NODE)->has_assign_ref)
1257
1258 /* True iff the class type NODE has an "operator =" whose parameter
1259    has a parameter of type "const X&".  */
1260 #define TYPE_HAS_CONST_ASSIGN_REF(NODE) \
1261   (LANG_TYPE_CLASS_CHECK (NODE)->h.has_const_assign_ref)
1262
1263 /* Nonzero means that this _CLASSTYPE node has an X(X&) constructor.  */
1264 #define TYPE_HAS_INIT_REF(NODE) (LANG_TYPE_CLASS_CHECK (NODE)->h.has_init_ref)
1265 #define TYPE_HAS_CONST_INIT_REF(NODE) \
1266   (LANG_TYPE_CLASS_CHECK (NODE)->has_const_init_ref)
1267
1268 /* Nonzero if this class defines an overloaded operator new.  (An
1269    operator new [] doesn't count.)  */
1270 #define TYPE_HAS_NEW_OPERATOR(NODE) \
1271   (LANG_TYPE_CLASS_CHECK (NODE)->has_new)
1272
1273 /* Nonzero if this class defines an overloaded operator new[].  */
1274 #define TYPE_HAS_ARRAY_NEW_OPERATOR(NODE) \
1275   (LANG_TYPE_CLASS_CHECK (NODE)->has_array_new)
1276
1277 /* Nonzero means that this type is being defined.  I.e., the left brace
1278    starting the definition of this type has been seen.  */
1279 #define TYPE_BEING_DEFINED(NODE) (LANG_TYPE_CLASS_CHECK (NODE)->being_defined)
1280
1281 /* Mark bits for repeated base checks.  */
1282 #define TYPE_MARKED_P(NODE) TREE_LANG_FLAG_6 (TYPE_CHECK (NODE))
1283
1284 /* Nonzero if the class NODE has multiple paths to the same (virtual)
1285    base object.  */
1286 #define CLASSTYPE_DIAMOND_SHAPED_P(NODE) \
1287   (LANG_TYPE_CLASS_CHECK(NODE)->diamond_shaped)
1288
1289 /* Nonzero if the class NODE has multiple instances of the same base
1290    type.  */
1291 #define CLASSTYPE_REPEATED_BASE_P(NODE) \
1292   (LANG_TYPE_CLASS_CHECK(NODE)->repeated_base)
1293
1294 /* The member function with which the vtable will be emitted:
1295    the first noninline non-pure-virtual member function.  NULL_TREE
1296    if there is no key function or if this is a class template */
1297 #define CLASSTYPE_KEY_METHOD(NODE) (LANG_TYPE_CLASS_CHECK (NODE)->key_method)
1298
1299 /* Vector member functions defined in this class.  Each element is
1300    either a FUNCTION_DECL, a TEMPLATE_DECL, or an OVERLOAD.  All
1301    functions with the same name end up in the same slot.  The first
1302    two elements are for constructors, and destructors, respectively.
1303    All template conversion operators to innermost template dependent
1304    types are overloaded on the next slot, if they exist.  Note, the
1305    names for these functions will not all be the same.  The
1306    non-template conversion operators & templated conversions to
1307    non-innermost template types are next, followed by ordinary member
1308    functions.  There may be empty entries at the end of the vector.
1309    The conversion operators are unsorted. The ordinary member
1310    functions are sorted, once the class is complete.  */
1311 #define CLASSTYPE_METHOD_VEC(NODE) (LANG_TYPE_CLASS_CHECK (NODE)->methods)
1312
1313 /* For class templates, this is a TREE_LIST of all member data,
1314    functions, types, and friends in the order of declaration.
1315    The TREE_PURPOSE of each TREE_LIST is NULL_TREE for a friend,
1316    and the RECORD_TYPE for the class template otherwise.  */
1317 #define CLASSTYPE_DECL_LIST(NODE) (LANG_TYPE_CLASS_CHECK (NODE)->decl_list)
1318
1319 /* The slot in the CLASSTYPE_METHOD_VEC where constructors go.  */
1320 #define CLASSTYPE_CONSTRUCTOR_SLOT 0
1321
1322 /* The slot in the CLASSTYPE_METHOD_VEC where destructors go.  */
1323 #define CLASSTYPE_DESTRUCTOR_SLOT 1
1324
1325 /* The first slot in the CLASSTYPE_METHOD_VEC where conversion
1326    operators can appear.  */
1327 #define CLASSTYPE_FIRST_CONVERSION_SLOT 2
1328
1329 /* A FUNCTION_DECL or OVERLOAD for the constructors for NODE.  These
1330    are the constructors that take an in-charge parameter.  */
1331 #define CLASSTYPE_CONSTRUCTORS(NODE) \
1332   (VEC_index (tree, CLASSTYPE_METHOD_VEC (NODE), CLASSTYPE_CONSTRUCTOR_SLOT))
1333
1334 /* A FUNCTION_DECL for the destructor for NODE.  These are the
1335    destructors that take an in-charge parameter.  If
1336    CLASSTYPE_LAZY_DESTRUCTOR is true, then this entry will be NULL
1337    until the destructor is created with lazily_declare_fn.  */
1338 #define CLASSTYPE_DESTRUCTORS(NODE) \
1339   (CLASSTYPE_METHOD_VEC (NODE)                                                \
1340    ? VEC_index (tree, CLASSTYPE_METHOD_VEC (NODE), CLASSTYPE_DESTRUCTOR_SLOT) \
1341    : NULL_TREE)
1342
1343 /* A dictionary of the nested user-defined-types (class-types, or enums)
1344    found within this class.  This table includes nested member class
1345    templates.  */
1346 #define CLASSTYPE_NESTED_UTDS(NODE) \
1347    (LANG_TYPE_CLASS_CHECK (NODE)->nested_udts)
1348
1349 /* Nonzero if NODE has a primary base class, i.e., a base class with
1350    which it shares the virtual function table pointer.  */
1351 #define CLASSTYPE_HAS_PRIMARY_BASE_P(NODE) \
1352   (CLASSTYPE_PRIMARY_BINFO (NODE) != NULL_TREE)
1353
1354 /* If non-NULL, this is the binfo for the primary base class, i.e.,
1355    the base class which contains the virtual function table pointer
1356    for this class.  */
1357 #define CLASSTYPE_PRIMARY_BINFO(NODE) \
1358   (LANG_TYPE_CLASS_CHECK (NODE)->primary_base)
1359
1360 /* A vector of BINFOs for the direct and indirect virtual base classes
1361    that this type uses in a post-order depth-first left-to-right
1362    order.  (In other words, these bases appear in the order that they
1363    should be initialized.)  */
1364 #define CLASSTYPE_VBASECLASSES(NODE) (LANG_TYPE_CLASS_CHECK (NODE)->vbases)
1365
1366 /* The type corresponding to NODE when NODE is used as a base class,
1367    i.e., NODE without virtual base classes.  */
1368
1369 #define CLASSTYPE_AS_BASE(NODE) (LANG_TYPE_CLASS_CHECK (NODE)->as_base)
1370
1371 /* True iff NODE is the CLASSTYPE_AS_BASE version of some type.  */
1372
1373 #define IS_FAKE_BASE_TYPE(NODE)                                 \
1374   (TREE_CODE (NODE) == RECORD_TYPE                              \
1375    && TYPE_CONTEXT (NODE) && CLASS_TYPE_P (TYPE_CONTEXT (NODE)) \
1376    && CLASSTYPE_AS_BASE (TYPE_CONTEXT (NODE)) == (NODE))
1377
1378 /* These are the size and alignment of the type without its virtual
1379    base classes, for when we use this type as a base itself.  */
1380 #define CLASSTYPE_SIZE(NODE) TYPE_SIZE (CLASSTYPE_AS_BASE (NODE))
1381 #define CLASSTYPE_SIZE_UNIT(NODE) TYPE_SIZE_UNIT (CLASSTYPE_AS_BASE (NODE))
1382 #define CLASSTYPE_ALIGN(NODE) TYPE_ALIGN (CLASSTYPE_AS_BASE (NODE))
1383 #define CLASSTYPE_USER_ALIGN(NODE) TYPE_USER_ALIGN (CLASSTYPE_AS_BASE (NODE))
1384
1385 /* The alignment of NODE, without its virtual bases, in bytes.  */
1386 #define CLASSTYPE_ALIGN_UNIT(NODE) \
1387   (CLASSTYPE_ALIGN (NODE) / BITS_PER_UNIT)
1388
1389 /* True if this a Java interface type, declared with
1390    '__attribute__ ((java_interface))'.  */
1391 #define TYPE_JAVA_INTERFACE(NODE) \
1392   (LANG_TYPE_CLASS_CHECK (NODE)->java_interface)
1393
1394 /* A VEC(tree) of virtual functions which cannot be inherited by
1395    derived classes.  When deriving from this type, the derived
1396    class must provide its own definition for each of these functions.  */
1397 #define CLASSTYPE_PURE_VIRTUALS(NODE) \
1398   (LANG_TYPE_CLASS_CHECK (NODE)->pure_virtuals)
1399
1400 /* Nonzero means that this type has an X() constructor.  */
1401 #define TYPE_HAS_DEFAULT_CONSTRUCTOR(NODE) \
1402   (LANG_TYPE_CLASS_CHECK (NODE)->h.has_default_ctor)
1403
1404 /* Nonzero means that this type contains a mutable member.  */
1405 #define CLASSTYPE_HAS_MUTABLE(NODE) (LANG_TYPE_CLASS_CHECK (NODE)->has_mutable)
1406 #define TYPE_HAS_MUTABLE_P(NODE) (cp_has_mutable_p (NODE))
1407
1408 /* Nonzero means that this class type is a non-POD class.  */
1409 #define CLASSTYPE_NON_POD_P(NODE) (LANG_TYPE_CLASS_CHECK (NODE)->non_pod_class)
1410
1411 /* Nonzero means that this class contains pod types whose default
1412    initialization is not a zero initialization (namely, pointers to
1413    data members).  */
1414 #define CLASSTYPE_NON_ZERO_INIT_P(NODE) \
1415   (LANG_TYPE_CLASS_CHECK (NODE)->non_zero_init)
1416
1417 /* Nonzero if this class is "empty" in the sense of the C++ ABI.  */
1418 #define CLASSTYPE_EMPTY_P(NODE) \
1419   (LANG_TYPE_CLASS_CHECK (NODE)->empty_p)
1420
1421 /* Nonzero if this class is "nearly empty", i.e., contains only a
1422    virtual function table pointer.  */
1423 #define CLASSTYPE_NEARLY_EMPTY_P(NODE) \
1424   (LANG_TYPE_CLASS_CHECK (NODE)->nearly_empty_p)
1425
1426 /* Nonzero if this class contains an empty subobject.  */
1427 #define CLASSTYPE_CONTAINS_EMPTY_CLASS_P(NODE) \
1428   (LANG_TYPE_CLASS_CHECK (NODE)->contains_empty_class_p)
1429
1430 /* A list of class types of which this type is a friend.  The
1431    TREE_VALUE is normally a TYPE, but will be a TEMPLATE_DECL in the
1432    case of a template friend.  */
1433 #define CLASSTYPE_FRIEND_CLASSES(NODE) \
1434   (LANG_TYPE_CLASS_CHECK (NODE)->friend_classes)
1435
1436 /* A list of the classes which grant friendship to this class.  */
1437 #define CLASSTYPE_BEFRIENDING_CLASSES(NODE) \
1438   (LANG_TYPE_CLASS_CHECK (NODE)->befriending_classes)
1439
1440 /* Say whether this node was declared as a "class" or a "struct".  */
1441 #define CLASSTYPE_DECLARED_CLASS(NODE) \
1442   (LANG_TYPE_CLASS_CHECK (NODE)->declared_class)
1443
1444 /* Nonzero if this class has const members
1445    which have no specified initialization.  */
1446 #define CLASSTYPE_READONLY_FIELDS_NEED_INIT(NODE)       \
1447   (TYPE_LANG_SPECIFIC (NODE)                            \
1448    ? LANG_TYPE_CLASS_CHECK (NODE)->h.const_needs_init : 0)
1449 #define SET_CLASSTYPE_READONLY_FIELDS_NEED_INIT(NODE, VALUE) \
1450   (LANG_TYPE_CLASS_CHECK (NODE)->h.const_needs_init = (VALUE))
1451
1452 /* Nonzero if this class has ref members
1453    which have no specified initialization.  */
1454 #define CLASSTYPE_REF_FIELDS_NEED_INIT(NODE)            \
1455   (TYPE_LANG_SPECIFIC (NODE)                            \
1456    ? LANG_TYPE_CLASS_CHECK (NODE)->h.ref_needs_init : 0)
1457 #define SET_CLASSTYPE_REF_FIELDS_NEED_INIT(NODE, VALUE) \
1458   (LANG_TYPE_CLASS_CHECK (NODE)->h.ref_needs_init = (VALUE))
1459
1460 /* Nonzero if this class is included from a header file which employs
1461    `#pragma interface', and it is not included in its implementation file.  */
1462 #define CLASSTYPE_INTERFACE_ONLY(NODE) \
1463   (LANG_TYPE_CLASS_CHECK (NODE)->interface_only)
1464
1465 /* True if we have already determined whether or not vtables, VTTs,
1466    typeinfo, and other similar per-class data should be emitted in
1467    this translation unit.  This flag does not indicate whether or not
1468    these items should be emitted; it only indicates that we know one
1469    way or the other.  */
1470 #define CLASSTYPE_INTERFACE_KNOWN(NODE) \
1471   (LANG_TYPE_CLASS_CHECK (NODE)->interface_unknown == 0)
1472 /* The opposite of CLASSTYPE_INTERFACE_KNOWN.  */
1473 #define CLASSTYPE_INTERFACE_UNKNOWN(NODE) \
1474   (LANG_TYPE_CLASS_CHECK (NODE)->interface_unknown)
1475
1476 #define SET_CLASSTYPE_INTERFACE_UNKNOWN_X(NODE,X) \
1477   (LANG_TYPE_CLASS_CHECK (NODE)->interface_unknown = !!(X))
1478 #define SET_CLASSTYPE_INTERFACE_UNKNOWN(NODE) \
1479   (LANG_TYPE_CLASS_CHECK (NODE)->interface_unknown = 1)
1480 #define SET_CLASSTYPE_INTERFACE_KNOWN(NODE) \
1481   (LANG_TYPE_CLASS_CHECK (NODE)->interface_unknown = 0)
1482
1483 /* Nonzero if a _DECL node requires us to output debug info for this class.  */
1484 #define CLASSTYPE_DEBUG_REQUESTED(NODE) \
1485   (LANG_TYPE_CLASS_CHECK (NODE)->debug_requested)
1486 \f
1487 /* Additional macros for inheritance information.  */
1488
1489 /* Nonzero means that this class is on a path leading to a new vtable.  */
1490 #define BINFO_VTABLE_PATH_MARKED(NODE) BINFO_FLAG_1 (NODE)
1491
1492 /* Nonzero means B (a BINFO) has its own vtable.  Any copies will not
1493    have this flag set.  */
1494 #define BINFO_NEW_VTABLE_MARKED(B) (BINFO_FLAG_2 (B))
1495
1496 /* Compare a BINFO_TYPE with another type for equality.  For a binfo,
1497    this is functionally equivalent to using same_type_p, but
1498    measurably faster.  At least one of the arguments must be a
1499    BINFO_TYPE.  The other can be a BINFO_TYPE or a regular type.  If
1500    BINFO_TYPE(T) ever stops being the main variant of the class the
1501    binfo is for, this macro must change.  */
1502 #define SAME_BINFO_TYPE_P(A, B) ((A) == (B))
1503
1504 /* Any subobject that needs a new vtable must have a vptr and must not
1505    be a non-virtual primary base (since it would then use the vtable from a
1506    derived class and never become non-primary.)  */
1507 #define SET_BINFO_NEW_VTABLE_MARKED(B)                                   \
1508   (BINFO_NEW_VTABLE_MARKED (B) = 1,                                      \
1509    gcc_assert (!BINFO_PRIMARY_P (B) || BINFO_VIRTUAL_P (B)),             \
1510    gcc_assert (TYPE_VFIELD (BINFO_TYPE (B))))
1511
1512 /* Nonzero if this binfo is for a dependent base - one that should not
1513    be searched.  */
1514 #define BINFO_DEPENDENT_BASE_P(NODE) BINFO_FLAG_3 (NODE)
1515
1516 /* Nonzero if this binfo has lost its primary base binfo (because that
1517    is a nearly-empty virtual base that has been taken by some other
1518    base in the complete hierarchy.  */
1519 #define BINFO_LOST_PRIMARY_P(NODE) BINFO_FLAG_4 (NODE)
1520
1521 /* Nonzero if this BINFO is a primary base class.  */
1522 #define BINFO_PRIMARY_P(NODE) BINFO_FLAG_5(NODE)
1523
1524 /* Used by various search routines.  */
1525 #define IDENTIFIER_MARKED(NODE) TREE_LANG_FLAG_0 (NODE)
1526 \f
1527 /* A VEC(tree_pair_s) of the vcall indices associated with the class
1528    NODE.  The PURPOSE of each element is a FUNCTION_DECL for a virtual
1529    function.  The VALUE is the index into the virtual table where the
1530    vcall offset for that function is stored, when NODE is a virtual
1531    base.  */
1532 #define CLASSTYPE_VCALL_INDICES(NODE) \
1533   (LANG_TYPE_CLASS_CHECK (NODE)->vcall_indices)
1534
1535 /* The various vtables for the class NODE.  The primary vtable will be
1536    first, followed by the construction vtables and VTT, if any.  */
1537 #define CLASSTYPE_VTABLES(NODE) \
1538   (LANG_TYPE_CLASS_CHECK (NODE)->vtables)
1539
1540 /* The std::type_info variable representing this class, or NULL if no
1541    such variable has been created.  This field is only set for the
1542    TYPE_MAIN_VARIANT of the class.  */
1543 #define CLASSTYPE_TYPEINFO_VAR(NODE) \
1544   (LANG_TYPE_CLASS_CHECK (NODE)->typeinfo_var)
1545
1546 /* Accessor macros for the BINFO_VIRTUALS list.  */
1547
1548 /* The number of bytes by which to adjust the `this' pointer when
1549    calling this virtual function.  Subtract this value from the this
1550    pointer. Always non-NULL, might be constant zero though.  */
1551 #define BV_DELTA(NODE) (TREE_PURPOSE (NODE))
1552
1553 /* If non-NULL, the vtable index at which to find the vcall offset
1554    when calling this virtual function.  Add the value at that vtable
1555    index to the this pointer.  */
1556 #define BV_VCALL_INDEX(NODE) (TREE_TYPE (NODE))
1557
1558 /* The function to call.  */
1559 #define BV_FN(NODE) (TREE_VALUE (NODE))
1560
1561 \f
1562 /* For FUNCTION_TYPE or METHOD_TYPE, a list of the exceptions that
1563    this type can raise.  Each TREE_VALUE is a _TYPE.  The TREE_VALUE
1564    will be NULL_TREE to indicate a throw specification of `()', or
1565    no exceptions allowed.  */
1566 #define TYPE_RAISES_EXCEPTIONS(NODE) TYPE_LANG_SLOT_1 (NODE)
1567
1568 /* For FUNCTION_TYPE or METHOD_TYPE, return 1 iff it is declared `throw()'.  */
1569 #define TYPE_NOTHROW_P(NODE) \
1570   (TYPE_RAISES_EXCEPTIONS (NODE) \
1571    && TREE_VALUE (TYPE_RAISES_EXCEPTIONS (NODE)) == NULL_TREE)
1572
1573 /* The binding level associated with the namespace.  */
1574 #define NAMESPACE_LEVEL(NODE) \
1575   (DECL_LANG_SPECIFIC (NODE)->decl_flags.u.level)
1576 \f
1577
1578 /* If a DECL has DECL_LANG_SPECIFIC, it is either a lang_decl_flags or
1579    a lang_decl (which has lang_decl_flags as its initial prefix).
1580    This macro is nonzero for tree nodes whose DECL_LANG_SPECIFIC is
1581    the full lang_decl, and not just lang_decl_flags.  Keep these
1582    checks in ascending code order.  */
1583 #define CAN_HAVE_FULL_LANG_DECL_P(NODE)                 \
1584   (!(TREE_CODE (NODE) == FIELD_DECL                     \
1585      || TREE_CODE (NODE) == VAR_DECL                    \
1586      || TREE_CODE (NODE) == CONST_DECL                  \
1587      || TREE_CODE (NODE) == USING_DECL))
1588
1589 struct lang_decl_flags GTY(())
1590 {
1591   ENUM_BITFIELD(languages) language : 4;
1592   unsigned global_ctor_p : 1;
1593   unsigned global_dtor_p : 1;
1594   unsigned anticipated_p : 1;
1595   unsigned template_conv_p : 1;
1596
1597   unsigned operator_attr : 1;
1598   unsigned constructor_attr : 1;
1599   unsigned destructor_attr : 1;
1600   unsigned friend_attr : 1;
1601   unsigned static_function : 1;
1602   unsigned pure_virtual : 1;
1603   unsigned has_in_charge_parm_p : 1;
1604   unsigned has_vtt_parm_p : 1;
1605
1606   unsigned deferred : 1;
1607   unsigned use_template : 2;
1608   unsigned nonconverting : 1;
1609   unsigned not_really_extern : 1;
1610   unsigned initialized_in_class : 1;
1611   unsigned assignment_operator_p : 1;
1612   unsigned u1sel : 1;
1613
1614   unsigned u2sel : 1;
1615   unsigned can_be_full : 1;
1616   unsigned thunk_p : 1;
1617   unsigned this_thunk_p : 1;
1618   unsigned repo_available_p : 1;
1619   unsigned hidden_friend_p : 1;
1620   unsigned threadprivate_p : 1;
1621   /* One unused bit.  */
1622
1623   union lang_decl_u {
1624     /* In a FUNCTION_DECL for which DECL_THUNK_P holds, this is
1625        THUNK_ALIAS.
1626        In a FUNCTION_DECL for which DECL_THUNK_P does not hold,
1627        VAR_DECL, TYPE_DECL, or TEMPLATE_DECL, this is
1628        DECL_TEMPLATE_INFO.  */
1629     tree GTY ((tag ("0"))) template_info;
1630
1631     /* In a NAMESPACE_DECL, this is NAMESPACE_LEVEL.  */
1632     struct cp_binding_level * GTY ((tag ("1"))) level;
1633   } GTY ((desc ("%1.u1sel"))) u;
1634
1635   union lang_decl_u2 {
1636     /* In a FUNCTION_DECL for which DECL_THUNK_P holds, this is
1637        THUNK_VIRTUAL_OFFSET.
1638        Otherwise this is DECL_ACCESS.  */
1639     tree GTY ((tag ("0"))) access;
1640
1641     /* For VAR_DECL in function, this is DECL_DISCRIMINATOR.  */
1642     int GTY ((tag ("1"))) discriminator;
1643   } GTY ((desc ("%1.u2sel"))) u2;
1644 };
1645
1646 /* sorted_fields is sorted based on a pointer, so we need to be able
1647    to resort it if pointers get rearranged.  */
1648
1649 struct lang_decl GTY(())
1650 {
1651   struct lang_decl_flags decl_flags;
1652
1653   union lang_decl_u4
1654     {
1655       struct full_lang_decl
1656       {
1657         /* In an overloaded operator, this is the value of
1658            DECL_OVERLOADED_OPERATOR_P.  */
1659         ENUM_BITFIELD (tree_code) operator_code : 8;
1660
1661         unsigned u3sel : 1;
1662         unsigned pending_inline_p : 1;
1663         unsigned spare : 22;
1664
1665         /* For a non-thunk function decl, this is a tree list of
1666            friendly classes. For a thunk function decl, it is the
1667            thunked to function decl.  */
1668         tree befriending_classes;
1669
1670         /* For a non-virtual FUNCTION_DECL, this is
1671            DECL_FRIEND_CONTEXT.  For a virtual FUNCTION_DECL for which
1672            DECL_THIS_THUNK_P does not hold, this is DECL_THUNKS. Both
1673            this pointer and result pointer adjusting thunks are
1674            chained here.  This pointer thunks to return pointer thunks
1675            will be chained on the return pointer thunk.  */
1676         tree context;
1677
1678         union lang_decl_u5
1679         {
1680           /* In a non-thunk FUNCTION_DECL or TEMPLATE_DECL, this is
1681              DECL_CLONED_FUNCTION.  */
1682           tree GTY ((tag ("0"))) cloned_function;
1683
1684           /* In a FUNCTION_DECL for which THUNK_P holds this is the
1685              THUNK_FIXED_OFFSET.  */
1686           HOST_WIDE_INT GTY ((tag ("1"))) fixed_offset;
1687         } GTY ((desc ("%0.decl_flags.thunk_p"))) u5;
1688
1689         union lang_decl_u3
1690         {
1691           struct sorted_fields_type * GTY ((tag ("0"), reorder ("resort_sorted_fields")))
1692                sorted_fields;
1693           struct cp_token_cache * GTY ((tag ("2"))) pending_inline_info;
1694           struct language_function * GTY ((tag ("1")))
1695                saved_language_function;
1696         } GTY ((desc ("%1.u3sel + %1.pending_inline_p"))) u;
1697       } GTY ((tag ("1"))) f;
1698   } GTY ((desc ("%1.decl_flags.can_be_full"))) u;
1699 };
1700
1701 #if defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 2007)
1702
1703 #define LANG_DECL_U2_CHECK(NODE, TF) __extension__              \
1704 ({  struct lang_decl *lt = DECL_LANG_SPECIFIC (NODE);           \
1705     if (lt->decl_flags.u2sel != TF)                             \
1706       lang_check_failed (__FILE__, __LINE__, __FUNCTION__);     \
1707     &lt->decl_flags.u2; })
1708
1709 #else
1710
1711 #define LANG_DECL_U2_CHECK(NODE, TF) \
1712   (&DECL_LANG_SPECIFIC (NODE)->decl_flags.u2)
1713
1714 #endif /* ENABLE_TREE_CHECKING */
1715
1716 /* For a FUNCTION_DECL or a VAR_DECL, the language linkage for the
1717    declaration.  Some entities (like a member function in a local
1718    class, or a local variable) do not have linkage at all, and this
1719    macro should not be used in those cases.
1720
1721    Implementation note: A FUNCTION_DECL without DECL_LANG_SPECIFIC was
1722    created by language-independent code, and has C linkage.  Most
1723    VAR_DECLs have C++ linkage, and do not have DECL_LANG_SPECIFIC, but
1724    we do create DECL_LANG_SPECIFIC for variables with non-C++ linkage.  */
1725 #define DECL_LANGUAGE(NODE)                             \
1726   (DECL_LANG_SPECIFIC (NODE)                            \
1727    ? DECL_LANG_SPECIFIC (NODE)->decl_flags.language     \
1728    : (TREE_CODE (NODE) == FUNCTION_DECL                 \
1729       ? lang_c : lang_cplusplus))
1730
1731 /* Set the language linkage for NODE to LANGUAGE.  */
1732 #define SET_DECL_LANGUAGE(NODE, LANGUAGE) \
1733   (DECL_LANG_SPECIFIC (NODE)->decl_flags.language = (LANGUAGE))
1734
1735 /* For FUNCTION_DECLs: nonzero means that this function is a constructor.  */
1736 #define DECL_CONSTRUCTOR_P(NODE) \
1737   (DECL_LANG_SPECIFIC (NODE)->decl_flags.constructor_attr)
1738
1739 /* Nonzero if NODE (a FUNCTION_DECL) is a constructor for a complete
1740    object.  */
1741 #define DECL_COMPLETE_CONSTRUCTOR_P(NODE)               \
1742   (DECL_CONSTRUCTOR_P (NODE)                            \
1743    && DECL_NAME (NODE) == complete_ctor_identifier)
1744
1745 /* Nonzero if NODE (a FUNCTION_DECL) is a constructor for a base
1746    object.  */
1747 #define DECL_BASE_CONSTRUCTOR_P(NODE)           \
1748   (DECL_CONSTRUCTOR_P (NODE)                    \
1749    && DECL_NAME (NODE) == base_ctor_identifier)
1750
1751 /* Nonzero if NODE (a FUNCTION_DECL) is a constructor, but not either the
1752    specialized in-charge constructor or the specialized not-in-charge
1753    constructor.  */
1754 #define DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P(NODE)                \
1755   (DECL_CONSTRUCTOR_P (NODE) && !DECL_CLONED_FUNCTION_P (NODE))
1756
1757 /* Nonzero if NODE (a FUNCTION_DECL) is a copy constructor.  */
1758 #define DECL_COPY_CONSTRUCTOR_P(NODE) \
1759   (DECL_CONSTRUCTOR_P (NODE) && copy_fn_p (NODE) > 0)
1760
1761 /* Nonzero if NODE is a destructor.  */
1762 #define DECL_DESTRUCTOR_P(NODE)                         \
1763   (DECL_LANG_SPECIFIC (NODE)->decl_flags.destructor_attr)
1764
1765 /* Nonzero if NODE (a FUNCTION_DECL) is a destructor, but not the
1766    specialized in-charge constructor, in-charge deleting constructor,
1767    or the base destructor.  */
1768 #define DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P(NODE)                 \
1769   (DECL_DESTRUCTOR_P (NODE) && !DECL_CLONED_FUNCTION_P (NODE))
1770
1771 /* Nonzero if NODE (a FUNCTION_DECL) is a destructor for a complete
1772    object.  */
1773 #define DECL_COMPLETE_DESTRUCTOR_P(NODE)                \
1774   (DECL_DESTRUCTOR_P (NODE)                             \
1775    && DECL_NAME (NODE) == complete_dtor_identifier)
1776
1777 /* Nonzero if NODE (a FUNCTION_DECL) is a destructor for a base
1778    object.  */
1779 #define DECL_BASE_DESTRUCTOR_P(NODE)            \
1780   (DECL_DESTRUCTOR_P (NODE)                     \
1781    && DECL_NAME (NODE) == base_dtor_identifier)
1782
1783 /* Nonzero if NODE (a FUNCTION_DECL) is a destructor for a complete
1784    object that deletes the object after it has been destroyed.  */
1785 #define DECL_DELETING_DESTRUCTOR_P(NODE)                \
1786   (DECL_DESTRUCTOR_P (NODE)                             \
1787    && DECL_NAME (NODE) == deleting_dtor_identifier)
1788
1789 /* Nonzero if NODE (a FUNCTION_DECL) is a cloned constructor or
1790    destructor.  */
1791 #define DECL_CLONED_FUNCTION_P(NODE)                    \
1792   ((TREE_CODE (NODE) == FUNCTION_DECL                   \
1793     || TREE_CODE (NODE) == TEMPLATE_DECL)               \
1794    && DECL_LANG_SPECIFIC (NODE)                         \
1795    && !DECL_LANG_SPECIFIC (NODE)->decl_flags.thunk_p    \
1796    && DECL_CLONED_FUNCTION (NODE) != NULL_TREE)
1797
1798 /* If DECL_CLONED_FUNCTION_P holds, this is the function that was
1799    cloned.  */
1800 #define DECL_CLONED_FUNCTION(NODE) \
1801   (DECL_LANG_SPECIFIC (NON_THUNK_FUNCTION_CHECK(NODE))->u.f.u5.cloned_function)
1802
1803 /* Perform an action for each clone of FN, if FN is a function with
1804    clones.  This macro should be used like:
1805
1806       FOR_EACH_CLONE (clone, fn)
1807         { ... }
1808
1809   */
1810 #define FOR_EACH_CLONE(CLONE, FN)                       \
1811   if (TREE_CODE (FN) == FUNCTION_DECL                   \
1812       && (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (FN)       \
1813           || DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (FN)))   \
1814      for (CLONE = TREE_CHAIN (FN);                      \
1815           CLONE && DECL_CLONED_FUNCTION_P (CLONE);      \
1816           CLONE = TREE_CHAIN (CLONE))
1817
1818 /* Nonzero if NODE has DECL_DISCRIMINATOR and not DECL_ACCESS.  */
1819 #define DECL_DISCRIMINATOR_P(NODE)      \
1820   (TREE_CODE (NODE) == VAR_DECL         \
1821    && DECL_FUNCTION_SCOPE_P (NODE))
1822
1823 /* Discriminator for name mangling.  */
1824 #define DECL_DISCRIMINATOR(NODE) (LANG_DECL_U2_CHECK (NODE, 1)->discriminator)
1825
1826 /* Nonzero if the VTT parm has been added to NODE.  */
1827 #define DECL_HAS_VTT_PARM_P(NODE) \
1828   (DECL_LANG_SPECIFIC (NODE)->decl_flags.has_vtt_parm_p)
1829
1830 /* Nonzero if NODE is a FUNCTION_DECL for which a VTT parameter is
1831    required.  */
1832 #define DECL_NEEDS_VTT_PARM_P(NODE)                     \
1833   (CLASSTYPE_VBASECLASSES (DECL_CONTEXT (NODE))         \
1834    && (DECL_BASE_CONSTRUCTOR_P (NODE)                   \
1835        || DECL_BASE_DESTRUCTOR_P (NODE)))
1836
1837 /* Nonzero if NODE is a user-defined conversion operator.  */
1838 #define DECL_CONV_FN_P(NODE) \
1839   (DECL_NAME (NODE) && IDENTIFIER_TYPENAME_P (DECL_NAME (NODE)))
1840
1841 /* If FN is a conversion operator, the type to which it converts.
1842    Otherwise, NULL_TREE.  */
1843 #define DECL_CONV_FN_TYPE(FN) \
1844   (DECL_CONV_FN_P (FN) ? TREE_TYPE (DECL_NAME (FN)) : NULL_TREE)
1845
1846 /* Nonzero if NODE, which is a TEMPLATE_DECL, is a template
1847    conversion operator to a type dependent on the innermost template
1848    args.  */
1849 #define DECL_TEMPLATE_CONV_FN_P(NODE) \
1850   (DECL_LANG_SPECIFIC (NODE)->decl_flags.template_conv_p)
1851
1852 /* Set the overloaded operator code for NODE to CODE.  */
1853 #define SET_OVERLOADED_OPERATOR_CODE(NODE, CODE) \
1854   (DECL_LANG_SPECIFIC (NODE)->u.f.operator_code = (CODE))
1855
1856 /* If NODE is an overloaded operator, then this returns the TREE_CODE
1857    associated with the overloaded operator.
1858    DECL_ASSIGNMENT_OPERATOR_P must also be checked to determine
1859    whether or not NODE is an assignment operator.  If NODE is not an
1860    overloaded operator, ERROR_MARK is returned.  Since the numerical
1861    value of ERROR_MARK is zero, this macro can be used as a predicate
1862    to test whether or not NODE is an overloaded operator.  */
1863 #define DECL_OVERLOADED_OPERATOR_P(NODE)                \
1864   (IDENTIFIER_OPNAME_P (DECL_NAME (NODE))               \
1865    ? DECL_LANG_SPECIFIC (NODE)->u.f.operator_code : ERROR_MARK)
1866
1867 /* Nonzero if NODE is an assignment operator.  */
1868 #define DECL_ASSIGNMENT_OPERATOR_P(NODE) \
1869   (DECL_LANG_SPECIFIC (NODE)->decl_flags.assignment_operator_p)
1870
1871 /* For FUNCTION_DECLs: nonzero means that this function is a
1872    constructor or a destructor with an extra in-charge parameter to
1873    control whether or not virtual bases are constructed.  */
1874 #define DECL_HAS_IN_CHARGE_PARM_P(NODE) \
1875   (DECL_LANG_SPECIFIC (NODE)->decl_flags.has_in_charge_parm_p)
1876
1877 /* Nonzero if DECL is a declaration of __builtin_constant_p.  */
1878 #define DECL_IS_BUILTIN_CONSTANT_P(NODE)                \
1879  (TREE_CODE (NODE) == FUNCTION_DECL                     \
1880   && DECL_BUILT_IN_CLASS (NODE) == BUILT_IN_NORMAL      \
1881   && DECL_FUNCTION_CODE (NODE) == BUILT_IN_CONSTANT_P)
1882
1883 /* Nonzero for _DECL means that this decl appears in (or will appear
1884    in) as a member in a RECORD_TYPE or UNION_TYPE node.  It is also for
1885    detecting circularity in case members are multiply defined.  In the
1886    case of a VAR_DECL, it is also used to determine how program storage
1887    should be allocated.  */
1888 #define DECL_IN_AGGR_P(NODE) (DECL_LANG_FLAG_3 (NODE))
1889
1890 /* Nonzero for a VAR_DECL means that the variable's initialization (if
1891    any) has been processed.  (In general, DECL_INITIALIZED_P is
1892    !DECL_EXTERN, but static data members may be initialized even if
1893    not defined.)  */
1894 #define DECL_INITIALIZED_P(NODE) \
1895    (TREE_LANG_FLAG_1 (VAR_DECL_CHECK (NODE)))
1896
1897 /* Nonzero for a VAR_DECL iff an explicit initializer was provided.  */
1898 #define DECL_NONTRIVIALLY_INITIALIZED_P(NODE)   \
1899    (TREE_LANG_FLAG_3 (VAR_DECL_CHECK (NODE)))
1900
1901 /* Nonzero for a VAR_DECL that was initialized with a
1902    constant-expression.  */
1903 #define DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P(NODE) \
1904   (TREE_LANG_FLAG_2 (VAR_DECL_CHECK (NODE)))
1905
1906 /* Nonzero for a VAR_DECL that can be used in an integral constant
1907    expression.
1908
1909       [expr.const]
1910
1911       An integral constant-expression can only involve ... const
1912       variables of static or enumeration types initialized with
1913       constant expressions ...
1914
1915    The standard does not require that the expression be non-volatile.
1916    G++ implements the proposed correction in DR 457.  */
1917 #define DECL_INTEGRAL_CONSTANT_VAR_P(NODE)              \
1918   (TREE_CODE (NODE) == VAR_DECL                         \
1919    && CP_TYPE_CONST_NON_VOLATILE_P (TREE_TYPE (NODE))   \
1920    && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (NODE)) \
1921    && DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (NODE))
1922
1923 /* Nonzero if the DECL was initialized in the class definition itself,
1924    rather than outside the class.  This is used for both static member
1925    VAR_DECLS, and FUNTION_DECLS that are defined in the class.  */
1926 #define DECL_INITIALIZED_IN_CLASS_P(DECL) \
1927  (DECL_LANG_SPECIFIC (DECL)->decl_flags.initialized_in_class)
1928
1929 /* Nonzero for DECL means that this decl is just a friend declaration,
1930    and should not be added to the list of members for this class.  */
1931 #define DECL_FRIEND_P(NODE) (DECL_LANG_SPECIFIC (NODE)->decl_flags.friend_attr)
1932
1933 /* A TREE_LIST of the types which have befriended this FUNCTION_DECL.  */
1934 #define DECL_BEFRIENDING_CLASSES(NODE) \
1935   (DECL_LANG_SPECIFIC (NODE)->u.f.befriending_classes)
1936
1937 /* Nonzero for FUNCTION_DECL means that this decl is a static
1938    member function.  */
1939 #define DECL_STATIC_FUNCTION_P(NODE) \
1940   (DECL_LANG_SPECIFIC (NODE)->decl_flags.static_function)
1941
1942 /* Nonzero for FUNCTION_DECL means that this decl is a non-static
1943    member function.  */
1944 #define DECL_NONSTATIC_MEMBER_FUNCTION_P(NODE) \
1945   (TREE_CODE (TREE_TYPE (NODE)) == METHOD_TYPE)
1946
1947 /* Nonzero for FUNCTION_DECL means that this decl is a member function
1948    (static or non-static).  */
1949 #define DECL_FUNCTION_MEMBER_P(NODE) \
1950  (DECL_NONSTATIC_MEMBER_FUNCTION_P (NODE) || DECL_STATIC_FUNCTION_P (NODE))
1951
1952 /* Nonzero for FUNCTION_DECL means that this member function
1953    has `this' as const X *const.  */
1954 #define DECL_CONST_MEMFUNC_P(NODE)                                       \
1955   (DECL_NONSTATIC_MEMBER_FUNCTION_P (NODE)                               \
1956    && CP_TYPE_CONST_P (TREE_TYPE (TREE_VALUE                             \
1957                                   (TYPE_ARG_TYPES (TREE_TYPE (NODE))))))
1958
1959 /* Nonzero for FUNCTION_DECL means that this member function
1960    has `this' as volatile X *const.  */
1961 #define DECL_VOLATILE_MEMFUNC_P(NODE)                                    \
1962   (DECL_NONSTATIC_MEMBER_FUNCTION_P (NODE)                               \
1963    && CP_TYPE_VOLATILE_P (TREE_TYPE (TREE_VALUE                          \
1964                                   (TYPE_ARG_TYPES (TREE_TYPE (NODE))))))
1965
1966 /* Nonzero for a DECL means that this member is a non-static member.  */
1967 #define DECL_NONSTATIC_MEMBER_P(NODE)           \
1968   ((TREE_CODE (NODE) == FUNCTION_DECL           \
1969     && DECL_NONSTATIC_MEMBER_FUNCTION_P (NODE)) \
1970    || TREE_CODE (NODE) == FIELD_DECL)
1971
1972 /* Nonzero for _DECL means that this member object type
1973    is mutable.  */
1974 #define DECL_MUTABLE_P(NODE) (DECL_LANG_FLAG_0 (NODE))
1975
1976 /* Nonzero for _DECL means that this constructor is a non-converting
1977    constructor.  */
1978 #define DECL_NONCONVERTING_P(NODE) \
1979   (DECL_LANG_SPECIFIC (NODE)->decl_flags.nonconverting)
1980
1981 /* Nonzero for FUNCTION_DECL means that this member function is a pure
1982    virtual function.  */
1983 #define DECL_PURE_VIRTUAL_P(NODE) \
1984   (DECL_LANG_SPECIFIC (NODE)->decl_flags.pure_virtual)
1985
1986 /* True (in a FUNCTION_DECL) if NODE is a virtual function that is an
1987    invalid overrider for a function from a base class.  Once we have
1988    complained about an invalid overrider we avoid complaining about it
1989    again.  */
1990 #define DECL_INVALID_OVERRIDER_P(NODE) \
1991   (DECL_LANG_FLAG_4 (NODE))
1992
1993 /* The thunks associated with NODE, a FUNCTION_DECL.  */
1994 #define DECL_THUNKS(NODE) \
1995   (DECL_LANG_SPECIFIC (NODE)->u.f.context)
1996
1997 /* Nonzero if NODE is a thunk, rather than an ordinary function.  */
1998 #define DECL_THUNK_P(NODE)                      \
1999   (TREE_CODE (NODE) == FUNCTION_DECL            \
2000    && DECL_LANG_SPECIFIC (NODE)                 \
2001    && DECL_LANG_SPECIFIC (NODE)->decl_flags.thunk_p)
2002
2003 /* Set DECL_THUNK_P for node.  */
2004 #define SET_DECL_THUNK_P(NODE, THIS_ADJUSTING)                  \
2005   (DECL_LANG_SPECIFIC (NODE)->decl_flags.thunk_p = 1,           \
2006    DECL_LANG_SPECIFIC (NODE)->u.f.u3sel = 1,                    \
2007    DECL_LANG_SPECIFIC (NODE)->decl_flags.this_thunk_p = (THIS_ADJUSTING))
2008
2009 /* Nonzero if NODE is a this pointer adjusting thunk.  */
2010 #define DECL_THIS_THUNK_P(NODE)                 \
2011   (DECL_THUNK_P (NODE) && DECL_LANG_SPECIFIC (NODE)->decl_flags.this_thunk_p)
2012
2013 /* Nonzero if NODE is a result pointer adjusting thunk.  */
2014 #define DECL_RESULT_THUNK_P(NODE)                       \
2015   (DECL_THUNK_P (NODE) && !DECL_LANG_SPECIFIC (NODE)->decl_flags.this_thunk_p)
2016
2017 /* Nonzero if NODE is a FUNCTION_DECL, but not a thunk.  */
2018 #define DECL_NON_THUNK_FUNCTION_P(NODE)                         \
2019   (TREE_CODE (NODE) == FUNCTION_DECL && !DECL_THUNK_P (NODE))
2020
2021 /* Nonzero if NODE is `extern "C"'.  */
2022 #define DECL_EXTERN_C_P(NODE) \
2023   (DECL_LANGUAGE (NODE) == lang_c)
2024
2025 /* Nonzero if NODE is an `extern "C"' function.  */
2026 #define DECL_EXTERN_C_FUNCTION_P(NODE) \
2027   (DECL_NON_THUNK_FUNCTION_P (NODE) && DECL_EXTERN_C_P (NODE))
2028
2029 /* True iff DECL is an entity with vague linkage whose definition is
2030    available in this translation unit.  */
2031 #define DECL_REPO_AVAILABLE_P(NODE) \
2032   (DECL_LANG_SPECIFIC (NODE)->decl_flags.repo_available_p)
2033
2034 /* Nonzero if this DECL is the __PRETTY_FUNCTION__ variable in a
2035    template function.  */
2036 #define DECL_PRETTY_FUNCTION_P(NODE) \
2037   (TREE_LANG_FLAG_0 (VAR_DECL_CHECK (NODE)))
2038
2039 /* The _TYPE context in which this _DECL appears.  This field holds the
2040    class where a virtual function instance is actually defined.  */
2041 #define DECL_CLASS_CONTEXT(NODE) \
2042   (DECL_CLASS_SCOPE_P (NODE) ? DECL_CONTEXT (NODE) : NULL_TREE)
2043
2044 /* For a non-member friend function, the class (if any) in which this
2045    friend was defined.  For example, given:
2046
2047      struct S { friend void f (); };
2048
2049    the DECL_FRIEND_CONTEXT for `f' will be `S'.  */
2050 #define DECL_FRIEND_CONTEXT(NODE)                               \
2051   ((DECL_FRIEND_P (NODE) && !DECL_FUNCTION_MEMBER_P (NODE))     \
2052    ? DECL_LANG_SPECIFIC (NODE)->u.f.context                     \
2053    : NULL_TREE)
2054
2055 /* Set the DECL_FRIEND_CONTEXT for NODE to CONTEXT.  */
2056 #define SET_DECL_FRIEND_CONTEXT(NODE, CONTEXT) \
2057   (DECL_LANG_SPECIFIC (NODE)->u.f.context = (CONTEXT))
2058
2059 /* NULL_TREE in DECL_CONTEXT represents the global namespace.  */
2060 #define CP_DECL_CONTEXT(NODE) \
2061   (DECL_CONTEXT (NODE) ? DECL_CONTEXT (NODE) : global_namespace)
2062 #define CP_TYPE_CONTEXT(NODE) \
2063   (TYPE_CONTEXT (NODE) ? TYPE_CONTEXT (NODE) : global_namespace)
2064 #define FROB_CONTEXT(NODE)   ((NODE) == global_namespace ? NULL_TREE : (NODE))
2065
2066 /* 1 iff NODE has namespace scope, including the global namespace.  */
2067 #define DECL_NAMESPACE_SCOPE_P(NODE)                            \
2068   (!DECL_TEMPLATE_PARM_P (NODE)                                 \
2069    && TREE_CODE (CP_DECL_CONTEXT (NODE)) == NAMESPACE_DECL)
2070
2071 /* 1 iff NODE is a class member.  */
2072 #define DECL_CLASS_SCOPE_P(NODE) \
2073   (DECL_CONTEXT (NODE) && TYPE_P (DECL_CONTEXT (NODE)))
2074
2075 #define TYPE_CLASS_SCOPE_P(NODE) \
2076   (TYPE_CONTEXT (NODE) && TYPE_P (TYPE_CONTEXT (NODE)))
2077
2078 /* 1 iff NODE is function-local.  */
2079 #define DECL_FUNCTION_SCOPE_P(NODE) \
2080   (DECL_CONTEXT (NODE) \
2081    && TREE_CODE (DECL_CONTEXT (NODE)) == FUNCTION_DECL)
2082
2083 /* 1 iff VAR_DECL node NODE is a type-info decl.  This flag is set for
2084    both the primary typeinfo object and the associated NTBS name.  */
2085 #define DECL_TINFO_P(NODE) TREE_LANG_FLAG_4 (VAR_DECL_CHECK (NODE))
2086
2087 /* 1 iff VAR_DECL node NODE is virtual table or VTT.  */
2088 #define DECL_VTABLE_OR_VTT_P(NODE) TREE_LANG_FLAG_5 (VAR_DECL_CHECK (NODE))
2089
2090 /* Returns 1 iff VAR_DECL is a construction virtual table.
2091    DECL_VTABLE_OR_VTT_P will be true in this case and must be checked
2092    before using this macro.  */
2093 #define DECL_CONSTRUCTION_VTABLE_P(NODE) \
2094   TREE_LANG_FLAG_6 (VAR_DECL_CHECK (NODE))
2095
2096 /* 1 iff NODE is function-local, but for types.  */
2097 #define LOCAL_CLASS_P(NODE)                             \
2098   (decl_function_context (TYPE_MAIN_DECL (NODE)) != NULL_TREE)
2099
2100 /* For a NAMESPACE_DECL: the list of using namespace directives
2101    The PURPOSE is the used namespace, the value is the namespace
2102    that is the common ancestor.  */
2103 #define DECL_NAMESPACE_USING(NODE) DECL_VINDEX (NAMESPACE_DECL_CHECK (NODE))
2104
2105 /* In a NAMESPACE_DECL, the DECL_INITIAL is used to record all users
2106    of a namespace, to record the transitive closure of using namespace.  */
2107 #define DECL_NAMESPACE_USERS(NODE) DECL_INITIAL (NAMESPACE_DECL_CHECK (NODE))
2108
2109 /* In a NAMESPACE_DECL, the list of namespaces which have associated
2110    themselves with this one.  */
2111 #define DECL_NAMESPACE_ASSOCIATIONS(NODE) \
2112   (NAMESPACE_DECL_CHECK (NODE)->decl_non_common.saved_tree)
2113
2114 /* In a NAMESPACE_DECL, points to the original namespace if this is
2115    a namespace alias.  */
2116 #define DECL_NAMESPACE_ALIAS(NODE) \
2117         DECL_ABSTRACT_ORIGIN (NAMESPACE_DECL_CHECK (NODE))
2118 #define ORIGINAL_NAMESPACE(NODE)  \
2119   (DECL_NAMESPACE_ALIAS (NODE) ? DECL_NAMESPACE_ALIAS (NODE) : (NODE))
2120
2121 /* Nonzero if NODE is the std namespace.  */
2122 #define DECL_NAMESPACE_STD_P(NODE)                      \
2123   (TREE_CODE (NODE) == NAMESPACE_DECL                   \
2124    && CP_DECL_CONTEXT (NODE) == global_namespace        \
2125    && DECL_NAME (NODE) == std_identifier)
2126
2127 /* In a TREE_LIST concatenating using directives, indicate indirect
2128    directives  */
2129 #define TREE_INDIRECT_USING(NODE) (TREE_LIST_CHECK (NODE)->base.lang_flag_0)
2130
2131 extern tree decl_shadowed_for_var_lookup (tree);
2132 extern void decl_shadowed_for_var_insert (tree, tree);
2133
2134 /* Non zero if this is a using decl for a dependent scope. */
2135 #define DECL_DEPENDENT_P(NODE) DECL_LANG_FLAG_0 (USING_DECL_CHECK (NODE))
2136
2137 /* The scope named in a using decl.  */
2138 #define USING_DECL_SCOPE(NODE) TREE_TYPE (USING_DECL_CHECK (NODE))
2139
2140 /* The decls named by a using decl.  */
2141 #define USING_DECL_DECLS(NODE) DECL_INITIAL (USING_DECL_CHECK (NODE))
2142
2143 /* In a VAR_DECL, true if we have a shadowed local variable
2144    in the shadowed var table for this VAR_DECL.  */
2145 #define DECL_HAS_SHADOWED_FOR_VAR_P(NODE) \
2146   (VAR_DECL_CHECK (NODE)->decl_with_vis.shadowed_for_var_p)
2147
2148 /* In a VAR_DECL for a variable declared in a for statement,
2149    this is the shadowed (local) variable.  */
2150 #define DECL_SHADOWED_FOR_VAR(NODE) \
2151   (DECL_HAS_SHADOWED_FOR_VAR_P(NODE) ? decl_shadowed_for_var_lookup (NODE) : NULL)
2152
2153 #define SET_DECL_SHADOWED_FOR_VAR(NODE, VAL) \
2154   (decl_shadowed_for_var_insert (NODE, VAL))
2155
2156 /* In a FUNCTION_DECL, this is nonzero if this function was defined in
2157    the class definition.  We have saved away the text of the function,
2158    but have not yet processed it.  */
2159 #define DECL_PENDING_INLINE_P(NODE) \
2160   (DECL_LANG_SPECIFIC (NODE)->u.f.pending_inline_p)
2161
2162 /* If DECL_PENDING_INLINE_P holds, this is the saved text of the
2163    function.  */
2164 #define DECL_PENDING_INLINE_INFO(NODE) \
2165   (DECL_LANG_SPECIFIC (NODE)->u.f.u.pending_inline_info)
2166
2167 /* For a TYPE_DECL: if this structure has many fields, we'll sort them
2168    and put them into a TREE_VEC.  */
2169 #define DECL_SORTED_FIELDS(NODE) \
2170   (DECL_LANG_SPECIFIC (TYPE_DECL_CHECK (NODE))->u.f.u.sorted_fields)
2171
2172 /* True if on the deferred_fns (see decl2.c) list.  */
2173 #define DECL_DEFERRED_FN(DECL) \
2174   (DECL_LANG_SPECIFIC (DECL)->decl_flags.deferred)
2175
2176 /* If non-NULL for a VAR_DECL, FUNCTION_DECL, TYPE_DECL or
2177    TEMPLATE_DECL, the entity is either a template specialization (if
2178    DECL_USE_TEMPLATE is nonzero) or the abstract instance of the
2179    template itself.
2180
2181    In either case, DECL_TEMPLATE_INFO is a TREE_LIST, whose
2182    TREE_PURPOSE is the TEMPLATE_DECL of which this entity is a
2183    specialization or abstract instance.  The TREE_VALUE is the
2184    template arguments used to specialize the template.
2185    
2186    Consider:
2187
2188       template <typename T> struct S { friend void f(T) {} };
2189
2190    In this case, S<int>::f is, from the point of view of the compiler,
2191    an instantiation of a template -- but, from the point of view of
2192    the language, each instantiation of S results in a wholly unrelated
2193    global function f.  In this case, DECL_TEMPLATE_INFO for S<int>::f
2194    will be non-NULL, but DECL_USE_TEMPLATE will be zero.  */
2195 #define DECL_TEMPLATE_INFO(NODE) \
2196   (DECL_LANG_SPECIFIC (VAR_TEMPL_TYPE_OR_FUNCTION_DECL_CHECK (NODE)) \
2197    ->decl_flags.u.template_info)
2198
2199 /* For a VAR_DECL, indicates that the variable has been processed.
2200    This flag is set and unset throughout the code; it is always
2201    used for a temporary purpose.  */
2202 #define DECL_VAR_MARKED_P(NODE) \
2203   (DECL_LANG_FLAG_4 (VAR_DECL_CHECK (NODE)))
2204
2205 /* Template information for a RECORD_TYPE or UNION_TYPE.  */
2206 #define CLASSTYPE_TEMPLATE_INFO(NODE) \
2207   (LANG_TYPE_CLASS_CHECK (RECORD_OR_UNION_CHECK (NODE))->template_info)
2208
2209 /* Template information for an ENUMERAL_TYPE.  Although an enumeration may
2210    not be a primary template, it may be declared within the scope of a
2211    primary template and the enumeration constants may depend on
2212    non-type template parameters.  */
2213 #define ENUM_TEMPLATE_INFO(NODE) \
2214   (TYPE_LANG_SLOT_1 (ENUMERAL_TYPE_CHECK (NODE)))
2215
2216 /* Template information for a template template parameter.  */
2217 #define TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO(NODE) \
2218   (LANG_TYPE_CLASS_CHECK (BOUND_TEMPLATE_TEMPLATE_PARM_TYPE_CHECK (NODE)) \
2219    ->template_info)
2220
2221 /* Template information for an ENUMERAL_, RECORD_, or UNION_TYPE.  */
2222 #define TYPE_TEMPLATE_INFO(NODE)                        \
2223   (TREE_CODE (NODE) == ENUMERAL_TYPE                    \
2224    ? ENUM_TEMPLATE_INFO (NODE) :                        \
2225    (TREE_CODE (NODE) == BOUND_TEMPLATE_TEMPLATE_PARM    \
2226     ? TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (NODE) :     \
2227     (TYPE_LANG_SPECIFIC (NODE)                          \
2228      ? CLASSTYPE_TEMPLATE_INFO (NODE)                   \
2229      : NULL_TREE)))
2230
2231 /* Set the template information for an ENUMERAL_, RECORD_, or
2232    UNION_TYPE to VAL.  */
2233 #define SET_TYPE_TEMPLATE_INFO(NODE, VAL)       \
2234   (TREE_CODE (NODE) == ENUMERAL_TYPE            \
2235    ? (ENUM_TEMPLATE_INFO (NODE) = (VAL))        \
2236    : (CLASSTYPE_TEMPLATE_INFO (NODE) = (VAL)))
2237
2238 #define TI_TEMPLATE(NODE) (TREE_PURPOSE (NODE))
2239 #define TI_ARGS(NODE) (TREE_VALUE (NODE))
2240 #define TI_PENDING_TEMPLATE_FLAG(NODE) TREE_LANG_FLAG_1 (NODE)
2241
2242 /* We use TREE_VECs to hold template arguments.  If there is only one
2243    level of template arguments, then the TREE_VEC contains the
2244    arguments directly.  If there is more than one level of template
2245    arguments, then each entry in the TREE_VEC is itself a TREE_VEC,
2246    containing the template arguments for a single level.  The first
2247    entry in the outer TREE_VEC is the outermost level of template
2248    parameters; the last is the innermost.
2249
2250    It is incorrect to ever form a template argument vector containing
2251    only one level of arguments, but which is a TREE_VEC containing as
2252    its only entry the TREE_VEC for that level.  */
2253
2254 /* Nonzero if the template arguments is actually a vector of vectors,
2255    rather than just a vector.  */
2256 #define TMPL_ARGS_HAVE_MULTIPLE_LEVELS(NODE)            \
2257   (NODE && TREE_VEC_ELT (NODE, 0)                       \
2258    && TREE_CODE (TREE_VEC_ELT (NODE, 0)) == TREE_VEC)
2259
2260 /* The depth of a template argument vector.  When called directly by
2261    the parser, we use a TREE_LIST rather than a TREE_VEC to represent
2262    template arguments.  In fact, we may even see NULL_TREE if there
2263    are no template arguments.  In both of those cases, there is only
2264    one level of template arguments.  */
2265 #define TMPL_ARGS_DEPTH(NODE)                                   \
2266   (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (NODE) ? TREE_VEC_LENGTH (NODE) : 1)
2267
2268 /* The LEVELth level of the template ARGS.  The outermost level of
2269    args is level 1, not level 0.  */
2270 #define TMPL_ARGS_LEVEL(ARGS, LEVEL)            \
2271   (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (ARGS)        \
2272    ? TREE_VEC_ELT (ARGS, (LEVEL) - 1) : (ARGS))
2273
2274 /* Set the LEVELth level of the template ARGS to VAL.  This macro does
2275    not work with single-level argument vectors.  */
2276 #define SET_TMPL_ARGS_LEVEL(ARGS, LEVEL, VAL)   \
2277   (TREE_VEC_ELT (ARGS, (LEVEL) - 1) = (VAL))
2278
2279 /* Accesses the IDXth parameter in the LEVELth level of the ARGS.  */
2280 #define TMPL_ARG(ARGS, LEVEL, IDX)                              \
2281   (TREE_VEC_ELT (TMPL_ARGS_LEVEL (ARGS, LEVEL), IDX))
2282
2283 /* Given a single level of template arguments in NODE, return the
2284    number of arguments.  */
2285 #define NUM_TMPL_ARGS(NODE)                             \
2286   (TREE_VEC_LENGTH (NODE))
2287
2288 /* Returns the innermost level of template arguments in ARGS.  */
2289 #define INNERMOST_TEMPLATE_ARGS(NODE) \
2290   (get_innermost_template_args ((NODE), 1))
2291
2292 /* The number of levels of template parameters given by NODE.  */
2293 #define TMPL_PARMS_DEPTH(NODE) \
2294   ((HOST_WIDE_INT) TREE_INT_CST_LOW (TREE_PURPOSE (NODE)))
2295
2296 /* The TEMPLATE_DECL instantiated or specialized by NODE.  This
2297    TEMPLATE_DECL will be the immediate parent, not the most general
2298    template.  For example, in:
2299
2300       template <class T> struct S { template <class U> void f(U); }
2301
2302    the FUNCTION_DECL for S<int>::f<double> will have, as its
2303    DECL_TI_TEMPLATE, `template <class U> S<int>::f<U>'.
2304
2305    As a special case, for a member friend template of a template
2306    class, this value will not be a TEMPLATE_DECL, but rather an
2307    IDENTIFIER_NODE or OVERLOAD indicating the name of the template and
2308    any explicit template arguments provided.  For example, in:
2309
2310      template <class T> struct S { friend void f<int>(int, double); }
2311
2312    the DECL_TI_TEMPLATE will be an IDENTIFIER_NODE for `f' and the
2313    DECL_TI_ARGS will be {int}.  */
2314 #define DECL_TI_TEMPLATE(NODE)      TI_TEMPLATE (DECL_TEMPLATE_INFO (NODE))
2315
2316 /* The template arguments used to obtain this decl from the most
2317    general form of DECL_TI_TEMPLATE.  For the example given for
2318    DECL_TI_TEMPLATE, the DECL_TI_ARGS will be {int, double}.  These
2319    are always the full set of arguments required to instantiate this
2320    declaration from the most general template specialized here.  */
2321 #define DECL_TI_ARGS(NODE)          TI_ARGS (DECL_TEMPLATE_INFO (NODE))
2322
2323 /* The TEMPLATE_DECL associated with NODE, a class type.  Even if NODE
2324    will be generated from a partial specialization, the TEMPLATE_DECL
2325    referred to here will be the original template.  For example,
2326    given:
2327
2328       template <typename T> struct S {};
2329       template <typename T> struct S<T*> {};
2330       
2331    the CLASSTPYE_TI_TEMPLATE for S<int*> will be S, not the S<T*>.  */
2332 #define CLASSTYPE_TI_TEMPLATE(NODE) TI_TEMPLATE (CLASSTYPE_TEMPLATE_INFO (NODE))
2333 #define CLASSTYPE_TI_ARGS(NODE)     TI_ARGS (CLASSTYPE_TEMPLATE_INFO (NODE))
2334
2335 /* For a template instantiation TYPE, returns the TYPE corresponding
2336    to the primary template.  Otherwise returns TYPE itself.  */
2337 #define CLASSTYPE_PRIMARY_TEMPLATE_TYPE(TYPE)                           \
2338   ((CLASSTYPE_USE_TEMPLATE ((TYPE))                                     \
2339     && !CLASSTYPE_TEMPLATE_SPECIALIZATION ((TYPE)))                     \
2340    ? TREE_TYPE (DECL_TEMPLATE_RESULT (DECL_PRIMARY_TEMPLATE             \
2341                                       (CLASSTYPE_TI_TEMPLATE ((TYPE))))) \
2342    : (TYPE))
2343
2344 /* Like CLASS_TI_TEMPLATE, but also works for ENUMERAL_TYPEs.  */
2345 #define TYPE_TI_TEMPLATE(NODE)                  \
2346   (TI_TEMPLATE (TYPE_TEMPLATE_INFO (NODE)))
2347
2348 /* Like DECL_TI_ARGS, but for an ENUMERAL_, RECORD_, or UNION_TYPE.  */
2349 #define TYPE_TI_ARGS(NODE)                      \
2350   (TI_ARGS (TYPE_TEMPLATE_INFO (NODE)))
2351
2352 #define INNERMOST_TEMPLATE_PARMS(NODE)  TREE_VALUE (NODE)
2353
2354 /* Nonzero if NODE (a TEMPLATE_DECL) is a member template, in the
2355    sense of [temp.mem].  */
2356 #define DECL_MEMBER_TEMPLATE_P(NODE) \
2357   (DECL_LANG_FLAG_1 (TEMPLATE_DECL_CHECK (NODE)))
2358
2359 /* Nonzero if the NODE corresponds to the template parameters for a
2360    member template, whose inline definition is being processed after
2361    the class definition is complete.  */
2362 #define TEMPLATE_PARMS_FOR_INLINE(NODE) TREE_LANG_FLAG_1 (NODE)
2363
2364 /* Determine if a parameter (i.e., a PARM_DECL) is a function
2365    parameter pack.  */
2366 #define FUNCTION_PARAMETER_PACK_P(NODE) \
2367   (DECL_LANG_FLAG_1 (PARM_DECL_CHECK (NODE)))
2368
2369 /* Determines if NODE is an expansion of one or more parameter packs,
2370    e.g., a TYPE_PACK_EXPANSION or EXPR_PACK_EXPANSION.  */
2371 #define PACK_EXPANSION_P(NODE)                 \
2372   (TREE_CODE (NODE) == TYPE_PACK_EXPANSION     \
2373    || TREE_CODE (NODE) == EXPR_PACK_EXPANSION)
2374
2375 /* Extracts the type or expression pattern from a TYPE_PACK_EXPANSION or
2376    EXPR_PACK_EXPANSION.  */
2377 #define PACK_EXPANSION_PATTERN(NODE)                            \
2378   (TREE_CODE (NODE) == TYPE_PACK_EXPANSION? TREE_TYPE (NODE)    \
2379    : TREE_OPERAND (NODE, 0))
2380
2381 /* Sets the type or expression pattern for a TYPE_PACK_EXPANSION or
2382    EXPR_PACK_EXPANSION.  */
2383 #define SET_PACK_EXPANSION_PATTERN(NODE,VALUE)  \
2384   if (TREE_CODE (NODE) == TYPE_PACK_EXPANSION)  \
2385     TREE_TYPE (NODE) = VALUE;                   \
2386   else                                          \
2387     TREE_OPERAND (NODE, 0) = VALUE
2388
2389 /* The list of parameter packs used in the PACK_EXPANSION_* node. The
2390    TREE_VALUE of each TREE_LIST contains the parameter packs.  */
2391 #define PACK_EXPANSION_PARAMETER_PACKS(NODE) TREE_CHAIN (NODE)
2392
2393 /* Determine if this is an argument pack.  */
2394 #define ARGUMENT_PACK_P(NODE)                          \
2395   (TREE_CODE (NODE) == TYPE_ARGUMENT_PACK              \
2396    || TREE_CODE (NODE) == NONTYPE_ARGUMENT_PACK)
2397
2398 /* The arguments stored in an argument pack. Arguments are stored in a
2399    TREE_VEC, which may have length zero.  */
2400 #define ARGUMENT_PACK_ARGS(NODE)                               \
2401   (TREE_CODE (NODE) == TYPE_ARGUMENT_PACK? TREE_TYPE (NODE)    \
2402    : TREE_OPERAND (NODE, 0))
2403
2404 /* Set the arguments stored in an argument pack. VALUE must be a
2405    TREE_VEC.  */
2406 #define SET_ARGUMENT_PACK_ARGS(NODE,VALUE)     \
2407   if (TREE_CODE (NODE) == TYPE_ARGUMENT_PACK)  \
2408     TREE_TYPE (NODE) = VALUE;                           \
2409   else                                                  \
2410     TREE_OPERAND (NODE, 0) = VALUE
2411
2412 /* Whether the argument pack is "incomplete", meaning that more
2413    arguments can still be deduced. Incomplete argument packs are only
2414    used when the user has provided an explicit template argument list
2415    for a variadic function template. Some of the explicit template
2416    arguments will be placed into the beginning of the argument pack,
2417    but additional arguments might still be deduced.  */
2418 #define ARGUMENT_PACK_INCOMPLETE_P(NODE)        \
2419   TREE_LANG_FLAG_0 (ARGUMENT_PACK_ARGS (NODE))
2420
2421 /* When ARGUMENT_PACK_INCOMPLETE_P, stores the explicit template
2422    arguments used to fill this pack.  */
2423 #define ARGUMENT_PACK_EXPLICIT_ARGS(NODE)       \
2424   TREE_TYPE (ARGUMENT_PACK_ARGS (NODE))
2425
2426 /* In an ARGUMENT_PACK_SELECT, the argument pack from which an
2427    argument will be selected.  */
2428 #define ARGUMENT_PACK_SELECT_FROM_PACK(NODE)                            \
2429   (((struct tree_argument_pack_select *)ARGUMENT_PACK_SELECT_CHECK (NODE))->argument_pack)
2430
2431 /* In an ARGUMENT_PACK_SELECT, the index of the argument we want to
2432    select.  */
2433 #define ARGUMENT_PACK_SELECT_INDEX(NODE)                                \
2434   (((struct tree_argument_pack_select *)ARGUMENT_PACK_SELECT_CHECK (NODE))->index)
2435   
2436 /* In an ARGUMENT_PACK_SELECT, the actual underlying argument that the
2437    ARGUMENT_PACK_SELECT represents. */
2438 #define ARGUMENT_PACK_SELECT_ARG(NODE)                                  \
2439   TREE_VEC_ELT (ARGUMENT_PACK_ARGS (ARGUMENT_PACK_SELECT_FROM_PACK (NODE)), \
2440                 ARGUMENT_PACK_SELECT_INDEX (NODE));
2441
2442 /* In a FUNCTION_DECL, the saved language-specific per-function data.  */
2443 #define DECL_SAVED_FUNCTION_DATA(NODE)                  \
2444   (DECL_LANG_SPECIFIC (FUNCTION_DECL_CHECK (NODE))      \
2445    ->u.f.u.saved_language_function)
2446
2447 /* Indicates an indirect_expr is for converting a reference.  */
2448 #define REFERENCE_REF_P(NODE) \
2449   TREE_LANG_FLAG_0 (INDIRECT_REF_CHECK (NODE))
2450
2451 #define NEW_EXPR_USE_GLOBAL(NODE) \
2452   TREE_LANG_FLAG_0 (NEW_EXPR_CHECK (NODE))
2453 #define DELETE_EXPR_USE_GLOBAL(NODE) \
2454   TREE_LANG_FLAG_0 (DELETE_EXPR_CHECK (NODE))
2455 #define DELETE_EXPR_USE_VEC(NODE) \
2456   TREE_LANG_FLAG_1 (DELETE_EXPR_CHECK (NODE))
2457
2458 /* Indicates that this is a non-dependent COMPOUND_EXPR which will
2459    resolve to a function call.  */
2460 #define COMPOUND_EXPR_OVERLOADED(NODE) \
2461   TREE_LANG_FLAG_0 (COMPOUND_EXPR_CHECK (NODE))
2462
2463 /* In a CALL_EXPR appearing in a template, true if Koenig lookup
2464    should be performed at instantiation time.  */
2465 #define KOENIG_LOOKUP_P(NODE) TREE_LANG_FLAG_0 (CALL_EXPR_CHECK (NODE))
2466
2467 /* Indicates whether a string literal has been parenthesized. Such
2468    usages are disallowed in certain circumstances.  */
2469
2470 #define PAREN_STRING_LITERAL_P(NODE) \
2471   TREE_LANG_FLAG_0 (STRING_CST_CHECK (NODE))
2472
2473 /* Nonzero if this AGGR_INIT_EXPR provides for initialization via a
2474    constructor call, rather than an ordinary function call.  */
2475 #define AGGR_INIT_VIA_CTOR_P(NODE) \
2476   TREE_LANG_FLAG_0 (AGGR_INIT_EXPR_CHECK (NODE))
2477
2478 /* AGGR_INIT_EXPR accessors.  These are equivalent to the CALL_EXPR
2479    accessors, except for AGGR_INIT_EXPR_SLOT (which takes the place of
2480    CALL_EXPR_STATIC_CHAIN).  */
2481
2482 #define AGGR_INIT_EXPR_FN(NODE) TREE_OPERAND (AGGR_INIT_EXPR_CHECK (NODE), 1)
2483 #define AGGR_INIT_EXPR_SLOT(NODE) \
2484   TREE_OPERAND (AGGR_INIT_EXPR_CHECK (NODE), 2)
2485 #define AGGR_INIT_EXPR_ARG(NODE, I) \
2486   TREE_OPERAND (AGGR_INIT_EXPR_CHECK (NODE), (I) + 3)
2487 #define aggr_init_expr_nargs(NODE) (VL_EXP_OPERAND_LENGTH(NODE) - 3)
2488
2489 /* AGGR_INIT_EXPR_ARGP returns a pointer to the argument vector for NODE.
2490    We can't use &AGGR_INIT_EXPR_ARG (NODE, 0) because that will complain if
2491    the argument count is zero when checking is enabled.  Instead, do
2492    the pointer arithmetic to advance past the 3 fixed operands in a
2493    AGGR_INIT_EXPR.  That produces a valid pointer to just past the end of
2494    the operand array, even if it's not valid to dereference it.  */
2495 #define AGGR_INIT_EXPR_ARGP(NODE) \
2496   (&(TREE_OPERAND (AGGR_INIT_EXPR_CHECK (NODE), 0)) + 3)
2497
2498 /* Abstract iterators for AGGR_INIT_EXPRs.  */
2499
2500 /* Structure containing iterator state.  */
2501 typedef struct aggr_init_expr_arg_iterator_d GTY (())
2502 {
2503   tree t;       /* the aggr_init_expr */
2504   int n;        /* argument count */
2505   int i;        /* next argument index */
2506 } aggr_init_expr_arg_iterator;
2507
2508 /* Initialize the abstract argument list iterator object ITER with the
2509    arguments from AGGR_INIT_EXPR node EXP.  */
2510 static inline void
2511 init_aggr_init_expr_arg_iterator (tree exp,
2512                                        aggr_init_expr_arg_iterator *iter)
2513 {
2514   iter->t = exp;
2515   iter->n = aggr_init_expr_nargs (exp);
2516   iter->i = 0;
2517 }
2518
2519 /* Return the next argument from abstract argument list iterator object ITER,
2520    and advance its state.  Return NULL_TREE if there are no more arguments.  */
2521 static inline tree
2522 next_aggr_init_expr_arg (aggr_init_expr_arg_iterator *iter)
2523 {
2524   tree result;
2525   if (iter->i >= iter->n)
2526     return NULL_TREE;
2527   result = AGGR_INIT_EXPR_ARG (iter->t, iter->i);
2528   iter->i++;
2529   return result;
2530 }
2531
2532 /* Initialize the abstract argument list iterator object ITER, then advance
2533    past and return the first argument.  Useful in for expressions, e.g.
2534      for (arg = first_aggr_init_expr_arg (exp, &iter); arg;
2535           arg = next_aggr_init_expr_arg (&iter))   */
2536 static inline tree
2537 first_aggr_init_expr_arg (tree exp, aggr_init_expr_arg_iterator *iter)
2538 {
2539   init_aggr_init_expr_arg_iterator (exp, iter);
2540   return next_aggr_init_expr_arg (iter);
2541 }
2542
2543 /* Test whether there are more arguments in abstract argument list iterator
2544    ITER, without changing its state.  */
2545 static inline bool
2546 more_aggr_init_expr_args_p (const aggr_init_expr_arg_iterator *iter)
2547 {
2548   return (iter->i < iter->n);
2549 }
2550
2551 /* Iterate through each argument ARG of AGGR_INIT_EXPR CALL, using variable
2552    ITER (of type aggr_init_expr_arg_iterator) to hold the iteration state.  */
2553 #define FOR_EACH_AGGR_INIT_EXPR_ARG(arg, iter, call)                    \
2554   for ((arg) = first_aggr_init_expr_arg ((call), &(iter)); (arg);       \
2555        (arg) = next_aggr_init_expr_arg (&(iter)))
2556
2557 /* The TYPE_MAIN_DECL for a class template type is a TYPE_DECL, not a
2558    TEMPLATE_DECL.  This macro determines whether or not a given class
2559    type is really a template type, as opposed to an instantiation or
2560    specialization of one.  */
2561 #define CLASSTYPE_IS_TEMPLATE(NODE)  \
2562   (CLASSTYPE_TEMPLATE_INFO (NODE)    \
2563    && !CLASSTYPE_USE_TEMPLATE (NODE) \
2564    && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (NODE)))
2565
2566 /* The name used by the user to name the typename type.  Typically,
2567    this is an IDENTIFIER_NODE, and the same as the DECL_NAME on the
2568    corresponding TYPE_DECL.  However, this may also be a
2569    TEMPLATE_ID_EXPR if we had something like `typename X::Y<T>'.  */
2570 #define TYPENAME_TYPE_FULLNAME(NODE) (TYPENAME_TYPE_CHECK (NODE))->type.values
2571
2572 /* True if a TYPENAME_TYPE was declared as an "enum".  */
2573 #define TYPENAME_IS_ENUM_P(NODE) \
2574   (TREE_LANG_FLAG_0 (TYPENAME_TYPE_CHECK (NODE)))
2575
2576 /* True if a TYPENAME_TYPE was declared as a "class", "struct", or
2577    "union".  */
2578 #define TYPENAME_IS_CLASS_P(NODE) \
2579   (TREE_LANG_FLAG_1 (TYPENAME_TYPE_CHECK (NODE)))
2580
2581 /* Nonzero in INTEGER_CST means that this int is negative by dint of
2582    using a twos-complement negated operand.  */
2583 #define TREE_NEGATED_INT(NODE) TREE_LANG_FLAG_0 (INTEGER_CST_CHECK (NODE))
2584
2585 /* [class.virtual]
2586
2587    A class that declares or inherits a virtual function is called a
2588    polymorphic class.  */
2589 #define TYPE_POLYMORPHIC_P(NODE) (TREE_LANG_FLAG_2 (NODE))
2590
2591 /* Nonzero if this class has a virtual function table pointer.  */
2592 #define TYPE_CONTAINS_VPTR_P(NODE)              \
2593   (TYPE_POLYMORPHIC_P (NODE) || CLASSTYPE_VBASECLASSES (NODE))
2594
2595 /* This flag is true of a local VAR_DECL if it was declared in a for
2596    statement, but we are no longer in the scope of the for.  */
2597 #define DECL_DEAD_FOR_LOCAL(NODE) DECL_LANG_FLAG_7 (VAR_DECL_CHECK (NODE))
2598
2599 /* This flag is set on a VAR_DECL that is a DECL_DEAD_FOR_LOCAL
2600    if we already emitted a warning about using it.  */
2601 #define DECL_ERROR_REPORTED(NODE) DECL_LANG_FLAG_0 (VAR_DECL_CHECK (NODE))
2602
2603 /* Nonzero if NODE is a FUNCTION_DECL (for a function with global
2604    scope) declared in a local scope.  */
2605 #define DECL_LOCAL_FUNCTION_P(NODE) \
2606   DECL_LANG_FLAG_0 (FUNCTION_DECL_CHECK (NODE))
2607
2608 /* Nonzero if NODE is a DECL which we know about but which has not
2609    been explicitly declared, such as a built-in function or a friend
2610    declared inside a class.  In the latter case DECL_HIDDEN_FRIEND_P
2611    will be set.  */
2612 #define DECL_ANTICIPATED(NODE) \
2613   (DECL_LANG_SPECIFIC (DECL_COMMON_CHECK (NODE))->decl_flags.anticipated_p)
2614
2615 /* Nonzero if NODE is a FUNCTION_DECL which was declared as a friend
2616    within a class but has not been declared in the surrounding scope.
2617    The function is invisible except via argument dependent lookup.  */
2618 #define DECL_HIDDEN_FRIEND_P(NODE) \
2619   (DECL_LANG_SPECIFIC (DECL_COMMON_CHECK (NODE))->decl_flags.hidden_friend_p)
2620
2621 /* Nonzero if DECL has been declared threadprivate by
2622    #pragma omp threadprivate.  */
2623 #define CP_DECL_THREADPRIVATE_P(DECL) \
2624   (DECL_LANG_SPECIFIC (VAR_DECL_CHECK (DECL))->decl_flags.threadprivate_p)
2625
2626 /* Record whether a typedef for type `int' was actually `signed int'.  */
2627 #define C_TYPEDEF_EXPLICITLY_SIGNED(EXP) DECL_LANG_FLAG_1 (EXP)
2628
2629 /* Returns nonzero if DECL has external linkage, as specified by the
2630    language standard.  (This predicate may hold even when the
2631    corresponding entity is not actually given external linkage in the
2632    object file; see decl_linkage for details.)  */
2633 #define DECL_EXTERNAL_LINKAGE_P(DECL) \
2634   (decl_linkage (DECL) == lk_external)
2635
2636 /* Keep these codes in ascending code order.  */
2637
2638 #define INTEGRAL_CODE_P(CODE)   \
2639   ((CODE) == ENUMERAL_TYPE      \
2640    || (CODE) == BOOLEAN_TYPE    \
2641    || (CODE) == INTEGER_TYPE)
2642
2643 /* [basic.fundamental]
2644
2645    Types  bool, char, wchar_t, and the signed and unsigned integer types
2646    are collectively called integral types.
2647
2648    Note that INTEGRAL_TYPE_P, as defined in tree.h, allows enumeration
2649    types as well, which is incorrect in C++.  Keep these checks in
2650    ascending code order.  */
2651 #define CP_INTEGRAL_TYPE_P(TYPE)                \
2652   (TREE_CODE (TYPE) == BOOLEAN_TYPE             \
2653    || TREE_CODE (TYPE) == INTEGER_TYPE)
2654
2655 /* Returns true if TYPE is an integral or enumeration name.  Keep
2656    these checks in ascending code order.  */
2657 #define INTEGRAL_OR_ENUMERATION_TYPE_P(TYPE) \
2658    (TREE_CODE (TYPE) == ENUMERAL_TYPE || CP_INTEGRAL_TYPE_P (TYPE))
2659
2660 /* [basic.fundamental]
2661
2662    Integral and floating types are collectively called arithmetic
2663    types.  Keep these checks in ascending code order.  */
2664 #define ARITHMETIC_TYPE_P(TYPE) \
2665   (CP_INTEGRAL_TYPE_P (TYPE) || TREE_CODE (TYPE) == REAL_TYPE)
2666
2667 /* [basic.types]
2668
2669    Arithmetic types, enumeration types, pointer types, and
2670    pointer-to-member types, are collectively called scalar types.
2671    Keep these checks in ascending code order.  */
2672 #define SCALAR_TYPE_P(TYPE)                     \
2673   (TYPE_PTRMEM_P (TYPE)                         \
2674    || TREE_CODE (TYPE) == ENUMERAL_TYPE         \
2675    || ARITHMETIC_TYPE_P (TYPE)                  \
2676    || TYPE_PTR_P (TYPE)                         \
2677    || TYPE_PTRMEMFUNC_P (TYPE))
2678
2679 /* [dcl.init.aggr]
2680
2681    An aggregate is an array or a class with no user-declared
2682    constructors, no private or protected non-static data members, no
2683    base classes, and no virtual functions.
2684
2685    As an extension, we also treat vectors as aggregates.  Keep these
2686    checks in ascending code order.  */
2687 #define CP_AGGREGATE_TYPE_P(TYPE)                               \
2688   (TREE_CODE (TYPE) == VECTOR_TYPE                              \
2689    ||TREE_CODE (TYPE) == ARRAY_TYPE                             \
2690    || (CLASS_TYPE_P (TYPE) && !CLASSTYPE_NON_AGGREGATE (TYPE)))
2691
2692 /* Nonzero for a class type means that the class type has a
2693    user-declared constructor.  */
2694 #define TYPE_HAS_CONSTRUCTOR(NODE) (TYPE_LANG_FLAG_1 (NODE))
2695
2696 /* When appearing in an INDIRECT_REF, it means that the tree structure
2697    underneath is actually a call to a constructor.  This is needed
2698    when the constructor must initialize local storage (which can
2699    be automatically destroyed), rather than allowing it to allocate
2700    space from the heap.
2701
2702    When appearing in a SAVE_EXPR, it means that underneath
2703    is a call to a constructor.
2704
2705    When appearing in a CONSTRUCTOR, the expression is a
2706    compound literal.
2707
2708    When appearing in a FIELD_DECL, it means that this field
2709    has been duly initialized in its constructor.  */
2710 #define TREE_HAS_CONSTRUCTOR(NODE) (TREE_LANG_FLAG_4 (NODE))
2711
2712 /* True if NODE is a brace-enclosed initializer.  */
2713 #define BRACE_ENCLOSED_INITIALIZER_P(NODE) \
2714   (TREE_CODE (NODE) == CONSTRUCTOR && !TREE_TYPE (NODE))
2715
2716 /* True if NODE is a compound-literal, i.e., a brace-enclosed
2717    initializer cast to a particular type.  */
2718 #define COMPOUND_LITERAL_P(NODE) \
2719   (TREE_CODE (NODE) == CONSTRUCTOR && TREE_HAS_CONSTRUCTOR (NODE))
2720
2721 #define EMPTY_CONSTRUCTOR_P(NODE) (TREE_CODE (NODE) == CONSTRUCTOR \
2722                                    && VEC_empty (constructor_elt, \
2723                                                  CONSTRUCTOR_ELTS (NODE)) \
2724                                    && !TREE_HAS_CONSTRUCTOR (NODE))
2725
2726 /* Nonzero means that an object of this type can not be initialized using
2727    an initializer list.  */
2728 #define CLASSTYPE_NON_AGGREGATE(NODE) \
2729   (LANG_TYPE_CLASS_CHECK (NODE)->non_aggregate)
2730 #define TYPE_NON_AGGREGATE_CLASS(NODE) \
2731   (IS_AGGR_TYPE (NODE) && CLASSTYPE_NON_AGGREGATE (NODE))
2732
2733 /* Nonzero if there is a user-defined X::op=(x&) for this class.  */
2734 #define TYPE_HAS_COMPLEX_ASSIGN_REF(NODE) (LANG_TYPE_CLASS_CHECK (NODE)->has_complex_assign_ref)
2735
2736 /* Nonzero if there is a user-defined X::X(x&) for this class.  */
2737 #define TYPE_HAS_COMPLEX_INIT_REF(NODE) (LANG_TYPE_CLASS_CHECK (NODE)->has_complex_init_ref)
2738
2739 /* Nonzero if there is a user-defined default constructor for this class.  */
2740 #define TYPE_HAS_COMPLEX_DFLT(NODE) (LANG_TYPE_CLASS_CHECK (NODE)->has_complex_dflt)
2741
2742 /* Nonzero if TYPE has a trivial destructor.  From [class.dtor]:
2743
2744      A destructor is trivial if it is an implicitly declared
2745      destructor and if:
2746
2747        - all of the direct base classes of its class have trivial
2748          destructors,
2749
2750        - for all of the non-static data members of its class that are
2751          of class type (or array thereof), each such class has a
2752          trivial destructor.  */
2753 #define TYPE_HAS_TRIVIAL_DESTRUCTOR(NODE) \
2754   (!TYPE_HAS_NONTRIVIAL_DESTRUCTOR (NODE))
2755
2756 /* Nonzero for _TYPE node means that this type does not have a trivial
2757    destructor.  Therefore, destroying an object of this type will
2758    involve a call to a destructor.  This can apply to objects of
2759    ARRAY_TYPE is the type of the elements needs a destructor.  */
2760 #define TYPE_HAS_NONTRIVIAL_DESTRUCTOR(NODE) \
2761   (TYPE_LANG_FLAG_4 (NODE))
2762
2763 /* Nonzero for class type means that the default constructor is trivial.  */
2764 #define TYPE_HAS_TRIVIAL_DFLT(NODE) \
2765   (TYPE_HAS_DEFAULT_CONSTRUCTOR (NODE) && ! TYPE_HAS_COMPLEX_DFLT (NODE))
2766
2767 /* Nonzero for class type means that copy initialization of this type can use
2768    a bitwise copy.  */
2769 #define TYPE_HAS_TRIVIAL_INIT_REF(NODE) \
2770   (TYPE_HAS_INIT_REF (NODE) && ! TYPE_HAS_COMPLEX_INIT_REF (NODE))
2771
2772 /* Nonzero for class type means that assignment of this type can use
2773    a bitwise copy.  */
2774 #define TYPE_HAS_TRIVIAL_ASSIGN_REF(NODE) \
2775   (TYPE_HAS_ASSIGN_REF (NODE) && ! TYPE_HAS_COMPLEX_ASSIGN_REF (NODE))
2776
2777 /* Returns true if NODE is a pointer-to-data-member.  */
2778 #define TYPE_PTRMEM_P(NODE)                     \
2779   (TREE_CODE (NODE) == OFFSET_TYPE)
2780 /* Returns true if NODE is a pointer.  */
2781 #define TYPE_PTR_P(NODE)                        \
2782   (TREE_CODE (NODE) == POINTER_TYPE)
2783
2784 /* Returns true if NODE is an object type:
2785
2786      [basic.types]
2787
2788      An object type is a (possibly cv-qualified) type that is not a
2789      function type, not a reference type, and not a void type.
2790
2791    Keep these checks in ascending order, for speed.  */
2792 #define TYPE_OBJ_P(NODE)                        \
2793   (TREE_CODE (NODE) != REFERENCE_TYPE           \
2794    && TREE_CODE (NODE) != VOID_TYPE             \
2795    && TREE_CODE (NODE) != FUNCTION_TYPE         \
2796    && TREE_CODE (NODE) != METHOD_TYPE)
2797
2798 /* Returns true if NODE is a pointer to an object.  Keep these checks
2799    in ascending tree code order.  */
2800 #define TYPE_PTROB_P(NODE)                                      \
2801   (TYPE_PTR_P (NODE) && TYPE_OBJ_P (TREE_TYPE (NODE)))
2802
2803 /* Returns true if NODE is a reference to an object.  Keep these checks
2804    in ascending tree code order.  */
2805 #define TYPE_REF_OBJ_P(NODE)                                    \
2806   (TREE_CODE (NODE) == REFERENCE_TYPE && TYPE_OBJ_P (TREE_TYPE (NODE)))
2807
2808 /* Returns true if NODE is a pointer to an object, or a pointer to
2809    void.  Keep these checks in ascending tree code order.  */
2810 #define TYPE_PTROBV_P(NODE)                                     \
2811   (TYPE_PTR_P (NODE)                                            \
2812    && !(TREE_CODE (TREE_TYPE (NODE)) == FUNCTION_TYPE           \
2813         || TREE_CODE (TREE_TYPE (NODE)) == METHOD_TYPE))
2814
2815 /* Returns true if NODE is a pointer to function.  */
2816 #define TYPE_PTRFN_P(NODE)                              \
2817   (TREE_CODE (NODE) == POINTER_TYPE                     \
2818    && TREE_CODE (TREE_TYPE (NODE)) == FUNCTION_TYPE)
2819
2820 /* Returns true if NODE is a reference to function.  */
2821 #define TYPE_REFFN_P(NODE)                              \
2822   (TREE_CODE (NODE) == REFERENCE_TYPE                   \
2823    && TREE_CODE (TREE_TYPE (NODE)) == FUNCTION_TYPE)
2824
2825 /* Nonzero for _TYPE node means that this type is a pointer to member
2826    function type.  */
2827 #define TYPE_PTRMEMFUNC_P(NODE)         \
2828   (TREE_CODE (NODE) == RECORD_TYPE      \
2829    && TYPE_LANG_SPECIFIC (NODE)         \
2830    && TYPE_PTRMEMFUNC_FLAG (NODE))
2831
2832 #define TYPE_PTRMEMFUNC_FLAG(NODE) \
2833   (LANG_TYPE_CLASS_CHECK (NODE)->ptrmemfunc_flag)
2834
2835 /* Returns true if NODE is a pointer-to-member.  */
2836 #define TYPE_PTR_TO_MEMBER_P(NODE) \
2837   (TYPE_PTRMEM_P (NODE) || TYPE_PTRMEMFUNC_P (NODE))
2838
2839 /* Indicates when overload resolution may resolve to a pointer to
2840    member function. [expr.unary.op]/3 */
2841 #define PTRMEM_OK_P(NODE) \
2842   TREE_LANG_FLAG_0 (TREE_CHECK2 ((NODE), ADDR_EXPR, OFFSET_REF))
2843
2844 /* Get the POINTER_TYPE to the METHOD_TYPE associated with this
2845    pointer to member function.  TYPE_PTRMEMFUNC_P _must_ be true,
2846    before using this macro.  */
2847 #define TYPE_PTRMEMFUNC_FN_TYPE(NODE) \
2848   (TREE_TYPE (TYPE_FIELDS (NODE)))
2849
2850 /* Returns `A' for a type like `int (A::*)(double)' */
2851 #define TYPE_PTRMEMFUNC_OBJECT_TYPE(NODE) \
2852   TYPE_METHOD_BASETYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (NODE)))
2853
2854 /* These are use to manipulate the canonical RECORD_TYPE from the
2855    hashed POINTER_TYPE, and can only be used on the POINTER_TYPE.  */
2856 #define TYPE_GET_PTRMEMFUNC_TYPE(NODE) \
2857   (TYPE_LANG_SPECIFIC (NODE) ? LANG_TYPE_PTRMEM_CHECK (NODE)->record : NULL)
2858 #define TYPE_SET_PTRMEMFUNC_TYPE(NODE, VALUE)                           \
2859   do {                                                                  \
2860     if (TYPE_LANG_SPECIFIC (NODE) == NULL)                              \
2861       {                                                                 \
2862         TYPE_LANG_SPECIFIC (NODE) = GGC_CNEWVAR                         \
2863          (struct lang_type, sizeof (struct lang_type_ptrmem));          \
2864         TYPE_LANG_SPECIFIC (NODE)->u.ptrmem.h.is_lang_type_class = 0;   \
2865       }                                                                 \
2866     TYPE_LANG_SPECIFIC (NODE)->u.ptrmem.record = (VALUE);               \
2867   } while (0)
2868
2869 /* For a pointer-to-member type of the form `T X::*', this is `X'.
2870    For a type like `void (X::*)() const', this type is `X', not `const
2871    X'.  To get at the `const X' you have to look at the
2872    TYPE_PTRMEM_POINTED_TO_TYPE; there, the first parameter will have
2873    type `const X*'.  */
2874 #define TYPE_PTRMEM_CLASS_TYPE(NODE)                    \
2875   (TYPE_PTRMEM_P (NODE)                                 \
2876    ? TYPE_OFFSET_BASETYPE (NODE)                \
2877    : TYPE_PTRMEMFUNC_OBJECT_TYPE (NODE))
2878
2879 /* For a pointer-to-member type of the form `T X::*', this is `T'.  */
2880 #define TYPE_PTRMEM_POINTED_TO_TYPE(NODE)               \
2881    (TYPE_PTRMEM_P (NODE)                                \
2882     ? TREE_TYPE (NODE)                                  \
2883     : TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (NODE)))
2884
2885 /* For a pointer-to-member constant `X::Y' this is the RECORD_TYPE for
2886    `X'.  */
2887 #define PTRMEM_CST_CLASS(NODE) \
2888   TYPE_PTRMEM_CLASS_TYPE (TREE_TYPE (PTRMEM_CST_CHECK (NODE)))
2889
2890 /* For a pointer-to-member constant `X::Y' this is the _DECL for
2891    `Y'.  */
2892 #define PTRMEM_CST_MEMBER(NODE) (((ptrmem_cst_t)PTRMEM_CST_CHECK (NODE))->member)
2893
2894 /* The expression in question for a TYPEOF_TYPE.  */
2895 #define TYPEOF_TYPE_EXPR(NODE) (TYPEOF_TYPE_CHECK (NODE))->type.values
2896
2897 /* Nonzero for VAR_DECL and FUNCTION_DECL node means that `extern' was
2898    specified in its declaration.  This can also be set for an
2899    erroneously declared PARM_DECL.  */
2900 #define DECL_THIS_EXTERN(NODE) \
2901   DECL_LANG_FLAG_2 (VAR_FUNCTION_OR_PARM_DECL_CHECK (NODE))
2902
2903 /* Nonzero for VAR_DECL and FUNCTION_DECL node means that `static' was
2904    specified in its declaration.  This can also be set for an
2905    erroneously declared PARM_DECL.  */
2906 #define DECL_THIS_STATIC(NODE) \
2907   DECL_LANG_FLAG_6 (VAR_FUNCTION_OR_PARM_DECL_CHECK (NODE))
2908
2909 /* Nonzero for FIELD_DECL node means that this field is a base class
2910    of the parent object, as opposed to a member field.  */
2911 #define DECL_FIELD_IS_BASE(NODE) \
2912   DECL_LANG_FLAG_6 (FIELD_DECL_CHECK (NODE))
2913
2914 /* Nonzero if TYPE is an anonymous union or struct type.  We have to use a
2915    flag for this because "A union for which objects or pointers are
2916    declared is not an anonymous union" [class.union].  */
2917 #define ANON_AGGR_TYPE_P(NODE)                          \
2918   (CLASS_TYPE_P (NODE) && LANG_TYPE_CLASS_CHECK (NODE)->anon_aggr)
2919 #define SET_ANON_AGGR_TYPE_P(NODE)                      \
2920   (LANG_TYPE_CLASS_CHECK (NODE)->anon_aggr = 1)
2921
2922 /* Nonzero if TYPE is an anonymous union type.  */
2923 #define ANON_UNION_TYPE_P(NODE) \
2924   (TREE_CODE (NODE) == UNION_TYPE && ANON_AGGR_TYPE_P (NODE))
2925
2926 #define UNKNOWN_TYPE LANG_TYPE
2927
2928 /* Define fields and accessors for nodes representing declared names.  */
2929
2930 #define TYPE_WAS_ANONYMOUS(NODE) (LANG_TYPE_CLASS_CHECK (NODE)->was_anonymous)
2931
2932 /* C++: all of these are overloaded!  These apply only to TYPE_DECLs.  */
2933
2934 /* The format of each node in the DECL_FRIENDLIST is as follows:
2935
2936    The TREE_PURPOSE will be the name of a function, i.e., an
2937    IDENTIFIER_NODE.  The TREE_VALUE will be itself a TREE_LIST, whose
2938    TREE_VALUEs are friends with the given name.  */
2939 #define DECL_FRIENDLIST(NODE)           (DECL_INITIAL (NODE))
2940 #define FRIEND_NAME(LIST) (TREE_PURPOSE (LIST))
2941 #define FRIEND_DECLS(LIST) (TREE_VALUE (LIST))
2942
2943 /* The DECL_ACCESS, if non-NULL, is a TREE_LIST.  The TREE_PURPOSE of
2944    each node is a type; the TREE_VALUE is the access granted for this
2945    DECL in that type.  The DECL_ACCESS is set by access declarations.
2946    For example, if a member that would normally be public in a
2947    derived class is made protected, then the derived class and the
2948    protected_access_node will appear in the DECL_ACCESS for the node.  */
2949 #define DECL_ACCESS(NODE) (LANG_DECL_U2_CHECK (NODE, 0)->access)
2950
2951 /* Nonzero if the FUNCTION_DECL is a global constructor.  */
2952 #define DECL_GLOBAL_CTOR_P(NODE) \
2953   (DECL_LANG_SPECIFIC (NODE)->decl_flags.global_ctor_p)
2954
2955 /* Nonzero if the FUNCTION_DECL is a global destructor.  */
2956 #define DECL_GLOBAL_DTOR_P(NODE) \
2957   (DECL_LANG_SPECIFIC (NODE)->decl_flags.global_dtor_p)
2958
2959 /* Accessor macros for C++ template decl nodes.  */
2960
2961 /* The DECL_TEMPLATE_PARMS are a list.  The TREE_PURPOSE of each node
2962    is a INT_CST whose TREE_INT_CST_LOW indicates the level of the
2963    template parameters, with 1 being the outermost set of template
2964    parameters.  The TREE_VALUE is a vector, whose elements are the
2965    template parameters at each level.  Each element in the vector is a
2966    TREE_LIST, whose TREE_VALUE is a PARM_DECL (if the parameter is a
2967    non-type parameter), or a TYPE_DECL (if the parameter is a type
2968    parameter).  The TREE_PURPOSE is the default value, if any.  The
2969    TEMPLATE_PARM_INDEX for the parameter is available as the
2970    DECL_INITIAL (for a PARM_DECL) or as the TREE_TYPE (for a
2971    TYPE_DECL).  */
2972 #define DECL_TEMPLATE_PARMS(NODE)       DECL_NON_COMMON_CHECK (NODE)->decl_non_common.arguments
2973 #define DECL_INNERMOST_TEMPLATE_PARMS(NODE) \
2974    INNERMOST_TEMPLATE_PARMS (DECL_TEMPLATE_PARMS (NODE))
2975 #define DECL_NTPARMS(NODE) \
2976    TREE_VEC_LENGTH (DECL_INNERMOST_TEMPLATE_PARMS (NODE))
2977 /* For function, method, class-data templates.  */
2978 #define DECL_TEMPLATE_RESULT(NODE)      DECL_RESULT_FLD (NODE)
2979 /* For a static member variable template, the
2980    DECL_TEMPLATE_INSTANTIATIONS list contains the explicitly and
2981    implicitly generated instantiations of the variable.  There are no
2982    partial instantiations of static member variables, so all of these
2983    will be full instantiations.
2984
2985    For a class template the DECL_TEMPLATE_INSTANTIATIONS lists holds
2986    all instantiations and specializations of the class type, including
2987    partial instantiations and partial specializations.
2988
2989    In both cases, the TREE_PURPOSE of each node contains the arguments
2990    used; the TREE_VALUE contains the generated variable.  The template
2991    arguments are always complete.  For example, given:
2992
2993       template <class T> struct S1 {
2994         template <class U> struct S2 {};
2995         template <class U> struct S2<U*> {};
2996       };
2997
2998    the record for the partial specialization will contain, as its
2999    argument list, { {T}, {U*} }, and will be on the
3000    DECL_TEMPLATE_INSTANTIATIONS list for `template <class T> template
3001    <class U> struct S1<T>::S2'.
3002
3003    This list is not used for function templates.  */
3004 #define DECL_TEMPLATE_INSTANTIATIONS(NODE) DECL_VINDEX (NODE)
3005 /* For a function template, the DECL_TEMPLATE_SPECIALIZATIONS lists
3006    contains all instantiations and specializations of the function,
3007    including partial instantiations.  For a partial instantiation
3008    which is a specialization, this list holds only full
3009    specializations of the template that are instantiations of the
3010    partial instantiation.  For example, given:
3011
3012       template <class T> struct S {
3013         template <class U> void f(U);
3014         template <> void f(T);
3015       };
3016
3017    the `S<int>::f<int>(int)' function will appear on the
3018    DECL_TEMPLATE_SPECIALIZATIONS list for both `template <class T>
3019    template <class U> void S<T>::f(U)' and `template <class T> void
3020    S<int>::f(T)'.  In the latter case, however, it will have only the
3021    innermost set of arguments (T, in this case).  The DECL_TI_TEMPLATE
3022    for the function declaration will point at the specialization, not
3023    the fully general template.
3024
3025    For a class template, this list contains the partial
3026    specializations of this template.  (Full specializations are not
3027    recorded on this list.)  The TREE_PURPOSE holds the arguments used
3028    in the partial specialization (e.g., for `template <class T> struct
3029    S<T*, int>' this will be `T*'.)  The arguments will also include
3030    any outer template arguments.  The TREE_VALUE holds the innermost
3031    template parameters for the specialization (e.g., `T' in the
3032    example above.)  The TREE_TYPE is the _TYPE node for the partial
3033    specialization.
3034
3035    This list is not used for static variable templates.  */
3036 #define DECL_TEMPLATE_SPECIALIZATIONS(NODE)     DECL_SIZE (NODE)
3037
3038 /* Nonzero for a DECL which is actually a template parameter.  Keep
3039    these checks in ascending tree code order.   */
3040 #define DECL_TEMPLATE_PARM_P(NODE)              \
3041   (DECL_LANG_FLAG_0 (NODE)                      \
3042    && (TREE_CODE (NODE) == CONST_DECL           \
3043        || TREE_CODE (NODE) == PARM_DECL         \
3044        || TREE_CODE (NODE) == TYPE_DECL         \
3045        || TREE_CODE (NODE) == TEMPLATE_DECL))
3046
3047 /* Mark NODE as a template parameter.  */
3048 #define SET_DECL_TEMPLATE_PARM_P(NODE) \
3049   (DECL_LANG_FLAG_0 (NODE) = 1)
3050
3051 /* Nonzero if NODE is a template template parameter.  */
3052 #define DECL_TEMPLATE_TEMPLATE_PARM_P(NODE) \
3053   (TREE_CODE (NODE) == TEMPLATE_DECL && DECL_TEMPLATE_PARM_P (NODE))
3054
3055 /* Nonzero if NODE is a TEMPLATE_DECL representing an
3056    UNBOUND_CLASS_TEMPLATE tree node.  */
3057 #define DECL_UNBOUND_CLASS_TEMPLATE_P(NODE) \
3058   (TREE_CODE (NODE) == TEMPLATE_DECL && !DECL_TEMPLATE_RESULT (NODE))
3059
3060 #define DECL_FUNCTION_TEMPLATE_P(NODE)  \
3061   (TREE_CODE (NODE) == TEMPLATE_DECL \
3062    && !DECL_UNBOUND_CLASS_TEMPLATE_P (NODE) \
3063    && TREE_CODE (DECL_TEMPLATE_RESULT (NODE)) == FUNCTION_DECL)
3064
3065 /* Nonzero for a DECL that represents a template class.  */
3066 #define DECL_CLASS_TEMPLATE_P(NODE) \
3067   (TREE_CODE (NODE) == TEMPLATE_DECL \
3068    && !DECL_UNBOUND_CLASS_TEMPLATE_P (NODE) \
3069    && TREE_CODE (DECL_TEMPLATE_RESULT (NODE)) == TYPE_DECL \
3070    && !DECL_TEMPLATE_TEMPLATE_PARM_P (NODE))
3071
3072 /* Nonzero if NODE which declares a type.  */
3073 #define DECL_DECLARES_TYPE_P(NODE) \
3074   (TREE_CODE (NODE) == TYPE_DECL || DECL_CLASS_TEMPLATE_P (NODE))
3075
3076 /* Nonzero if NODE is the typedef implicitly generated for a type when
3077    the type is declared.  In C++, `struct S {};' is roughly
3078    equivalent to `struct S {}; typedef struct S S;' in C.
3079    DECL_IMPLICIT_TYPEDEF_P will hold for the typedef indicated in this
3080    example.  In C++, there is a second implicit typedef for each
3081    class, in the scope of `S' itself, so that you can say `S::S'.
3082    DECL_SELF_REFERENCE_P will hold for that second typedef.  */
3083 #define DECL_IMPLICIT_TYPEDEF_P(NODE) \
3084   (TREE_CODE (NODE) == TYPE_DECL && DECL_LANG_FLAG_2 (NODE))
3085 #define SET_DECL_IMPLICIT_TYPEDEF_P(NODE) \
3086   (DECL_LANG_FLAG_2 (NODE) = 1)
3087 #define DECL_SELF_REFERENCE_P(NODE) \
3088   (TREE_CODE (NODE) == TYPE_DECL && DECL_LANG_FLAG_4 (NODE))
3089 #define SET_DECL_SELF_REFERENCE_P(NODE) \
3090   (DECL_LANG_FLAG_4 (NODE) = 1)
3091
3092 /* A `primary' template is one that has its own template header.  A
3093    member function of a class template is a template, but not primary.
3094    A member template is primary.  Friend templates are primary, too.  */
3095
3096 /* Returns the primary template corresponding to these parameters.  */
3097 #define DECL_PRIMARY_TEMPLATE(NODE) \
3098   (TREE_TYPE (DECL_INNERMOST_TEMPLATE_PARMS (NODE)))
3099
3100 /* Returns nonzero if NODE is a primary template.  */
3101 #define PRIMARY_TEMPLATE_P(NODE) (DECL_PRIMARY_TEMPLATE (NODE) == (NODE))
3102
3103 /* Nonzero iff NODE is a specialization of a template.  The value
3104    indicates the type of specializations:
3105
3106      1=implicit instantiation
3107
3108      2=partial or explicit specialization, e.g.:
3109
3110         template <> int min<int> (int, int),
3111
3112      3=explicit instantiation, e.g.:
3113   
3114         template int min<int> (int, int);
3115
3116    Note that NODE will be marked as a specialization even if the
3117    template it is instantiating is not a primary template.  For
3118    example, given:
3119
3120      template <typename T> struct O { 
3121        void f();
3122        struct I {}; 
3123      };
3124     
3125    both O<int>::f and O<int>::I will be marked as instantiations.
3126
3127    If DECL_USE_TEMPLATE is nonzero, then DECL_TEMPLATE_INFO will also
3128    be non-NULL.  */
3129 #define DECL_USE_TEMPLATE(NODE) (DECL_LANG_SPECIFIC (NODE)->decl_flags.use_template)
3130
3131 /* Like DECL_USE_TEMPLATE, but for class types.  */
3132 #define CLASSTYPE_USE_TEMPLATE(NODE) \
3133   (LANG_TYPE_CLASS_CHECK (NODE)->use_template)
3134
3135 /* True if NODE is a specialization of a primary template.  */
3136 #define CLASSTYPE_SPECIALIZATION_OF_PRIMARY_TEMPLATE_P(NODE)    \
3137   (CLASS_TYPE_P (NODE)                                          \
3138    && CLASSTYPE_USE_TEMPLATE (NODE)                             \
3139    && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (arg)))  
3140
3141 #define DECL_TEMPLATE_INSTANTIATION(NODE) (DECL_USE_TEMPLATE (NODE) & 1)
3142 #define CLASSTYPE_TEMPLATE_INSTANTIATION(NODE) \
3143   (CLASSTYPE_USE_TEMPLATE (NODE) & 1)
3144
3145 #define DECL_TEMPLATE_SPECIALIZATION(NODE) (DECL_USE_TEMPLATE (NODE) == 2)
3146 #define SET_DECL_TEMPLATE_SPECIALIZATION(NODE) (DECL_USE_TEMPLATE (NODE) = 2)
3147
3148 /* Returns true for an explicit or partial specialization of a class
3149    template.  */
3150 #define CLASSTYPE_TEMPLATE_SPECIALIZATION(NODE) \
3151   (CLASSTYPE_USE_TEMPLATE (NODE) == 2)
3152 #define SET_CLASSTYPE_TEMPLATE_SPECIALIZATION(NODE) \
3153   (CLASSTYPE_USE_TEMPLATE (NODE) = 2)
3154
3155 #define DECL_IMPLICIT_INSTANTIATION(NODE) (DECL_USE_TEMPLATE (NODE) == 1)
3156 #define SET_DECL_IMPLICIT_INSTANTIATION(NODE) (DECL_USE_TEMPLATE (NODE) = 1)
3157 #define CLASSTYPE_IMPLICIT_INSTANTIATION(NODE) \
3158   (CLASSTYPE_USE_TEMPLATE (NODE) == 1)
3159 #define SET_CLASSTYPE_IMPLICIT_INSTANTIATION(NODE) \
3160   (CLASSTYPE_USE_TEMPLATE (NODE) = 1)
3161
3162 #define DECL_EXPLICIT_INSTANTIATION(NODE) (DECL_USE_TEMPLATE (NODE) == 3)
3163 #define SET_DECL_EXPLICIT_INSTANTIATION(NODE) (DECL_USE_TEMPLATE (NODE) = 3)
3164 #define CLASSTYPE_EXPLICIT_INSTANTIATION(NODE) \
3165   (CLASSTYPE_USE_TEMPLATE (NODE) == 3)
3166 #define SET_CLASSTYPE_EXPLICIT_INSTANTIATION(NODE) \
3167   (CLASSTYPE_USE_TEMPLATE (NODE) = 3)
3168
3169 /* Nonzero if DECL is a friend function which is an instantiation
3170    from the point of view of the compiler, but not from the point of
3171    view of the language.  For example given:
3172       template <class T> struct S { friend void f(T) {}; };
3173    the declaration of `void f(int)' generated when S<int> is
3174    instantiated will not be a DECL_TEMPLATE_INSTANTIATION, but will be
3175    a DECL_FRIEND_PSUEDO_TEMPLATE_INSTANTIATION.  */
3176 #define DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION(DECL) \
3177   (DECL_TEMPLATE_INFO (DECL) && !DECL_USE_TEMPLATE (DECL))
3178
3179 /* Nonzero iff we are currently processing a declaration for an
3180    entity with its own template parameter list, and which is not a
3181    full specialization.  */
3182 #define PROCESSING_REAL_TEMPLATE_DECL_P() \
3183   (processing_template_decl > template_class_depth (current_scope ()))
3184
3185 /* Nonzero if this VAR_DECL or FUNCTION_DECL has already been
3186    instantiated, i.e. its definition has been generated from the
3187    pattern given in the template.  */
3188 #define DECL_TEMPLATE_INSTANTIATED(NODE) \
3189   DECL_LANG_FLAG_1 (VAR_OR_FUNCTION_DECL_CHECK (NODE))
3190
3191 /* We know what we're doing with this decl now.  */
3192 #define DECL_INTERFACE_KNOWN(NODE) DECL_LANG_FLAG_5 (NODE)
3193
3194 /* DECL_EXTERNAL must be set on a decl until the decl is actually emitted,
3195    so that assemble_external will work properly.  So we have this flag to
3196    tell us whether the decl is really not external.  */
3197 #define DECL_NOT_REALLY_EXTERN(NODE) \
3198   (DECL_LANG_SPECIFIC (NODE)->decl_flags.not_really_extern)
3199
3200 #define DECL_REALLY_EXTERN(NODE) \
3201   (DECL_EXTERNAL (NODE) && ! DECL_NOT_REALLY_EXTERN (NODE))
3202
3203 /* A thunk is a stub function.
3204
3205    A thunk is an alternate entry point for an ordinary FUNCTION_DECL.
3206    The address of the ordinary FUNCTION_DECL is given by the
3207    DECL_INITIAL, which is always an ADDR_EXPR whose operand is a
3208    FUNCTION_DECL.  The job of the thunk is to either adjust the this
3209    pointer before transferring control to the FUNCTION_DECL, or call
3210    FUNCTION_DECL and then adjust the result value. Note, the result
3211    pointer adjusting thunk must perform a call to the thunked
3212    function, (or be implemented via passing some invisible parameter
3213    to the thunked function, which is modified to perform the
3214    adjustment just before returning).
3215
3216    A thunk may perform either, or both, of the following operations:
3217
3218    o Adjust the this or result pointer by a constant offset.
3219    o Adjust the this or result pointer by looking up a vcall or vbase offset
3220      in the vtable.
3221
3222    A this pointer adjusting thunk converts from a base to a derived
3223    class, and hence adds the offsets. A result pointer adjusting thunk
3224    converts from a derived class to a base, and hence subtracts the
3225    offsets.  If both operations are performed, then the constant
3226    adjustment is performed first for this pointer adjustment and last
3227    for the result pointer adjustment.
3228
3229    The constant adjustment is given by THUNK_FIXED_OFFSET.  If the
3230    vcall or vbase offset is required, THUNK_VIRTUAL_OFFSET is
3231    used. For this pointer adjusting thunks, it is the vcall offset
3232    into the vtable.  For result pointer adjusting thunks it is the
3233    binfo of the virtual base to convert to.  Use that binfo's vbase
3234    offset.
3235
3236    It is possible to have equivalent covariant thunks.  These are
3237    distinct virtual covariant thunks whose vbase offsets happen to
3238    have the same value.  THUNK_ALIAS is used to pick one as the
3239    canonical thunk, which will get all the this pointer adjusting
3240    thunks attached to it.  */
3241
3242 /* An integer indicating how many bytes should be subtracted from the
3243    this or result pointer when this function is called.  */
3244 #define THUNK_FIXED_OFFSET(DECL) \
3245   (DECL_LANG_SPECIFIC (THUNK_FUNCTION_CHECK (DECL))->u.f.u5.fixed_offset)
3246
3247 /* A tree indicating how to perform the virtual adjustment. For a this
3248    adjusting thunk it is the number of bytes to be added to the vtable
3249    to find the vcall offset. For a result adjusting thunk, it is the
3250    binfo of the relevant virtual base.  If NULL, then there is no
3251    virtual adjust.  (The vptr is always located at offset zero from
3252    the this or result pointer.)  (If the covariant type is within the
3253    class hierarchy being laid out, the vbase index is not yet known
3254    at the point we need to create the thunks, hence the need to use
3255    binfos.)  */
3256
3257 #define THUNK_VIRTUAL_OFFSET(DECL) \
3258   (LANG_DECL_U2_CHECK (FUNCTION_DECL_CHECK (DECL), 0)->access)
3259
3260 /* A thunk which is equivalent to another thunk.  */
3261 #define THUNK_ALIAS(DECL) \
3262   (DECL_LANG_SPECIFIC (FUNCTION_DECL_CHECK (DECL))->decl_flags.u.template_info)
3263
3264 /* For thunk NODE, this is the FUNCTION_DECL thunked to.  It is
3265    possible for the target to be a thunk too.  */
3266 #define THUNK_TARGET(NODE)                              \
3267   (DECL_LANG_SPECIFIC (NODE)->u.f.befriending_classes)
3268
3269 /* True for a SCOPE_REF iff the "template" keyword was used to
3270    indicate that the qualified name denotes a template.  */
3271 #define QUALIFIED_NAME_IS_TEMPLATE(NODE) \
3272   (TREE_LANG_FLAG_0 (SCOPE_REF_CHECK (NODE)))
3273
3274 /* True for an OMP_ATOMIC that has dependent parameters.  These are stored
3275    as an expr in operand 1, and integer_zero_node in operand 0.  */
3276 #define OMP_ATOMIC_DEPENDENT_P(NODE) \
3277   (TREE_CODE (TREE_OPERAND (OMP_ATOMIC_CHECK (NODE), 0)) == INTEGER_CST)
3278
3279 /* Used while gimplifying continue statements bound to OMP_FOR nodes.  */
3280 #define OMP_FOR_GIMPLIFYING_P(NODE) \
3281   (TREE_LANG_FLAG_0 (OMP_FOR_CHECK (NODE)))
3282
3283 /* A language-specific token attached to the OpenMP data clauses to
3284    hold code (or code fragments) related to ctors, dtors, and op=.
3285    See semantics.c for details.  */
3286 #define CP_OMP_CLAUSE_INFO(NODE) \
3287   TREE_TYPE (OMP_CLAUSE_RANGE_CHECK (NODE, OMP_CLAUSE_PRIVATE, \
3288                                      OMP_CLAUSE_COPYPRIVATE))
3289
3290 /* These macros provide convenient access to the various _STMT nodes
3291    created when parsing template declarations.  */
3292 #define TRY_STMTS(NODE)         TREE_OPERAND (TRY_BLOCK_CHECK (NODE), 0)
3293 #define TRY_HANDLERS(NODE)      TREE_OPERAND (TRY_BLOCK_CHECK (NODE), 1)
3294
3295 #define EH_SPEC_STMTS(NODE)     TREE_OPERAND (EH_SPEC_BLOCK_CHECK (NODE), 0)
3296 #define EH_SPEC_RAISES(NODE)    TREE_OPERAND (EH_SPEC_BLOCK_CHECK (NODE), 1)
3297
3298 #define USING_STMT_NAMESPACE(NODE) TREE_OPERAND (USING_STMT_CHECK (NODE), 0)
3299
3300 /* Nonzero if this try block is a function try block.  */
3301 #define FN_TRY_BLOCK_P(NODE)    TREE_LANG_FLAG_3 (TRY_BLOCK_CHECK (NODE))
3302 #define HANDLER_PARMS(NODE)     TREE_OPERAND (HANDLER_CHECK (NODE), 0)
3303 #define HANDLER_BODY(NODE)      TREE_OPERAND (HANDLER_CHECK (NODE), 1)
3304 #define HANDLER_TYPE(NODE)      TREE_TYPE (HANDLER_CHECK (NODE))
3305
3306 /* CLEANUP_STMT accessors.  The statement(s) covered, the cleanup to run
3307    and the VAR_DECL for which this cleanup exists.  */
3308 #define CLEANUP_BODY(NODE)      TREE_OPERAND (CLEANUP_STMT_CHECK (NODE), 0)
3309 #define CLEANUP_EXPR(NODE)      TREE_OPERAND (CLEANUP_STMT_CHECK (NODE), 1)
3310 #define CLEANUP_DECL(NODE)      TREE_OPERAND (CLEANUP_STMT_CHECK (NODE), 2)
3311
3312 /* IF_STMT accessors. These give access to the condition of the if
3313    statement, the then block of the if statement, and the else block
3314    of the if statement if it exists.  */
3315 #define IF_COND(NODE)           TREE_OPERAND (IF_STMT_CHECK (NODE), 0)
3316 #define THEN_CLAUSE(NODE)       TREE_OPERAND (IF_STMT_CHECK (NODE), 1)
3317 #define ELSE_CLAUSE(NODE)       TREE_OPERAND (IF_STMT_CHECK (NODE), 2)
3318
3319 /* WHILE_STMT accessors. These give access to the condition of the
3320    while statement and the body of the while statement, respectively.  */
3321 #define WHILE_COND(NODE)        TREE_OPERAND (WHILE_STMT_CHECK (NODE), 0)
3322 #define WHILE_BODY(NODE)        TREE_OPERAND (WHILE_STMT_CHECK (NODE), 1)
3323
3324 /* DO_STMT accessors. These give access to the condition of the do
3325    statement and the body of the do statement, respectively.  */
3326 #define DO_COND(NODE)           TREE_OPERAND (DO_STMT_CHECK (NODE), 0)
3327 #define DO_BODY(NODE)           TREE_OPERAND (DO_STMT_CHECK (NODE), 1)
3328
3329 /* FOR_STMT accessors. These give access to the init statement,
3330    condition, update expression, and body of the for statement,
3331    respectively.  */
3332 #define FOR_INIT_STMT(NODE)     TREE_OPERAND (FOR_STMT_CHECK (NODE), 0)
3333 #define FOR_COND(NODE)          TREE_OPERAND (FOR_STMT_CHECK (NODE), 1)
3334 #define FOR_EXPR(NODE)          TREE_OPERAND (FOR_STMT_CHECK (NODE), 2)
3335 #define FOR_BODY(NODE)          TREE_OPERAND (FOR_STMT_CHECK (NODE), 3)
3336
3337 #define SWITCH_STMT_COND(NODE)  TREE_OPERAND (SWITCH_STMT_CHECK (NODE), 0)
3338 #define SWITCH_STMT_BODY(NODE)  TREE_OPERAND (SWITCH_STMT_CHECK (NODE), 1)
3339 #define SWITCH_STMT_TYPE(NODE)  TREE_OPERAND (SWITCH_STMT_CHECK (NODE), 2)
3340
3341 /* STMT_EXPR accessor.  */
3342 #define STMT_EXPR_STMT(NODE)    TREE_OPERAND (STMT_EXPR_CHECK (NODE), 0)
3343
3344 /* EXPR_STMT accessor. This gives the expression associated with an
3345    expression statement.  */
3346 #define EXPR_STMT_EXPR(NODE)    TREE_OPERAND (EXPR_STMT_CHECK (NODE), 0)
3347
3348 /* True if this TARGET_EXPR was created by build_cplus_new, and so we can
3349    discard it if it isn't useful.  */
3350 #define TARGET_EXPR_IMPLICIT_P(NODE) \
3351   TREE_LANG_FLAG_0 (TARGET_EXPR_CHECK (NODE))
3352
3353 /* An enumeration of the kind of tags that C++ accepts.  */
3354 enum tag_types {
3355   none_type = 0, /* Not a tag type.  */
3356   record_type,   /* "struct" types.  */
3357   class_type,    /* "class" types.  */
3358   union_type,    /* "union" types.  */
3359   enum_type,     /* "enum" types.  */
3360   typename_type  /* "typename" types.  */
3361 };
3362
3363 /* The various kinds of lvalues we distinguish.  */
3364 typedef enum cp_lvalue_kind {
3365   clk_none = 0,     /* Things that are not an lvalue.  */
3366   clk_ordinary = 1, /* An ordinary lvalue.  */
3367   clk_class = 2,    /* An rvalue of class-type.  */
3368   clk_bitfield = 4, /* An lvalue for a bit-field.  */
3369   clk_packed = 8    /* An lvalue for a packed field.  */
3370 } cp_lvalue_kind;
3371
3372 /* Various kinds of template specialization, instantiation, etc.  */
3373 typedef enum tmpl_spec_kind {
3374   tsk_none,                /* Not a template at all.  */
3375   tsk_invalid_member_spec, /* An explicit member template
3376                               specialization, but the enclosing
3377                               classes have not all been explicitly
3378                               specialized.  */
3379   tsk_invalid_expl_inst,   /* An explicit instantiation containing
3380                               template parameter lists.  */
3381   tsk_excessive_parms,     /* A template declaration with too many
3382                               template parameter lists.  */
3383   tsk_insufficient_parms,  /* A template declaration with too few
3384                               parameter lists.  */
3385   tsk_template,            /* A template declaration.  */
3386   tsk_expl_spec,           /* An explicit specialization.  */
3387   tsk_expl_inst            /* An explicit instantiation.  */
3388 } tmpl_spec_kind;
3389
3390 /* The various kinds of access.  BINFO_ACCESS depends on these being
3391    two bit quantities.  The numerical values are important; they are
3392    used to initialize RTTI data structures, so changing them changes
3393    the ABI.  */
3394 typedef enum access_kind {
3395   ak_none = 0,             /* Inaccessible.  */
3396   ak_public = 1,           /* Accessible, as a `public' thing.  */
3397   ak_protected = 2,        /* Accessible, as a `protected' thing.  */
3398   ak_private = 3           /* Accessible, as a `private' thing.  */
3399 } access_kind;
3400
3401 /* The various kinds of special functions.  If you add to this list,
3402    you should update special_function_p as well.  */
3403 typedef enum special_function_kind {
3404   sfk_none = 0,            /* Not a special function.  This enumeral
3405                               must have value zero; see
3406                               special_function_p.  */
3407   sfk_constructor,         /* A constructor.  */
3408   sfk_copy_constructor,    /* A copy constructor.  */
3409   sfk_assignment_operator, /* An assignment operator.  */
3410   sfk_destructor,          /* A destructor.  */
3411   sfk_complete_destructor, /* A destructor for complete objects.  */
3412   sfk_base_destructor,     /* A destructor for base subobjects.  */
3413   sfk_deleting_destructor, /* A destructor for complete objects that
3414                               deletes the object after it has been
3415                               destroyed.  */
3416   sfk_conversion           /* A conversion operator.  */
3417 } special_function_kind;
3418
3419 /* The various kinds of linkage.  From [basic.link],
3420
3421       A name is said to have linkage when it might denote the same
3422       object, reference, function, type, template, namespace or value
3423       as a name introduced in another scope:
3424
3425       -- When a name has external linkage, the entity it denotes can
3426          be referred to from scopes of other translation units or from
3427          other scopes of the same translation unit.
3428
3429       -- When a name has internal linkage, the entity it denotes can
3430          be referred to by names from other scopes in the same
3431          translation unit.
3432
3433       -- When a name has no linkage, the entity it denotes cannot be
3434          referred to by names from other scopes.  */
3435
3436 typedef enum linkage_kind {
3437   lk_none,                      /* No linkage.  */
3438   lk_internal,                  /* Internal linkage.  */
3439   lk_external                   /* External linkage.  */
3440 } linkage_kind;
3441
3442 /* Bitmask flags to control type substitution.  */
3443 typedef enum tsubst_flags_t {
3444   tf_none = 0,                  /* nothing special */
3445   tf_error = 1 << 0,            /* give error messages  */
3446   tf_warning = 1 << 1,          /* give warnings too  */
3447   tf_ignore_bad_quals = 1 << 2, /* ignore bad cvr qualifiers */
3448   tf_keep_type_decl = 1 << 3,   /* retain typedef type decls
3449                                    (make_typename_type use) */
3450   tf_ptrmem_ok = 1 << 4,        /* pointers to member ok (internal
3451                                    instantiate_type use) */
3452   tf_user = 1 << 5,             /* found template must be a user template
3453                                    (lookup_template_class use) */
3454   tf_conv = 1 << 6,             /* We are determining what kind of
3455                                    conversion might be permissible,
3456                                    not actually performing the
3457                                    conversion.  */
3458   /* Convenient substitution flags combinations.  */
3459   tf_warning_or_error = tf_warning | tf_error
3460 } tsubst_flags_t;
3461
3462 /* The kind of checking we can do looking in a class hierarchy.  */
3463 typedef enum base_access {
3464   ba_any = 0,  /* Do not check access, allow an ambiguous base,
3465                       prefer a non-virtual base */
3466   ba_unique = 1 << 0,  /* Must be a unique base.  */
3467   ba_check_bit = 1 << 1,   /* Check access.  */
3468   ba_check = ba_unique | ba_check_bit,
3469   ba_ignore_scope = 1 << 2, /* Ignore access allowed by local scope.  */
3470   ba_quiet = 1 << 3     /* Do not issue error messages.  */
3471 } base_access;
3472
3473 /* The various kinds of access check during parsing.  */
3474 typedef enum deferring_kind {
3475   dk_no_deferred = 0, /* Check access immediately */
3476   dk_deferred = 1,    /* Deferred check */
3477   dk_no_check = 2     /* No access check */
3478 } deferring_kind;
3479
3480 /* The kind of base we can find, looking in a class hierarchy.
3481    Values <0 indicate we failed.  */
3482 typedef enum base_kind {
3483   bk_inaccessible = -3,   /* The base is inaccessible */
3484   bk_ambig = -2,          /* The base is ambiguous */
3485   bk_not_base = -1,       /* It is not a base */
3486   bk_same_type = 0,       /* It is the same type */
3487   bk_proper_base = 1,     /* It is a proper base */
3488   bk_via_virtual = 2      /* It is a proper base, but via a virtual
3489                              path. This might not be the canonical
3490                              binfo.  */
3491 } base_kind;
3492
3493 /* Node for "pointer to (virtual) function".
3494    This may be distinct from ptr_type_node so gdb can distinguish them.  */
3495 #define vfunc_ptr_type_node  vtable_entry_type
3496
3497
3498 /* For building calls to `delete'.  */
3499 extern GTY(()) tree integer_two_node;
3500 extern GTY(()) tree integer_three_node;
3501
3502 /* The number of function bodies which we are currently processing.
3503    (Zero if we are at namespace scope, one inside the body of a
3504    function, two inside the body of a function in a local class, etc.)  */
3505 extern int function_depth;
3506
3507 /* in pt.c  */
3508
3509 /* These values are used for the `STRICT' parameter to type_unification and
3510    fn_type_unification.  Their meanings are described with the
3511    documentation for fn_type_unification.  */
3512
3513 typedef enum unification_kind_t {
3514   DEDUCE_CALL,
3515   DEDUCE_CONV,
3516   DEDUCE_EXACT
3517 } unification_kind_t;
3518
3519 /* Macros for operating on a template instantiation level node.  */
3520
3521 #define TINST_DECL(NODE) \
3522   (((tinst_level_t) TINST_LEVEL_CHECK (NODE))->decl)
3523 #define TINST_LOCATION(NODE) \
3524   (((tinst_level_t) TINST_LEVEL_CHECK (NODE))->locus)
3525 #define TINST_IN_SYSTEM_HEADER_P(NODE) \
3526   (((tinst_level_t) TINST_LEVEL_CHECK (NODE))->in_system_header_p)
3527
3528 /* in class.c */
3529
3530 extern int current_class_depth;
3531
3532 /* An array of all local classes present in this translation unit, in
3533    declaration order.  */
3534 extern GTY(()) VEC(tree,gc) *local_classes;
3535 \f
3536 /* Here's where we control how name mangling takes place.  */
3537
3538 /* Cannot use '$' up front, because this confuses gdb
3539    (names beginning with '$' are gdb-local identifiers).
3540
3541    Note that all forms in which the '$' is significant are long enough
3542    for direct indexing (meaning that if we know there is a '$'
3543    at a particular location, we can index into the string at
3544    any other location that provides distinguishing characters).  */
3545
3546 /* Define NO_DOLLAR_IN_LABEL in your favorite tm file if your assembler
3547    doesn't allow '$' in symbol names.  */
3548 #ifndef NO_DOLLAR_IN_LABEL
3549
3550 #define JOINER '$'
3551
3552 #define AUTO_TEMP_NAME "_$tmp_"
3553 #define VFIELD_BASE "$vf"
3554 #define VFIELD_NAME "_vptr$"
3555 #define VFIELD_NAME_FORMAT "_vptr$%s"
3556 #define ANON_AGGRNAME_FORMAT "$_%d"
3557
3558 #else /* NO_DOLLAR_IN_LABEL */
3559
3560 #ifndef NO_DOT_IN_LABEL
3561
3562 #define JOINER '.'
3563
3564 #define AUTO_TEMP_NAME "_.tmp_"
3565 #define VFIELD_BASE ".vf"
3566 #define VFIELD_NAME "_vptr."
3567 #define VFIELD_NAME_FORMAT "_vptr.%s"
3568
3569 #define ANON_AGGRNAME_FORMAT "._%d"
3570
3571 #else /* NO_DOT_IN_LABEL */
3572
3573 #define IN_CHARGE_NAME "__in_chrg"
3574 #define AUTO_TEMP_NAME "__tmp_"
3575 #define TEMP_NAME_P(ID_NODE) \
3576   (!strncmp (IDENTIFIER_POINTER (ID_NODE), AUTO_TEMP_NAME, \
3577              sizeof (AUTO_TEMP_NAME) - 1))
3578 #define VTABLE_NAME "__vt_"
3579 #define VTABLE_NAME_P(ID_NODE) \
3580   (!strncmp (IDENTIFIER_POINTER (ID_NODE), VTABLE_NAME, \
3581              sizeof (VTABLE_NAME) - 1))
3582 #define VFIELD_BASE "__vfb"
3583 #define VFIELD_NAME "__vptr_"
3584 #define VFIELD_NAME_P(ID_NODE) \
3585   (!strncmp (IDENTIFIER_POINTER (ID_NODE), VFIELD_NAME, \
3586             sizeof (VFIELD_NAME) - 1))
3587 #define VFIELD_NAME_FORMAT "__vptr_%s"
3588
3589 #define ANON_AGGRNAME_PREFIX "__anon_"
3590 #define ANON_AGGRNAME_P(ID_NODE) \
3591   (!strncmp (IDENTIFIER_POINTER (ID_NODE), ANON_AGGRNAME_PREFIX, \
3592              sizeof (ANON_AGGRNAME_PREFIX) - 1))
3593 #define ANON_AGGRNAME_FORMAT "__anon_%d"
3594
3595 #endif  /* NO_DOT_IN_LABEL */
3596 #endif  /* NO_DOLLAR_IN_LABEL */
3597
3598 #define THIS_NAME "this"
3599
3600 #define IN_CHARGE_NAME "__in_chrg"
3601
3602 #define VTBL_PTR_TYPE           "__vtbl_ptr_type"
3603 #define VTABLE_DELTA_NAME       "__delta"
3604 #define VTABLE_PFN_NAME         "__pfn"
3605
3606 #if !defined(NO_DOLLAR_IN_LABEL) || !defined(NO_DOT_IN_LABEL)
3607
3608 #define VTABLE_NAME_P(ID_NODE) (IDENTIFIER_POINTER (ID_NODE)[1] == 'v' \
3609   && IDENTIFIER_POINTER (ID_NODE)[2] == 't' \
3610   && IDENTIFIER_POINTER (ID_NODE)[3] == JOINER)
3611
3612 #define TEMP_NAME_P(ID_NODE) \
3613   (!strncmp (IDENTIFIER_POINTER (ID_NODE), AUTO_TEMP_NAME, sizeof (AUTO_TEMP_NAME)-1))
3614 #define VFIELD_NAME_P(ID_NODE) \
3615   (!strncmp (IDENTIFIER_POINTER (ID_NODE), VFIELD_NAME, sizeof(VFIELD_NAME)-1))
3616
3617 /* For anonymous aggregate types, we need some sort of name to
3618    hold on to.  In practice, this should not appear, but it should
3619    not be harmful if it does.  */
3620 #define ANON_AGGRNAME_P(ID_NODE) (IDENTIFIER_POINTER (ID_NODE)[0] == JOINER \
3621                                   && IDENTIFIER_POINTER (ID_NODE)[1] == '_')
3622 #endif /* !defined(NO_DOLLAR_IN_LABEL) || !defined(NO_DOT_IN_LABEL) */
3623
3624 \f
3625 /* Nonzero if we're done parsing and into end-of-file activities.  */
3626
3627 extern int at_eof;
3628
3629 /* A list of namespace-scope objects which have constructors or
3630    destructors which reside in the global scope.  The decl is stored
3631    in the TREE_VALUE slot and the initializer is stored in the
3632    TREE_PURPOSE slot.  */
3633 extern GTY(()) tree static_aggregates;
3634
3635 enum overload_flags { NO_SPECIAL = 0, DTOR_FLAG, OP_FLAG, TYPENAME_FLAG };
3636
3637 /* These are uses as bits in flags passed to various functions to
3638    control their behavior.  Despite the LOOKUP_ prefix, many of these
3639    do not control name lookup.  ??? Functions using these flags should
3640    probably be modified to accept explicit boolean flags for the
3641    behaviors relevant to them.  */
3642 /* Check for access violations.  */
3643 #define LOOKUP_PROTECT (1 << 0)
3644 /* Complain if no suitable member function matching the arguments is
3645    found.  */
3646 #define LOOKUP_COMPLAIN (1 << 1)
3647 #define LOOKUP_NORMAL (LOOKUP_PROTECT | LOOKUP_COMPLAIN)
3648 /* Even if the function found by lookup is a virtual function, it
3649    should be called directly.  */
3650 #define LOOKUP_NONVIRTUAL (1 << 2)
3651 /* Non-converting (i.e., "explicit") constructors are not tried.  */
3652 #define LOOKUP_ONLYCONVERTING (1 << 3)
3653 /* If a temporary is created, it should be created so that it lives
3654    as long as the current variable bindings; otherwise it only lives
3655    until the end of the complete-expression.  It also forces
3656    direct-initialization in cases where other parts of the compiler
3657    have already generated a temporary, such as reference
3658    initialization and the catch parameter.  */
3659 #define DIRECT_BIND (1 << 4)
3660 /* User-defined conversions are not permitted.  (Built-in conversions
3661    are permitted.)  */
3662 #define LOOKUP_NO_CONVERSION (1 << 5)
3663 /* The user has explicitly called a destructor.  (Therefore, we do
3664    not need to check that the object is non-NULL before calling the
3665    destructor.)  */
3666 #define LOOKUP_DESTRUCTOR (1 << 6)
3667 /* Do not permit references to bind to temporaries.  */
3668 #define LOOKUP_NO_TEMP_BIND (1 << 7)
3669 /* Do not accept objects, and possibly namespaces.  */
3670 #define LOOKUP_PREFER_TYPES (1 << 8)
3671 /* Do not accept objects, and possibly types.   */
3672 #define LOOKUP_PREFER_NAMESPACES (1 << 9)
3673 /* Accept types or namespaces.  */
3674 #define LOOKUP_PREFER_BOTH (LOOKUP_PREFER_TYPES | LOOKUP_PREFER_NAMESPACES)
3675 /* We are checking that a constructor can be called -- but we do not
3676    actually plan to call it.  */
3677 #define LOOKUP_CONSTRUCTOR_CALLABLE (1 << 10)
3678 /* Return friend declarations and un-declared builtin functions.
3679    (Normally, these entities are registered in the symbol table, but
3680    not found by lookup.)  */
3681 #define LOOKUP_HIDDEN (LOOKUP_CONSTRUCTOR_CALLABLE << 1)
3682
3683 #define LOOKUP_NAMESPACES_ONLY(F)  \
3684   (((F) & LOOKUP_PREFER_NAMESPACES) && !((F) & LOOKUP_PREFER_TYPES))
3685 #define LOOKUP_TYPES_ONLY(F)  \
3686   (!((F) & LOOKUP_PREFER_NAMESPACES) && ((F) & LOOKUP_PREFER_TYPES))
3687 #define LOOKUP_QUALIFIERS_ONLY(F)     ((F) & LOOKUP_PREFER_BOTH)
3688
3689
3690 /* These flags are used by the conversion code.
3691    CONV_IMPLICIT   :  Perform implicit conversions (standard and user-defined).
3692    CONV_STATIC     :  Perform the explicit conversions for static_cast.
3693    CONV_CONST      :  Perform the explicit conversions for const_cast.
3694    CONV_REINTERPRET:  Perform the explicit conversions for reinterpret_cast.
3695    CONV_PRIVATE    :  Perform upcasts to private bases.
3696    CONV_FORCE_TEMP :  Require a new temporary when converting to the same
3697                       aggregate type.  */
3698
3699 #define CONV_IMPLICIT    1
3700 #define CONV_STATIC      2
3701 #define CONV_CONST       4
3702 #define CONV_REINTERPRET 8
3703 #define CONV_PRIVATE     16
3704 /* #define CONV_NONCONVERTING 32 */
3705 #define CONV_FORCE_TEMP  64
3706 #define CONV_OLD_CONVERT (CONV_IMPLICIT | CONV_STATIC | CONV_CONST \
3707                           | CONV_REINTERPRET)
3708 #define CONV_C_CAST      (CONV_IMPLICIT | CONV_STATIC | CONV_CONST \
3709                           | CONV_REINTERPRET | CONV_PRIVATE | CONV_FORCE_TEMP)
3710
3711 /* Used by build_expr_type_conversion to indicate which types are
3712    acceptable as arguments to the expression under consideration.  */
3713
3714 #define WANT_INT        1 /* integer types, including bool */
3715 #define WANT_FLOAT      2 /* floating point types */
3716 #define WANT_ENUM       4 /* enumerated types */
3717 #define WANT_POINTER    8 /* pointer types */
3718 #define WANT_NULL      16 /* null pointer constant */
3719 #define WANT_VECTOR    32 /* vector types */
3720 #define WANT_ARITH      (WANT_INT | WANT_FLOAT | WANT_VECTOR)
3721
3722 /* Used with comptypes, and related functions, to guide type
3723    comparison.  */
3724
3725 #define COMPARE_STRICT        0 /* Just check if the types are the
3726                                    same.  */
3727 #define COMPARE_BASE          1 /* Check to see if the second type is
3728                                    derived from the first.  */
3729 #define COMPARE_DERIVED       2 /* Like COMPARE_BASE, but in
3730                                    reverse.  */
3731 #define COMPARE_REDECLARATION 4 /* The comparison is being done when
3732                                    another declaration of an existing
3733                                    entity is seen.  */
3734 #define COMPARE_STRUCTURAL    8 /* The comparison is intended to be
3735                                    structural. The actual comparison
3736                                    will be identical to
3737                                    COMPARE_STRICT.  */
3738
3739 /* Used with push_overloaded_decl.  */
3740 #define PUSH_GLOBAL          0  /* Push the DECL into namespace scope,
3741                                    regardless of the current scope.  */
3742 #define PUSH_LOCAL           1  /* Push the DECL into the current
3743                                    scope.  */
3744 #define PUSH_USING           2  /* We are pushing this DECL as the
3745                                    result of a using declaration.  */
3746
3747 /* Used with start function.  */
3748 #define SF_DEFAULT           0  /* No flags.  */
3749 #define SF_PRE_PARSED        1  /* The function declaration has
3750                                    already been parsed.  */
3751 #define SF_INCLASS_INLINE    2  /* The function is an inline, defined
3752                                    in the class body.  */
3753
3754 /* Returns nonzero iff TYPE1 and TYPE2 are the same type, or if TYPE2
3755    is derived from TYPE1, or if TYPE2 is a pointer (reference) to a
3756    class derived from the type pointed to (referred to) by TYPE1.  */
3757 #define same_or_base_type_p(TYPE1, TYPE2) \
3758   comptypes ((TYPE1), (TYPE2), COMPARE_BASE)
3759
3760 /* These macros are used to access a TEMPLATE_PARM_INDEX.  */
3761 #define TEMPLATE_PARM_INDEX_CAST(NODE) \
3762         ((template_parm_index*)TEMPLATE_PARM_INDEX_CHECK (NODE))
3763 #define TEMPLATE_PARM_IDX(NODE) (TEMPLATE_PARM_INDEX_CAST (NODE)->index)
3764 #define TEMPLATE_PARM_LEVEL(NODE) (TEMPLATE_PARM_INDEX_CAST (NODE)->level)
3765 #define TEMPLATE_PARM_DESCENDANTS(NODE) (TREE_CHAIN (NODE))
3766 #define TEMPLATE_PARM_ORIG_LEVEL(NODE) (TEMPLATE_PARM_INDEX_CAST (NODE)->orig_level)
3767 #define TEMPLATE_PARM_DECL(NODE) (TEMPLATE_PARM_INDEX_CAST (NODE)->decl)
3768 #define TEMPLATE_PARM_PARAMETER_PACK(NODE) \
3769   (TREE_LANG_FLAG_0 (TEMPLATE_PARM_INDEX_CHECK (NODE)))
3770
3771 /* These macros are for accessing the fields of TEMPLATE_TYPE_PARM,
3772    TEMPLATE_TEMPLATE_PARM and BOUND_TEMPLATE_TEMPLATE_PARM nodes.  */
3773 #define TEMPLATE_TYPE_PARM_INDEX(NODE)                                   \
3774   (TREE_CHECK3 ((NODE), TEMPLATE_TYPE_PARM, TEMPLATE_TEMPLATE_PARM,     \
3775                 BOUND_TEMPLATE_TEMPLATE_PARM))->type.values
3776 #define TEMPLATE_TYPE_IDX(NODE) \
3777   (TEMPLATE_PARM_IDX (TEMPLATE_TYPE_PARM_INDEX (NODE)))
3778 #define TEMPLATE_TYPE_LEVEL(NODE) \
3779   (TEMPLATE_PARM_LEVEL (TEMPLATE_TYPE_PARM_INDEX (NODE)))
3780 #define TEMPLATE_TYPE_ORIG_LEVEL(NODE) \
3781   (TEMPLATE_PARM_ORIG_LEVEL (TEMPLATE_TYPE_PARM_INDEX (NODE)))
3782 #define TEMPLATE_TYPE_DECL(NODE) \
3783   (TEMPLATE_PARM_DECL (TEMPLATE_TYPE_PARM_INDEX (NODE)))
3784 #define TEMPLATE_TYPE_PARAMETER_PACK(NODE) \
3785   (TEMPLATE_PARM_PARAMETER_PACK (TEMPLATE_TYPE_PARM_INDEX (NODE)))
3786
3787 /* These constants can used as bit flags in the process of tree formatting.
3788
3789    TFF_PLAIN_IDENTIFIER: unqualified part of a name.
3790    TFF_SCOPE: include the class and namespace scope of the name.
3791    TFF_CHASE_TYPEDEF: print the original type-id instead of the typedef-name.
3792    TFF_DECL_SPECIFIERS: print decl-specifiers.
3793    TFF_CLASS_KEY_OR_ENUM: precede a class-type name (resp. enum name) with
3794        a class-key (resp. `enum').
3795    TFF_RETURN_TYPE: include function return type.
3796    TFF_FUNCTION_DEFAULT_ARGUMENTS: include function default parameter values.
3797    TFF_EXCEPTION_SPECIFICATION: show function exception specification.
3798    TFF_TEMPLATE_HEADER: show the template<...> header in a
3799        template-declaration.
3800    TFF_TEMPLATE_NAME: show only template-name.
3801    TFF_EXPR_IN_PARENS: parenthesize expressions.
3802    TFF_NO_FUNCTION_ARGUMENTS: don't show function arguments.
3803    TFF_UNQUALIFIED_NAME: do not print the qualifying scope of the
3804        top-level entity.  */
3805
3806 #define TFF_PLAIN_IDENTIFIER                    (0)
3807 #define TFF_SCOPE                               (1)
3808 #define TFF_CHASE_TYPEDEF                       (1 << 1)
3809 #define TFF_DECL_SPECIFIERS                     (1 << 2)
3810 #define TFF_CLASS_KEY_OR_ENUM                   (1 << 3)
3811 #define TFF_RETURN_TYPE                         (1 << 4)
3812 #define TFF_FUNCTION_DEFAULT_ARGUMENTS          (1 << 5)
3813 #define TFF_EXCEPTION_SPECIFICATION             (1 << 6)
3814 #define TFF_TEMPLATE_HEADER                     (1 << 7)
3815 #define TFF_TEMPLATE_NAME                       (1 << 8)
3816 #define TFF_EXPR_IN_PARENS                      (1 << 9)
3817 #define TFF_NO_FUNCTION_ARGUMENTS               (1 << 10)
3818 #define TFF_UNQUALIFIED_NAME                    (1 << 11)
3819
3820 /* Returns the TEMPLATE_DECL associated to a TEMPLATE_TEMPLATE_PARM
3821    node.  */
3822 #define TEMPLATE_TEMPLATE_PARM_TEMPLATE_DECL(NODE)      \
3823   ((TREE_CODE (NODE) == BOUND_TEMPLATE_TEMPLATE_PARM)   \
3824    ? TYPE_TI_TEMPLATE (NODE)                            \
3825    : TYPE_NAME (NODE))
3826
3827 /* in lex.c  */
3828
3829 extern void init_reswords (void);
3830
3831 /* Indexed by TREE_CODE, these tables give C-looking names to
3832    operators represented by TREE_CODES.  For example,
3833    opname_tab[(int) MINUS_EXPR] == "-".  */
3834 extern const char **opname_tab, **assignop_tab;
3835
3836 typedef struct operator_name_info_t GTY(())
3837 {
3838   /* The IDENTIFIER_NODE for the operator.  */
3839   tree identifier;
3840   /* The name of the operator.  */
3841   const char *name;
3842   /* The mangled name of the operator.  */
3843   const char *mangled_name;
3844   /* The arity of the operator.  */
3845   int arity;
3846 } operator_name_info_t;
3847
3848 /* A mapping from tree codes to operator name information.  */
3849 extern GTY(()) operator_name_info_t operator_name_info
3850   [(int) LAST_CPLUS_TREE_CODE];
3851 /* Similar, but for assignment operators.  */
3852 extern GTY(()) operator_name_info_t assignment_operator_name_info
3853   [(int) LAST_CPLUS_TREE_CODE];
3854
3855 /* A type-qualifier, or bitmask therefore, using the TYPE_QUAL
3856    constants.  */
3857
3858 typedef int cp_cv_quals;
3859
3860 /* A storage class.  */
3861
3862 typedef enum cp_storage_class {
3863   /* sc_none must be zero so that zeroing a cp_decl_specifier_seq
3864      sets the storage_class field to sc_none.  */
3865   sc_none = 0,
3866   sc_auto,
3867   sc_register,
3868   sc_static,
3869   sc_extern,
3870   sc_mutable
3871 } cp_storage_class;
3872
3873 /* An individual decl-specifier.  */
3874
3875 typedef enum cp_decl_spec {
3876   ds_first,
3877   ds_signed = ds_first,
3878   ds_unsigned,
3879   ds_short,
3880   ds_long,
3881   ds_const,
3882   ds_volatile,
3883   ds_restrict,
3884   ds_inline,
3885   ds_virtual,
3886   ds_explicit,
3887   ds_friend,
3888   ds_typedef,
3889   ds_complex,
3890   ds_thread,
3891   ds_last
3892 } cp_decl_spec;
3893
3894 /* A decl-specifier-seq.  */
3895
3896 typedef struct cp_decl_specifier_seq {
3897   /* The number of times each of the keywords has been seen.  */
3898   unsigned specs[(int) ds_last];
3899   /* The primary type, if any, given by the decl-specifier-seq.
3900      Modifiers, like "short", "const", and "unsigned" are not
3901      reflected here.  This field will be a TYPE, unless a typedef-name
3902      was used, in which case it will be a TYPE_DECL.  */
3903   tree type;
3904   /* The attributes, if any, provided with the specifier sequence.  */
3905   tree attributes;
3906   /* If non-NULL, a built-in type that the user attempted to redefine
3907      to some other type.  */
3908   tree redefined_builtin_type;
3909   /* The storage class specified -- or sc_none if no storage class was
3910      explicitly specified.  */
3911   cp_storage_class storage_class;
3912   /* True iff TYPE_SPEC indicates a user-defined type.  */
3913   BOOL_BITFIELD user_defined_type_p : 1;
3914   /* True iff multiple types were (erroneously) specified for this
3915      decl-specifier-seq.  */
3916   BOOL_BITFIELD multiple_types_p : 1;
3917   /* True iff multiple storage classes were (erroneously) specified
3918      for this decl-specifier-seq or a combination of a storage class
3919      with a typedef specifier.  */
3920   BOOL_BITFIELD conflicting_specifiers_p : 1;
3921   /* True iff at least one decl-specifier was found.  */
3922   BOOL_BITFIELD any_specifiers_p : 1;
3923   /* True iff "int" was explicitly provided.  */
3924   BOOL_BITFIELD explicit_int_p : 1;
3925   /* True iff "char" was explicitly provided.  */
3926   BOOL_BITFIELD explicit_char_p : 1;
3927 } cp_decl_specifier_seq;
3928
3929 /* The various kinds of declarators.  */
3930
3931 typedef enum cp_declarator_kind {
3932   cdk_id,
3933   cdk_function,
3934   cdk_array,
3935   cdk_pointer,
3936   cdk_reference,
3937   cdk_ptrmem,
3938   cdk_error
3939 } cp_declarator_kind;
3940
3941 /* A declarator.  */
3942
3943 typedef struct cp_declarator cp_declarator;
3944
3945 typedef struct cp_parameter_declarator cp_parameter_declarator;
3946
3947 /* A parameter, before it has been semantically analyzed.  */
3948 struct cp_parameter_declarator {
3949   /* The next parameter, or NULL_TREE if none.  */
3950   cp_parameter_declarator *next;
3951   /* The decl-specifiers-seq for the parameter.  */
3952   cp_decl_specifier_seq decl_specifiers;
3953   /* The declarator for the parameter.  */
3954   cp_declarator *declarator;
3955   /* The default-argument expression, or NULL_TREE, if none.  */
3956   tree default_argument;
3957   /* True iff this is the first parameter in the list and the
3958      parameter sequence ends with an ellipsis.  */
3959   bool ellipsis_p;
3960 };
3961
3962 /* A declarator.  */
3963 struct cp_declarator {
3964   /* The kind of declarator.  */
3965   ENUM_BITFIELD (cp_declarator_kind) kind : 4;
3966   /* Whether we parsed an ellipsis (`...') just before the declarator,
3967      to indicate this is a parameter pack.  */
3968   BOOL_BITFIELD parameter_pack_p : 1;
3969   /* Attributes that apply to this declarator.  */
3970   tree attributes;
3971   /* For all but cdk_id and cdk_error, the contained declarator.  For
3972      cdk_id and cdk_error, guaranteed to be NULL.  */
3973   cp_declarator *declarator;
3974   location_t id_loc; /* Currently only set for cdk_id. */
3975   union {
3976     /* For identifiers.  */
3977     struct {
3978       /* If non-NULL, the qualifying scope (a NAMESPACE_DECL or
3979          *_TYPE) for this identifier.  */
3980       tree qualifying_scope;
3981       /* The unqualified name of the entity -- an IDENTIFIER_NODE,
3982          BIT_NOT_EXPR, or TEMPLATE_ID_EXPR.  */
3983       tree unqualified_name;
3984       /* If this is the name of a function, what kind of special
3985          function (if any).  */
3986       special_function_kind sfk;
3987     } id;
3988     /* For functions.  */
3989     struct {
3990       /* The parameters to the function.  */
3991       cp_parameter_declarator *parameters;
3992       /* The cv-qualifiers for the function.  */
3993       cp_cv_quals qualifiers;
3994       /* The exception-specification for the function.  */
3995       tree exception_specification;
3996     } function;
3997     /* For arrays.  */
3998     struct {
3999       /* The bounds to the array.  */
4000       tree bounds;
4001     } array;
4002     /* For cdk_pointer, cdk_reference, and cdk_ptrmem.  */
4003     struct {
4004       /* The cv-qualifiers for the pointer.  */
4005       cp_cv_quals qualifiers;
4006       /* For cdk_ptrmem, the class type containing the member.  */
4007       tree class_type;
4008     } pointer;
4009   } u;
4010 };
4011
4012 /* A parameter list indicating for a function with no parameters,
4013    e.g  "int f(void)".  */
4014 extern cp_parameter_declarator *no_parameters;
4015
4016 /* in call.c */
4017 extern bool check_dtor_name                     (tree, tree);
4018
4019 extern tree build_vfield_ref                    (tree, tree);
4020 extern tree build_conditional_expr              (tree, tree, tree);
4021 extern tree build_addr_func                     (tree);
4022 extern tree build_call_a                        (tree, int, tree*);
4023 extern tree build_call_n                        (tree, int, ...);
4024 extern bool null_ptr_cst_p                      (tree);
4025 extern bool sufficient_parms_p                  (tree);
4026 extern tree type_decays_to                      (tree);
4027 extern tree build_user_type_conversion          (tree, tree, int);
4028 extern tree build_new_function_call             (tree, tree, bool);
4029 extern tree build_operator_new_call             (tree, tree, tree *, tree *,
4030                                                  tree *);
4031 extern tree build_new_method_call               (tree, tree, tree, tree, int,
4032                                                  tree *);
4033 extern tree build_special_member_call           (tree, tree, tree, tree, int);
4034 extern tree build_new_op                        (enum tree_code, int, tree, tree, tree, bool *);
4035 extern tree build_op_delete_call                (enum tree_code, tree, tree, bool, tree, tree);
4036 extern bool can_convert                         (tree, tree);
4037 extern bool can_convert_arg                     (tree, tree, tree, int);
4038 extern bool can_convert_arg_bad                 (tree, tree, tree);
4039 extern bool enforce_access                      (tree, tree, tree);
4040 extern tree convert_default_arg                 (tree, tree, tree, int);
4041 extern tree convert_arg_to_ellipsis             (tree);
4042 extern tree build_x_va_arg                      (tree, tree);
4043 extern tree cxx_type_promotes_to                (tree);
4044 extern tree type_passed_as                      (tree);
4045 extern tree convert_for_arg_passing             (tree, tree);
4046 extern bool is_properly_derived_from            (tree, tree);
4047 extern tree initialize_reference                (tree, tree, tree, tree *);
4048 extern tree make_temporary_var_for_ref_to_temp  (tree, tree);
4049 extern tree strip_top_quals                     (tree);
4050 extern tree perform_implicit_conversion         (tree, tree);
4051 extern tree perform_direct_initialization_if_possible (tree, tree, bool);
4052 extern tree in_charge_arg_for_name              (tree);
4053 extern tree build_cxx_call                      (tree, int, tree *);
4054 #ifdef ENABLE_CHECKING
4055 extern void validate_conversion_obstack         (void);
4056 #endif /* ENABLE_CHECKING */
4057
4058 /* in class.c */
4059 extern tree build_base_path                     (enum tree_code, tree,
4060                                                  tree, int);
4061 extern tree convert_to_base                     (tree, tree, bool, bool);
4062 extern tree convert_to_base_statically          (tree, tree);
4063 extern tree build_vtbl_ref                      (tree, tree);
4064 extern tree build_vfn_ref                       (tree, tree);
4065 extern tree get_vtable_decl                     (tree, int);
4066 extern void resort_type_method_vec              (void *, void *,
4067                                                  gt_pointer_operator, void *);
4068 extern bool add_method                          (tree, tree, tree);
4069 extern bool currently_open_class                (tree);
4070 extern tree currently_open_derived_class        (tree);
4071 extern tree finish_struct                       (tree, tree);
4072 extern void finish_struct_1                     (tree);
4073 extern int resolves_to_fixed_type_p             (tree, int *);
4074 extern void init_class_processing               (void);
4075 extern int is_empty_class                       (tree);
4076 extern void pushclass                           (tree);
4077 extern void popclass                            (void);
4078 extern void push_nested_class                   (tree);
4079 extern void pop_nested_class                    (void);
4080 extern int current_lang_depth                   (void);
4081 extern void push_lang_context                   (tree);
4082 extern void pop_lang_context                    (void);
4083 extern tree instantiate_type                    (tree, tree, tsubst_flags_t);
4084 extern void print_class_statistics              (void);
4085 extern void cxx_print_statistics                (void);
4086 extern void cxx_print_xnode                     (FILE *, tree, int);
4087 extern void cxx_print_decl                      (FILE *, tree, int);
4088 extern void cxx_print_type                      (FILE *, tree, int);
4089 extern void cxx_print_identifier                (FILE *, tree, int);
4090 extern void cxx_print_error_function    (struct diagnostic_context *,
4091                                                  const char *);
4092 extern void build_self_reference                (void);
4093 extern int same_signature_p                     (tree, tree);
4094 extern void maybe_add_class_template_decl_list  (tree, tree, int);
4095 extern void unreverse_member_declarations       (tree);
4096 extern void invalidate_class_lookup_cache       (void);
4097 extern void maybe_note_name_used_in_class       (tree, tree);
4098 extern void note_name_declared_in_class         (tree, tree);
4099 extern tree get_vtbl_decl_for_binfo             (tree);
4100 extern void debug_class                         (tree);
4101 extern void debug_thunks                        (tree);
4102 extern tree cp_fold_obj_type_ref                (tree, tree);
4103 extern void set_linkage_according_to_type       (tree, tree);
4104 extern void determine_key_method                (tree);
4105 extern void check_for_override                  (tree, tree);
4106 extern void push_class_stack                    (void);
4107 extern void pop_class_stack                     (void);
4108
4109 /* in cvt.c */
4110 extern tree convert_to_reference                (tree, tree, int, int, tree);
4111 extern tree convert_from_reference              (tree);
4112 extern tree force_rvalue                        (tree);
4113 extern tree ocp_convert                         (tree, tree, int, int);
4114 extern tree cp_convert                          (tree, tree);
4115 extern tree cp_convert_and_check                (tree, tree);
4116 extern tree convert_to_void     (tree, const char */*implicit context*/);
4117 extern tree convert_force                       (tree, tree, int);
4118 extern tree build_expr_type_conversion          (int, tree, bool);
4119 extern tree type_promotes_to                    (tree);
4120 extern tree perform_qualification_conversions   (tree, tree);
4121 extern void clone_function_decl                 (tree, int);
4122 extern void adjust_clone_args                   (tree);
4123
4124 /* decl.c */
4125 extern tree poplevel                            (int, int, int);
4126 extern void insert_block                        (tree);
4127 extern tree pushdecl                            (tree);
4128 extern tree pushdecl_maybe_friend               (tree, bool);
4129 extern void cxx_init_decl_processing            (void);
4130 enum cp_tree_node_structure_enum cp_tree_node_structure
4131                                                 (union lang_tree_node *);
4132 extern bool cxx_mark_addressable                (tree);
4133 extern void cxx_push_function_context           (struct function *);
4134 extern void cxx_pop_function_context            (struct function *);
4135 extern void maybe_push_cleanup_level            (tree);
4136 extern void finish_scope                        (void);
4137 extern void push_switch                         (tree);
4138 extern void pop_switch                          (void);
4139 extern tree pushtag                             (tree, tree, tag_scope);
4140 extern tree make_anon_name                      (void);
4141 extern int decls_match                          (tree, tree);
4142 extern tree duplicate_decls                     (tree, tree, bool);
4143 extern tree pushdecl_top_level_maybe_friend     (tree, bool);
4144 extern tree pushdecl_top_level_and_finish       (tree, tree);
4145 extern tree declare_local_label                 (tree);
4146 extern tree define_label                        (location_t, tree);
4147 extern void check_goto                          (tree);
4148 extern bool check_omp_return                    (void);
4149 extern tree make_typename_type                  (tree, tree, enum tag_types, tsubst_flags_t);
4150 extern tree make_unbound_class_template         (tree, tree, tree, tsubst_flags_t);
4151 extern tree check_for_out_of_scope_variable     (tree);
4152 extern tree build_library_fn                    (tree, tree);
4153 extern tree build_library_fn_ptr                (const char *, tree);
4154 extern tree build_cp_library_fn_ptr             (const char *, tree);
4155 extern tree push_library_fn                     (tree, tree);
4156 extern tree push_void_library_fn                (tree, tree);
4157 extern tree push_throw_library_fn               (tree, tree);
4158 extern tree check_tag_decl                      (cp_decl_specifier_seq *);
4159 extern tree shadow_tag                          (cp_decl_specifier_seq *);
4160 extern tree groktypename                        (cp_decl_specifier_seq *, const cp_declarator *);
4161 extern tree start_decl                          (const cp_declarator *, cp_decl_specifier_seq *, int, tree, tree, tree *);
4162 extern void start_decl_1                        (tree, bool);
4163 extern void cp_finish_decl                      (tree, tree, bool, tree, int);
4164 extern void finish_decl                         (tree, tree, tree);
4165 extern int cp_complete_array_type               (tree *, tree, bool);
4166 extern tree build_ptrmemfunc_type               (tree);
4167 extern tree build_ptrmem_type                   (tree, tree);
4168 /* the grokdeclarator prototype is in decl.h */
4169 extern tree build_this_parm                     (tree, cp_cv_quals);
4170 extern int copy_fn_p                            (tree);
4171 extern tree get_scope_of_declarator             (const cp_declarator *);
4172 extern void grok_special_member_properties      (tree);
4173 extern int grok_ctor_properties                 (tree, tree);
4174 extern bool grok_op_properties                  (tree, bool);
4175 extern tree xref_tag                            (enum tag_types, tree, tag_scope, bool);
4176 extern tree xref_tag_from_type                  (tree, tree, tag_scope);
4177 extern bool xref_basetypes                      (tree, tree);
4178 extern tree start_enum                          (tree);
4179 extern void finish_enum                         (tree);
4180 extern void build_enumerator                    (tree, tree, tree);
4181 extern void start_preparsed_function            (tree, tree, int);
4182 extern int start_function                       (cp_decl_specifier_seq *, const cp_declarator *, tree);
4183 extern tree begin_function_body                 (void);
4184 extern void finish_function_body                (tree);
4185 extern tree finish_function                     (int);
4186 extern tree start_method                        (cp_decl_specifier_seq *, const cp_declarator *, tree);
4187 extern tree finish_method                       (tree);
4188 extern void maybe_register_incomplete_var       (tree);
4189 extern void complete_vars                       (tree);
4190 extern void finish_stmt                         (void);
4191 extern void print_other_binding_stack           (struct cp_binding_level *);
4192 extern void revert_static_member_fn             (tree);
4193 extern void fixup_anonymous_aggr                (tree);
4194 extern int check_static_variable_definition     (tree, tree);
4195 extern tree compute_array_index_type            (tree, tree);
4196 extern tree check_default_argument              (tree, tree);
4197 typedef int (*walk_namespaces_fn)               (tree, void *);
4198 extern int walk_namespaces                      (walk_namespaces_fn,
4199                                                  void *);
4200 extern int wrapup_globals_for_namespace         (tree, void *);
4201 extern tree create_implicit_typedef             (tree, tree);
4202 extern tree maybe_push_decl                     (tree);
4203 extern tree force_target_expr                   (tree, tree);
4204 extern tree build_target_expr_with_type         (tree, tree);
4205 extern int local_variable_p                     (tree);
4206 extern int nonstatic_local_decl_p               (tree);
4207 extern tree register_dtor_fn                    (tree);
4208 extern tmpl_spec_kind current_tmpl_spec_kind    (int);
4209 extern tree cp_fname_init                       (const char *, tree *);
4210 extern tree cxx_builtin_function                (tree decl);
4211 extern tree check_elaborated_type_specifier     (enum tag_types, tree, bool);
4212 extern void warn_extern_redeclared_static       (tree, tree);
4213 extern const char *cxx_comdat_group             (tree);
4214 extern bool cp_missing_noreturn_ok_p            (tree);
4215 extern void initialize_artificial_var           (tree, tree);
4216 extern tree check_var_type                      (tree, tree);
4217 extern tree reshape_init (tree, tree);
4218
4219 /* in decl2.c */
4220 extern bool check_java_method                   (tree);
4221 extern tree build_memfn_type                    (tree, tree, cp_cv_quals);
4222 extern void maybe_retrofit_in_chrg              (tree);
4223 extern void maybe_make_one_only                 (tree);
4224 extern void grokclassfn                         (tree, tree,
4225                                                  enum overload_flags);
4226 extern tree grok_array_decl                     (tree, tree);
4227 extern tree delete_sanity                       (tree, tree, bool, int);
4228 extern tree check_classfn                       (tree, tree, tree);
4229 extern void check_member_template               (tree);
4230 extern tree grokfield (const cp_declarator *, cp_decl_specifier_seq *,
4231                        tree, bool, tree, tree);
4232 extern tree grokbitfield (const cp_declarator *, cp_decl_specifier_seq *,
4233                           tree);
4234 extern void cplus_decl_attributes               (tree *, tree, int);
4235 extern void finish_anon_union                   (tree);
4236 extern void cp_write_global_declarations        (void);
4237 extern tree coerce_new_type                     (tree);
4238 extern tree coerce_delete_type                  (tree);
4239 extern void comdat_linkage                      (tree);
4240 extern void determine_visibility                (tree);
4241 extern void constrain_class_visibility          (tree);
4242 extern void update_member_visibility            (tree);
4243 extern void import_export_decl                  (tree);
4244 extern tree build_cleanup                       (tree);
4245 extern tree build_offset_ref_call_from_tree     (tree, tree);
4246 extern void check_default_args                  (tree);
4247 extern void mark_used                           (tree);
4248 extern void finish_static_data_member_decl      (tree, tree, bool, tree, int);
4249 extern tree cp_build_parm_decl                  (tree, tree);
4250 extern tree get_guard                           (tree);
4251 extern tree get_guard_cond                      (tree);
4252 extern tree set_guard                           (tree);
4253 extern tree cxx_callgraph_analyze_expr          (tree *, int *, tree);
4254 extern void mark_needed                         (tree);
4255 extern bool decl_needed_p                       (tree);
4256 extern void note_vague_linkage_fn               (tree);
4257 extern tree build_artificial_parm               (tree, tree);
4258
4259 /* in error.c */
4260 extern void init_error                          (void);
4261 extern const char *type_as_string               (tree, int);
4262 extern const char *decl_as_string               (tree, int);
4263 extern const char *expr_as_string               (tree, int);
4264 extern const char *lang_decl_name               (tree, int);
4265 extern const char *language_to_string           (enum languages);
4266 extern const char *class_key_or_enum_as_string  (tree);
4267 extern void print_instantiation_context         (void);
4268 extern void maybe_warn_variadic_templates       (void);
4269
4270 /* in except.c */
4271 extern void init_exception_processing           (void);
4272 extern tree expand_start_catch_block            (tree);
4273 extern void expand_end_catch_block              (void);
4274 extern tree build_exc_ptr                       (void);
4275 extern tree build_throw                         (tree);
4276 extern int nothrow_libfn_p                      (tree);
4277 extern void check_handlers                      (tree);
4278 extern void choose_personality_routine          (enum languages);
4279 extern tree eh_type_info                        (tree);
4280
4281 /* in expr.c */
4282 extern rtx cxx_expand_expr                      (tree, rtx,
4283                                                  enum machine_mode,
4284                                                  int, rtx *);
4285 extern tree cplus_expand_constant               (tree);
4286
4287 /* friend.c */
4288 extern int is_friend                            (tree, tree);
4289 extern void make_friend_class                   (tree, tree, bool);
4290 extern void add_friend                          (tree, tree, bool);
4291 extern tree do_friend                           (tree, tree, tree, tree, enum overload_flags, bool);
4292
4293 /* in init.c */
4294 extern tree expand_member_init                  (tree);
4295 extern void emit_mem_initializers               (tree);
4296 extern tree build_aggr_init                     (tree, tree, int);
4297 extern int is_aggr_type                         (tree, int);
4298 extern tree get_type_value                      (tree);
4299 extern tree build_zero_init                     (tree, tree, bool);
4300 extern tree build_offset_ref                    (tree, tree, bool);
4301 extern tree build_new                           (tree, tree, tree, tree, int);
4302 extern tree build_vec_init                      (tree, tree, tree, bool, int);
4303 extern tree build_delete                        (tree, tree,
4304                                                  special_function_kind,
4305                                                  int, int);
4306 extern void push_base_cleanups                  (void);
4307 extern tree build_vec_delete                    (tree, tree,
4308                                                  special_function_kind, int);
4309 extern tree create_temporary_var                (tree);
4310 extern void initialize_vtbl_ptrs                (tree);
4311 extern tree build_java_class_ref                (tree);
4312 extern tree integral_constant_value             (tree);
4313
4314 /* in lex.c */
4315 extern void cxx_dup_lang_specific_decl          (tree);
4316 extern void yyungetc                            (int, int);
4317
4318 extern tree unqualified_name_lookup_error       (tree);
4319 extern tree unqualified_fn_lookup_error         (tree);
4320 extern tree build_lang_decl                     (enum tree_code, tree, tree);
4321 extern void retrofit_lang_decl                  (tree);
4322 extern tree copy_decl                           (tree);
4323 extern tree copy_type                           (tree);
4324 extern tree cxx_make_type                       (enum tree_code);
4325 extern tree make_aggr_type                      (enum tree_code);
4326 extern void yyerror                             (const char *);
4327 extern void yyhook                              (int);
4328 extern bool cxx_init                            (void);
4329 extern void cxx_finish                          (void);
4330
4331 /* in method.c */
4332 extern void init_method                         (void);
4333 extern tree make_thunk                          (tree, bool, tree, tree);
4334 extern void finish_thunk                        (tree);
4335 extern void use_thunk                           (tree, bool);
4336 extern void synthesize_method                   (tree);
4337 extern tree lazily_declare_fn                   (special_function_kind,
4338                                                  tree);
4339 extern tree skip_artificial_parms_for           (tree, tree);
4340 extern int num_artificial_parms_for             (tree);
4341 extern tree make_alias_for                      (tree, tree);
4342 extern tree locate_copy                         (tree, void *);
4343 extern tree locate_ctor                         (tree, void *);
4344 extern tree locate_dtor                         (tree, void *);
4345
4346 /* In optimize.c */
4347 extern bool maybe_clone_body                    (tree);
4348
4349 /* in pt.c */
4350 extern void check_template_shadow               (tree);
4351 extern tree get_innermost_template_args         (tree, int);
4352 extern void maybe_begin_member_template_processing (tree);
4353 extern void maybe_end_member_template_processing (void);
4354 extern tree finish_member_template_decl         (tree);
4355 extern void begin_template_parm_list            (void);
4356 extern bool begin_specialization                (void);
4357 extern void reset_specialization                (void);
4358 extern void end_specialization                  (void);
4359 extern void begin_explicit_instantiation        (void);
4360 extern void end_explicit_instantiation          (void);
4361 extern tree check_explicit_specialization       (tree, tree, int, int);
4362 extern tree process_template_parm               (tree, tree, bool, bool);
4363 extern tree end_template_parm_list              (tree);
4364 extern void end_template_decl                   (void);
4365 extern bool check_default_tmpl_args             (tree, tree, int, int, int);
4366 extern tree push_template_decl                  (tree);
4367 extern tree push_template_decl_real             (tree, bool);
4368 extern bool redeclare_class_template            (tree, tree);
4369 extern tree lookup_template_class               (tree, tree, tree, tree,
4370                                                  int, tsubst_flags_t);
4371 extern tree lookup_template_function            (tree, tree);
4372 extern int uses_template_parms                  (tree);
4373 extern int uses_template_parms_level            (tree, int);
4374 extern tree instantiate_class_template          (tree);
4375 extern tree instantiate_template                (tree, tree, tsubst_flags_t);
4376 extern int fn_type_unification                  (tree, tree, tree, tree,
4377                                                  tree, unification_kind_t, int);
4378 extern void mark_decl_instantiated              (tree, int);
4379 extern int more_specialized_fn                  (tree, tree, int);
4380 extern void do_decl_instantiation               (tree, tree);
4381 extern void do_type_instantiation               (tree, tree, tsubst_flags_t);
4382 extern tree instantiate_decl                    (tree, int, bool);
4383 extern int comp_template_parms                  (tree, tree);
4384 extern bool uses_parameter_packs                (tree);
4385 extern bool template_parameter_pack_p           (tree);
4386 extern bool template_parms_variadic_p           (tree);
4387 extern tree make_pack_expansion                 (tree);
4388 extern void check_for_bare_parameter_packs      (tree);
4389 extern int template_class_depth                 (tree);
4390 extern int is_specialization_of                 (tree, tree);
4391 extern bool is_specialization_of_friend         (tree, tree);
4392 extern int comp_template_args                   (tree, tree);
4393 extern tree maybe_process_partial_specialization (tree);
4394 extern tree most_specialized_instantiation      (tree);
4395 extern void print_candidates                    (tree);
4396 extern void instantiate_pending_templates       (int);
4397 extern tree tsubst_default_argument             (tree, tree, tree);
4398 extern tree tsubst_copy_and_build               (tree, tree, tsubst_flags_t,
4399                                                  tree, bool, bool);
4400 extern tree most_general_template               (tree);
4401 extern tree get_mostly_instantiated_function_type (tree);
4402 extern int problematic_instantiation_changed    (void);
4403 extern void record_last_problematic_instantiation (void);
4404 extern tree current_instantiation               (void);
4405 extern tree maybe_get_template_decl_from_type_decl (tree);
4406 extern int processing_template_parmlist;
4407 extern bool dependent_type_p                    (tree);
4408 extern bool any_dependent_template_arguments_p  (tree);
4409 extern bool dependent_template_p                (tree);
4410 extern bool dependent_template_id_p             (tree, tree);
4411 extern bool type_dependent_expression_p         (tree);
4412 extern bool any_type_dependent_arguments_p      (tree);
4413 extern bool value_dependent_expression_p        (tree);
4414 extern tree resolve_typename_type               (tree, bool);
4415 extern tree template_for_substitution           (tree);
4416 extern tree build_non_dependent_expr            (tree);
4417 extern tree build_non_dependent_args            (tree);
4418 extern bool reregister_specialization           (tree, tree, tree);
4419 extern tree fold_non_dependent_expr             (tree);
4420 extern bool explicit_class_specialization_p     (tree);
4421
4422 /* in repo.c */
4423 extern void init_repo                           (void);
4424 extern int repo_emit_p                          (tree);
4425 extern bool repo_export_class_p                 (tree);
4426 extern void finish_repo                         (void);
4427
4428 /* in rtti.c */
4429 /* A vector of all tinfo decls that haven't been emitted yet.  */
4430 extern GTY(()) VEC(tree,gc) *unemitted_tinfo_decls;
4431
4432 extern void init_rtti_processing                (void);
4433 extern tree build_typeid                        (tree);
4434 extern tree get_tinfo_decl                      (tree);
4435 extern tree get_typeid                          (tree);
4436 extern tree build_dynamic_cast                  (tree, tree);
4437 extern void emit_support_tinfos                 (void);
4438 extern bool emit_tinfo_decl                     (tree);
4439
4440 /* in search.c */
4441 extern bool accessible_base_p                   (tree, tree, bool);
4442 extern tree lookup_base                         (tree, tree, base_access,
4443                                                  base_kind *);
4444 extern tree dcast_base_hint                     (tree, tree);
4445 extern int accessible_p                         (tree, tree, bool);
4446 extern tree lookup_field_1                      (tree, tree, bool);
4447 extern tree lookup_field                        (tree, tree, int, bool);
4448 extern int lookup_fnfields_1                    (tree, tree);
4449 extern int class_method_index_for_fn            (tree, tree);
4450 extern tree lookup_fnfields                     (tree, tree, int);
4451 extern tree lookup_member                       (tree, tree, int, bool);
4452 extern int look_for_overrides                   (tree, tree);
4453 extern void get_pure_virtuals                   (tree);
4454 extern void maybe_suppress_debug_info           (tree);
4455 extern void note_debug_info_needed              (tree);
4456 extern void print_search_statistics             (void);
4457 extern void reinit_search_statistics            (void);
4458 extern tree current_scope                       (void);
4459 extern int at_function_scope_p                  (void);
4460 extern bool at_class_scope_p                    (void);
4461 extern bool at_namespace_scope_p                (void);
4462 extern tree context_for_name_lookup             (tree);
4463 extern tree lookup_conversions                  (tree);
4464 extern tree binfo_from_vbase                    (tree);
4465 extern tree binfo_for_vbase                     (tree, tree);
4466 extern tree look_for_overrides_here             (tree, tree);
4467 #define dfs_skip_bases ((tree)1)
4468 extern tree dfs_walk_all (tree, tree (*) (tree, void *),
4469                           tree (*) (tree, void *), void *);
4470 extern tree dfs_walk_once (tree, tree (*) (tree, void *),
4471                            tree (*) (tree, void *), void *);
4472 extern tree binfo_via_virtual                   (tree, tree);
4473 extern tree build_baselink                      (tree, tree, tree, tree);
4474 extern tree adjust_result_of_qualified_name_lookup
4475                                                 (tree, tree, tree);
4476 extern tree copied_binfo                        (tree, tree);
4477 extern tree original_binfo                      (tree, tree);
4478 extern int shared_member_p                      (tree);
4479
4480
4481 /* The representation of a deferred access check.  */
4482
4483 typedef struct deferred_access_check GTY(())
4484 {
4485   /* The base class in which the declaration is referenced. */
4486   tree binfo;
4487   /* The declaration whose access must be checked.  */
4488   tree decl;
4489   /* The declaration that should be used in the error message.  */
4490   tree diag_decl;
4491 } deferred_access_check;
4492 DEF_VEC_O(deferred_access_check);
4493 DEF_VEC_ALLOC_O(deferred_access_check,gc);
4494
4495 /* in semantics.c */
4496 extern void push_deferring_access_checks        (deferring_kind);
4497 extern void resume_deferring_access_checks      (void);
4498 extern void stop_deferring_access_checks        (void);
4499 extern void pop_deferring_access_checks         (void);
4500 extern VEC (deferred_access_check,gc)* get_deferred_access_checks               (void);
4501 extern void pop_to_parent_deferring_access_checks (void);
4502 extern void perform_access_checks               (VEC (deferred_access_check,gc)*);
4503 extern void perform_deferred_access_checks      (void);
4504 extern void perform_or_defer_access_check       (tree, tree, tree);
4505 extern int stmts_are_full_exprs_p               (void);
4506 extern void init_cp_semantics                   (void);
4507 extern tree do_poplevel                         (tree);
4508 extern void add_decl_expr                       (tree);
4509 extern tree finish_expr_stmt                    (tree);
4510 extern tree begin_if_stmt                       (void);
4511 extern void finish_if_stmt_cond                 (tree, tree);
4512 extern tree finish_then_clause                  (tree);
4513 extern void begin_else_clause                   (tree);
4514 extern void finish_else_clause                  (tree);
4515 extern void finish_if_stmt                      (tree);
4516 extern tree begin_while_stmt                    (void);
4517 extern void finish_while_stmt_cond              (tree, tree);
4518 extern void finish_while_stmt                   (tree);
4519 extern tree begin_do_stmt                       (void);
4520 extern void finish_do_body                      (tree);
4521 extern void finish_do_stmt                      (tree, tree);
4522 extern tree finish_return_stmt                  (tree);
4523 extern tree begin_for_stmt                      (void);
4524 extern void finish_for_init_stmt                (tree);
4525 extern void finish_for_cond                     (tree, tree);
4526 extern void finish_for_expr                     (tree, tree);
4527 extern void finish_for_stmt                     (tree);
4528 extern tree finish_break_stmt                   (void);
4529 extern tree finish_continue_stmt                (void);
4530 extern tree begin_switch_stmt                   (void);
4531 extern void finish_switch_cond                  (tree, tree);
4532 extern void finish_switch_stmt                  (tree);
4533 extern tree finish_case_label                   (tree, tree);
4534 extern tree finish_goto_stmt                    (tree);
4535 extern tree begin_try_block                     (void);
4536 extern void finish_try_block                    (tree);
4537 extern tree begin_eh_spec_block                 (void);
4538 extern void finish_eh_spec_block                (tree, tree);
4539 extern void finish_handler_sequence             (tree);
4540 extern tree begin_function_try_block            (tree *);
4541 extern void finish_function_try_block           (tree);
4542 extern void finish_function_handler_sequence    (tree, tree);
4543 extern void finish_cleanup_try_block            (tree);
4544 extern tree begin_handler                       (void);
4545 extern void finish_handler_parms                (tree, tree);
4546 extern void finish_handler                      (tree);
4547 extern void finish_cleanup                      (tree, tree);
4548
4549 enum {
4550   BCS_NO_SCOPE = 1,
4551   BCS_TRY_BLOCK = 2,
4552   BCS_FN_BODY = 4
4553 };
4554 extern tree begin_compound_stmt                 (unsigned int);
4555
4556 extern void finish_compound_stmt                (tree);
4557 extern tree finish_asm_stmt                     (int, tree, tree, tree, tree);
4558 extern tree finish_label_stmt                   (tree);
4559 extern void finish_label_decl                   (tree);
4560 extern tree finish_parenthesized_expr           (tree);
4561 extern tree finish_non_static_data_member       (tree, tree, tree);
4562 extern tree begin_stmt_expr                     (void);
4563 extern tree finish_stmt_expr_expr               (tree, tree);
4564 extern tree finish_stmt_expr                    (tree, bool);
4565 extern tree perform_koenig_lookup               (tree, tree);
4566 extern tree finish_call_expr                    (tree, tree, bool, bool);
4567 extern tree finish_increment_expr               (tree, enum tree_code);
4568 extern tree finish_this_expr                    (void);
4569 extern tree finish_pseudo_destructor_expr       (tree, tree, tree);
4570 extern tree finish_unary_op_expr                (enum tree_code, tree);
4571 extern tree finish_compound_literal             (tree, VEC(constructor_elt,gc) *);
4572 extern tree finish_fname                        (tree);
4573 extern void finish_translation_unit             (void);
4574 extern tree finish_template_type_parm           (tree, tree);
4575 extern tree finish_template_template_parm       (tree, tree);
4576 extern tree begin_class_definition              (tree, tree);
4577 extern void finish_template_decl                (tree);
4578 extern tree finish_template_type                (tree, tree, int);
4579 extern tree finish_base_specifier               (tree, tree, bool);
4580 extern void finish_member_declaration           (tree);
4581 extern void qualified_name_lookup_error         (tree, tree, tree);
4582 extern void check_template_keyword              (tree);
4583 extern tree finish_id_expression                (tree, tree, tree,
4584                                                  cp_id_kind *,
4585                                                  bool, bool, bool *,
4586                                                  bool, bool, bool, bool,
4587                                                  const char **);
4588 extern tree finish_typeof                       (tree);
4589 extern tree finish_offsetof                     (tree);
4590 extern void finish_decl_cleanup                 (tree, tree);
4591 extern void finish_eh_cleanup                   (tree);
4592 extern void expand_body                         (tree);
4593 extern void finish_mem_initializers             (tree);
4594 extern tree check_template_template_default_arg (tree);
4595 extern void expand_or_defer_fn                  (tree);
4596 extern void check_accessibility_of_qualified_id (tree, tree, tree);
4597 extern tree finish_qualified_id_expr            (tree, tree, bool, bool,
4598                                                  bool, bool);
4599 extern void simplify_aggr_init_expr             (tree *);
4600 extern void finalize_nrv                        (tree *, tree, tree);
4601 extern void note_decl_for_pch                   (tree);
4602 extern tree finish_omp_clauses                  (tree);
4603 extern void finish_omp_threadprivate            (tree);
4604 extern tree begin_omp_structured_block          (void);
4605 extern tree finish_omp_structured_block         (tree);
4606 extern tree begin_omp_parallel                  (void);
4607 extern tree finish_omp_parallel                 (tree, tree);
4608 extern tree finish_omp_for                      (location_t, tree, tree,
4609                                                  tree, tree, tree, tree);
4610 extern void finish_omp_atomic                   (enum tree_code, tree, tree);
4611 extern void finish_omp_barrier                  (void);
4612 extern void finish_omp_flush                    (void);
4613 extern enum omp_clause_default_kind cxx_omp_predetermined_sharing (tree);
4614 extern tree cxx_omp_clause_default_ctor         (tree, tree);
4615 extern tree cxx_omp_clause_copy_ctor            (tree, tree, tree);
4616 extern tree cxx_omp_clause_assign_op            (tree, tree, tree);
4617 extern tree cxx_omp_clause_dtor                 (tree, tree);
4618 extern bool cxx_omp_privatize_by_reference      (tree);
4619 extern tree baselink_for_fns                    (tree);
4620 extern void finish_static_assert                (tree, tree, location_t,
4621                                                  bool);
4622 extern tree finish_trait_expr                   (enum cp_trait_kind, tree, tree);
4623
4624 /* in tree.c */
4625 extern void lang_check_failed                   (const char *, int,
4626                                                  const char *) ATTRIBUTE_NORETURN;
4627 extern tree stabilize_expr                      (tree, tree *);
4628 extern void stabilize_call                      (tree, tree *);
4629 extern void stabilize_aggr_init                 (tree, tree *);
4630 extern bool stabilize_init                      (tree, tree *);
4631 extern tree add_stmt_to_compound                (tree, tree);
4632 extern tree cxx_maybe_build_cleanup             (tree);
4633 extern void init_tree                           (void);
4634 extern int pod_type_p                           (tree);
4635 extern int zero_init_p                          (tree);
4636 extern tree canonical_type_variant              (tree);
4637 extern tree copy_binfo                          (tree, tree, tree,
4638                                                  tree *, int);
4639 extern int member_p                             (tree);
4640 extern cp_lvalue_kind real_lvalue_p             (tree);
4641 extern bool builtin_valid_in_constant_expr_p    (tree);
4642 extern tree build_min                           (enum tree_code, tree, ...);
4643 extern tree build_min_nt                        (enum tree_code, ...);
4644 extern tree build_min_non_dep                   (enum tree_code, tree, ...);
4645 extern tree build_min_non_dep_call_list         (tree, tree, tree);
4646 extern tree build_cplus_new                     (tree, tree);
4647 extern tree get_target_expr                     (tree);
4648 extern tree build_cplus_array_type              (tree, tree);
4649 extern tree hash_tree_cons                      (tree, tree, tree);
4650 extern tree hash_tree_chain                     (tree, tree);
4651 extern tree build_qualified_name                (tree, tree, tree, bool);
4652 extern int is_overloaded_fn                     (tree);
4653 extern tree get_first_fn                        (tree);
4654 extern tree ovl_cons                            (tree, tree);
4655 extern tree build_overload                      (tree, tree);
4656 extern const char *cxx_printable_name           (tree, int);
4657 extern tree build_exception_variant             (tree, tree);
4658 extern tree bind_template_template_parm         (tree, tree);
4659 extern tree array_type_nelts_total              (tree);
4660 extern tree array_type_nelts_top                (tree);
4661 extern tree break_out_target_exprs              (tree);
4662 extern tree get_type_decl                       (tree);
4663 extern tree decl_namespace_context              (tree);
4664 extern bool decl_anon_ns_mem_p                  (tree);
4665 extern tree lvalue_type                         (tree);
4666 extern tree error_type                          (tree);
4667 extern int varargs_function_p                   (tree);
4668 extern bool really_overloaded_fn                (tree);
4669 extern bool cp_tree_equal                       (tree, tree);
4670 extern tree no_linkage_check                    (tree, bool);
4671 extern void debug_binfo                         (tree);
4672 extern tree build_dummy_object                  (tree);
4673 extern tree maybe_dummy_object                  (tree, tree *);
4674 extern int is_dummy_object                      (tree);
4675 extern const struct attribute_spec cxx_attribute_table[];
4676 extern tree make_ptrmem_cst                     (tree, tree);
4677 extern tree cp_build_type_attribute_variant     (tree, tree);
4678 extern tree cp_build_qualified_type_real        (tree, int, tsubst_flags_t);
4679 #define cp_build_qualified_type(TYPE, QUALS) \
4680   cp_build_qualified_type_real ((TYPE), (QUALS), tf_warning_or_error)
4681 extern special_function_kind special_function_p (tree);
4682 extern int count_trees                          (tree);
4683 extern int char_type_p                          (tree);
4684 extern void verify_stmt_tree                    (tree);
4685 extern linkage_kind decl_linkage                (tree);
4686 extern tree cp_walk_subtrees (tree*, int*, walk_tree_fn,
4687                               void*, struct pointer_set_t*);
4688 extern int cp_cannot_inline_tree_fn             (tree*);
4689 extern int cp_auto_var_in_fn_p                  (tree,tree);
4690 extern tree fold_if_not_in_template             (tree);
4691 extern tree rvalue                              (tree);
4692 extern tree convert_bitfield_to_declared_type   (tree);
4693 extern tree cp_save_expr                        (tree);
4694 extern bool cast_valid_in_integral_constant_expression_p (tree);
4695
4696 /* in typeck.c */
4697 extern int string_conv_p                        (tree, tree, int);
4698 extern tree cp_truthvalue_conversion            (tree);
4699 extern tree condition_conversion                (tree);
4700 extern tree require_complete_type               (tree);
4701 extern tree complete_type                       (tree);
4702 extern tree complete_type_or_else               (tree, tree);
4703 extern int type_unknown_p                       (tree);
4704 extern bool comp_except_specs                   (tree, tree, bool);
4705 extern bool comptypes                           (tree, tree, int);
4706 extern bool compparms                           (tree, tree);
4707 extern int comp_cv_qualification                (tree, tree);
4708 extern int comp_cv_qual_signature               (tree, tree);
4709 extern tree cxx_sizeof_or_alignof_expr          (tree, enum tree_code);
4710 extern tree cxx_sizeof_or_alignof_type          (tree, enum tree_code, bool);
4711 #define cxx_sizeof_nowarn(T) cxx_sizeof_or_alignof_type (T, SIZEOF_EXPR, false)
4712 extern tree inline_conversion                   (tree);
4713 extern tree is_bitfield_expr_with_lowered_type  (tree);
4714 extern tree unlowered_expr_type                 (tree);
4715 extern tree decay_conversion                    (tree);
4716 extern tree build_class_member_access_expr      (tree, tree, tree, bool);
4717 extern tree finish_class_member_access_expr     (tree, tree, bool);
4718 extern tree build_x_indirect_ref                (tree, const char *);
4719 extern tree build_indirect_ref                  (tree, const char *);
4720 extern tree build_array_ref                     (tree, tree);
4721 extern tree get_member_function_from_ptrfunc    (tree *, tree);
4722 extern tree build_x_binary_op                   (enum tree_code, tree,
4723                                                  enum tree_code, tree,
4724                                                  enum tree_code, bool *);
4725 extern tree build_x_unary_op                    (enum tree_code, tree);
4726 extern tree unary_complex_lvalue                (enum tree_code, tree);
4727 extern tree build_x_conditional_expr            (tree, tree, tree);
4728 extern tree build_x_compound_expr_from_list     (tree, const char *);
4729 extern tree build_x_compound_expr               (tree, tree);
4730 extern tree build_compound_expr                 (tree, tree);
4731 extern tree build_static_cast                   (tree, tree);
4732 extern tree build_reinterpret_cast              (tree, tree);
4733 extern tree build_const_cast                    (tree, tree);
4734 extern tree build_c_cast                        (tree, tree);
4735 extern tree build_x_modify_expr                 (tree, enum tree_code, tree);
4736 extern tree build_modify_expr                   (tree, enum tree_code, tree);
4737 extern tree convert_for_initialization          (tree, tree, tree, int,
4738                                                  const char *, tree, int);
4739 extern int comp_ptr_ttypes                      (tree, tree);
4740 extern bool comp_ptr_ttypes_const               (tree, tree);
4741 extern int ptr_reasonably_similar               (tree, tree);
4742 extern tree build_ptrmemfunc                    (tree, tree, int, bool);
4743 extern int cp_type_quals                        (tree);
4744 extern bool cp_type_readonly                    (tree);
4745 extern bool cp_has_mutable_p                    (tree);
4746 extern bool at_least_as_qualified_p             (tree, tree);
4747 extern void cp_apply_type_quals_to_decl         (int, tree);
4748 extern tree build_ptrmemfunc1                   (tree, tree, tree);
4749 extern void expand_ptrmemfunc_cst               (tree, tree *, tree *);
4750 extern tree type_after_usual_arithmetic_conversions (tree, tree);
4751 extern tree composite_pointer_type              (tree, tree, tree, tree,
4752                                                  const char*);
4753 extern tree merge_types                         (tree, tree);
4754 extern tree check_return_expr                   (tree, bool *);
4755 #define cp_build_binary_op(code, arg1, arg2) \
4756   build_binary_op(code, arg1, arg2, 1)
4757 #define cxx_sizeof(T)  cxx_sizeof_or_alignof_type (T, SIZEOF_EXPR, true)
4758 extern tree build_ptrmemfunc_access_expr        (tree, tree);
4759 extern tree build_address                       (tree);
4760 extern tree build_nop                           (tree, tree);
4761 extern tree non_reference                       (tree);
4762 extern tree lookup_anon_field                   (tree, tree);
4763 extern bool invalid_nonstatic_memfn_p           (tree);
4764 extern tree convert_member_func_to_ptr          (tree, tree);
4765 extern tree convert_ptrmem                      (tree, tree, bool, bool);
4766 extern int lvalue_or_else                       (tree, enum lvalue_use);
4767 extern int lvalue_p                             (tree);
4768
4769 /* in typeck2.c */
4770 extern void require_complete_eh_spec_types      (tree, tree);
4771 extern void cxx_incomplete_type_diagnostic      (tree, tree, int);
4772 #undef cxx_incomplete_type_error
4773 extern void cxx_incomplete_type_error           (tree, tree);
4774 #define cxx_incomplete_type_error(V,T) \
4775   (cxx_incomplete_type_diagnostic ((V), (T), 0))
4776 extern tree error_not_base_type                 (tree, tree);
4777 extern tree binfo_or_else                       (tree, tree);
4778 extern void readonly_error                      (tree, const char *);
4779 extern void complete_type_check_abstract        (tree);
4780 extern int abstract_virtuals_error              (tree, tree);
4781
4782 extern tree store_init_value                    (tree, tree);
4783 extern tree digest_init                         (tree, tree);
4784 extern tree build_scoped_ref                    (tree, tree, tree *);
4785 extern tree build_x_arrow                       (tree);
4786 extern tree build_m_component_ref               (tree, tree);
4787 extern tree build_functional_cast               (tree, tree);
4788 extern tree add_exception_specifier             (tree, tree, int);
4789 extern tree merge_exception_specifiers          (tree, tree);
4790
4791 /* in mangle.c */
4792 extern void init_mangle                         (void);
4793 extern void mangle_decl                         (tree);
4794 extern const char *mangle_type_string           (tree);
4795 extern tree mangle_typeinfo_for_type            (tree);
4796 extern tree mangle_typeinfo_string_for_type     (tree);
4797 extern tree mangle_vtbl_for_type                (tree);
4798 extern tree mangle_vtt_for_type                 (tree);
4799 extern tree mangle_ctor_vtbl_for_type           (tree, tree);
4800 extern tree mangle_thunk                        (tree, int, tree, tree);
4801 extern tree mangle_conv_op_name_for_type        (tree);
4802 extern tree mangle_guard_variable               (tree);
4803 extern tree mangle_ref_init_variable            (tree);
4804
4805 /* in dump.c */
4806 extern bool cp_dump_tree                        (void *, tree);
4807
4808 /* In cp/cp-objcp-common.c.  */
4809
4810 extern HOST_WIDE_INT cxx_get_alias_set          (tree);
4811 extern bool cxx_warn_unused_global_decl         (tree);
4812 extern tree cp_expr_size                        (tree);
4813 extern size_t cp_tree_size                      (enum tree_code);
4814 extern bool cp_var_mod_type_p                   (tree, tree);
4815 extern void cxx_initialize_diagnostics          (struct diagnostic_context *);
4816 extern int cxx_types_compatible_p               (tree, tree);
4817 extern void init_shadowed_var_for_decl          (void);
4818 extern tree cxx_staticp                         (tree);
4819
4820 /* in cp-gimplify.c */
4821 extern int cp_gimplify_expr                     (tree *, tree *, tree *);
4822 extern void cp_genericize                       (tree);
4823
4824 /* -- end of C++ */
4825
4826 /* In order for the format checking to accept the C++ front end
4827    diagnostic framework extensions, you must include this file before
4828    toplev.h, not after.  We override the definition of GCC_DIAG_STYLE
4829    in c-common.h.  */
4830 #undef GCC_DIAG_STYLE
4831 #define GCC_DIAG_STYLE __gcc_cxxdiag__
4832 #if GCC_VERSION >= 4001
4833 #define ATTRIBUTE_GCC_CXXDIAG(m, n) __attribute__ ((__format__ (GCC_DIAG_STYLE, m, n))) ATTRIBUTE_NONNULL(m)
4834 #else
4835 #define ATTRIBUTE_GCC_CXXDIAG(m, n) ATTRIBUTE_NONNULL(m)
4836 #endif
4837 extern void cp_cpp_error                        (cpp_reader *, int,
4838                                                  const char *, va_list *)
4839      ATTRIBUTE_GCC_CXXDIAG(3,0);
4840
4841 #endif /* ! GCC_CP_TREE_H */