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