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