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