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