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