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