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