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