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