]> gcc.gnu.org Git - gcc.git/blame - gcc/cp/cp-tree.h
crash44.C: Remove XFAIL.
[gcc.git] / gcc / cp / cp-tree.h
CommitLineData
8d08fdba 1/* Definitions for C++ parsing and type checking.
06ceef4e
RK
2 Copyright (C) 1987, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000
3 Free Software Foundation, Inc.
4 Contributed by Michael Tiemann (tiemann@cygnus.com)
8d08fdba
MS
5
6This file is part of GNU CC.
7
8GNU CC is free software; you can redistribute it and/or modify
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
13GNU CC is distributed in the hope that it will be useful,
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
19along with GNU CC; see the file COPYING. If not, write to
e9fa0c7c
RK
20the Free Software Foundation, 59 Temple Place - Suite 330,
21Boston, MA 02111-1307, USA. */
8d08fdba 22
99dccabc 23#include "function.h"
46e8c075 24#include "splay-tree.h"
9cd64686 25#include "varray.h"
7f4edbcb 26
8d08fdba
MS
27#ifndef _CP_TREE_H
28#define _CP_TREE_H
29
d7e7759d
BC
30#include "c-common.h"
31
cfdd0551 32/* Usage of TREE_LANG_FLAG_?:
280f9385 33 0: BINFO_MARKED (BINFO nodes).
cfdd0551
PB
34 NEW_EXPR_USE_GLOBAL (in NEW_EXPR).
35 DELETE_EXPR_USE_GLOBAL (in DELETE_EXPR).
36 LOOKUP_EXPR_GLOBAL (in LOOKUP_EXPR).
b26caacd 37 TREE_INDIRECT_USING (in NAMESPACE_DECL).
f181d4ae 38 LOCAL_BINDING_P (in CPLUS_BINDING)
27b8d0cd 39 ICS_USER_FLAG (in _CONV)
f1dedc31 40 CLEANUP_P (in TRY_BLOCK)
e1376b00 41 AGGR_INIT_VIA_CTOR_P (in AGGR_INIT_EXPR)
46e8c075 42 CTOR_BEGIN_P (in CTOR_STMT)
31f8e4f3 43 BV_USE_VCALL_INDEX_P (in the BINFO_VIRTUALS TREE_LIST)
4bb0968f 44 1: IDENTIFIER_VIRTUAL_P.
cfdd0551 45 TI_PENDING_TEMPLATE_FLAG.
cfdd0551
PB
46 TEMPLATE_PARMS_FOR_INLINE.
47 DELETE_EXPR_USE_VEC (in DELETE_EXPR).
48 (TREE_CALLS_NEW) (in _EXPR or _REF) (commented-out).
4c6b7393 49 TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (in _TYPE).
8f032717 50 INHERITED_VALUE_BINDING_P (in CPLUS_BINDING)
4bb0968f 51 BASELINK_P (in TREE_LIST)
27b8d0cd 52 ICS_ELLIPSIS_FLAG (in _CONV)
db3d8cde 53 BINFO_ACCESS (in BINFO)
31f8e4f3 54 BV_GENERATE_THUNK_WITH_VTABLE_P (in TREE_LIST)
cfdd0551 55 2: IDENTIFIER_OPNAME_P.
4c6b7393 56 TYPE_POLYMORHPIC_P (in _TYPE)
27b8d0cd 57 ICS_THIS_FLAG (in _CONV)
a7e4cfa0 58 BINDING_HAS_LEVEL_P (in CPLUS_BINDING)
db3d8cde 59 BINFO_OVERRIDE_ALONG_VIRTUAL_PATH_P (in BINFO)
cfdd0551
PB
60 3: TYPE_USES_VIRTUAL_BASECLASSES (in a class TYPE).
61 BINFO_VTABLE_PATH_MARKED.
0ec57017 62 BINFO_PUSHDECLS_MARKED.
cfdd0551 63 (TREE_REFERENCE_EXPR) (in NON_LVALUE_EXPR) (commented-out).
27b8d0cd 64 ICS_BAD_FLAG (in _CONV)
62409b39 65 FN_TRY_BLOCK_P (in TRY_BLOCK)
298d6f60 66 IDENTIFIER_CTOR_OR_DTOR_P (in IDENTIFIER_NODE)
cfdd0551
PB
67 4: BINFO_NEW_VTABLE_MARKED.
68 TREE_HAS_CONSTRUCTOR (in INDIRECT_REF, SAVE_EXPR, CONSTRUCTOR,
69 or FIELD_DECL).
27b8d0cd 70 NEED_TEMPORARY_P (in REF_BIND, BASE_CONV)
421844e7 71 IDENTIFIER_TYPENAME_P (in IDENTIFIER_NODE)
911a71a7
MM
72 5: Unused.
73 6: BINFO_ACCESS (in BINFO)
cfdd0551
PB
74
75 Usage of TYPE_LANG_FLAG_?:
76 0: C_TYPE_FIELDS_READONLY (in RECORD_TYPE or UNION_TYPE).
77 1: TYPE_HAS_CONSTRUCTOR.
78 2: TYPE_HAS_DESTRUCTOR.
ea419909 79 3: TYPE_FOR_JAVA.
834c6dff 80 4: TYPE_HAS_NONTRIVIAL_DESTRUCTOR
cfdd0551 81 5: IS_AGGR_TYPE.
ea419909 82 6: TYPE_BUILT_IN.
cfdd0551
PB
83
84 Usage of DECL_LANG_FLAG_?:
85 0: DECL_ERROR_REPORTED (in VAR_DECL).
50714e79 86 DECL_TEMPLATE_PARM_P (in CONST_DECL, TYPE_DECL, or TEMPLATE_DECL)
cd9f6678 87 DECL_LOCAL_FUNCTION_P (in FUNCTION_DECL)
721c3b42 88 DECL_MUTABLE_P (in FIELD_DECL)
cfdd0551 89 1: C_TYPEDEF_EXPLICITLY_SIGNED (in TYPE_DECL).
fbf1c34b 90 DECL_TEMPLATE_INSTANTIATED (in a VAR_DECL or a FUNCTION_DECL)
721c3b42 91 DECL_C_BITFIELD (in FIELD_DECL)
cfdd0551 92 2: DECL_THIS_EXTERN (in VAR_DECL or FUNCTION_DECL).
9188c363 93 DECL_IMPLICIT_TYPEDEF_P (in a TYPE_DECL)
cfdd0551
PB
94 3: DECL_IN_AGGR_P.
95 4: DECL_MAYBE_TEMPLATE.
96 5: DECL_INTERFACE_KNOWN.
97 6: DECL_THIS_STATIC (in VAR_DECL or FUNCTION_DECL).
98 7: DECL_DEAD_FOR_LOCAL (in VAR_DECL).
cc057ef3 99 DECL_THUNK_P (in a member FUNCTION_DECL)
7ddedda4
MM
100
101 Usage of language-independent fields in a language-dependent manner:
911a71a7
MM
102
103 TREE_USED
104 This field is BINFO_INDIRECT_PRIMARY_P in a BINFO.
105
7ddedda4
MM
106 TYPE_ALIAS_SET
107 This field is used by TYPENAME_TYPEs, TEMPLATE_TYPE_PARMs, and so
108 forth as a substitute for the mark bits provided in `lang_type'.
109 At present, only the six low-order bits are used.
110
111 TYPE_BINFO
112 For an ENUMERAL_TYPE, this is ENUM_TEMPLATE_INFO.
113 For a TYPENAME_TYPE, this is TYPENAME_TYPE_FULLNAME.
114 For a TEMPLATE_TEMPLATE_PARM, this is
115 TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO.
0aafb128 116
9df2c88c 117 BINFO_VIRTUALS
5e19c053 118 For a binfo, this is a TREE_LIST. The BV_DELTA of each node
83f2ccf4 119 gives the amount by which to adjust the `this' pointer when
174eceea
MM
120 calling the function. If the method is an overriden version of a
121 base class method, then it is assumed that, prior to adjustment,
122 the this pointer points to an object of the base class.
123
5e19c053 124 The BV_VCALL_INDEX of each node, if non-NULL, gives the vtable
31f8e4f3
MM
125 index of the vcall offset for this entry. If
126 BV_USE_VCALL_INDEX_P then the corresponding vtable entry should
127 use a virtual thunk, as opposed to an ordinary thunk.
c0bbf652 128
5e19c053 129 The BV_FN is the declaration for the virtual function itself.
c0bbf652 130 When CLASSTYPE_COM_INTERFACE_P does not hold, the first entry
5e19c053
MM
131 does not have a BV_FN; it is just an offset.
132
133 The BV_OVERRIDING_BASE is the binfo for the final overrider for
134 this function. (This binfo's BINFO_TYPE will always be the same
135 as the DECL_CLASS_CONTEXT for the function.)
0fa5e05c 136
c35cce41
MM
137 BINFO_VTABLE
138 Sometimes this is a VAR_DECL. Under the new ABI, it is instead
139 an expression with POINTER_TYPE pointing that gives the value
140 to which the vptr should be initialized. Use get_vtbl_decl_for_binfo
141 to extract the VAR_DECL for the complete vtable; that macro works
142 in both ABIs.
143
0fa5e05c 144 DECL_ARGUMENTS
051e6fd7
MM
145 For a VAR_DECL this is DECL_ANON_UNION_ELEMS.
146
147 DECL_VINDEX
148 This field is NULL for a non-virtual function. For a virtual
149 function, it is eventually set to an INTEGER_CST indicating the
150 index in the vtable at which this function can be found. When
151 a virtual function is declared, but before it is known what
152 function is overriden, this field is the error_mark_node.
153
154 Temporarily, it may be set to a TREE_LIST whose TREE_VALUE is
155 the virtual function this one overrides, and whose TREE_CHAIN is
156 the old DECL_VINDEX. */
cfdd0551 157
da8a66fc
ML
158/* Language-specific tree checkers. */
159
f4524c9e 160#if defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 2007)
da8a66fc
ML
161
162#define VAR_OR_FUNCTION_DECL_CHECK(NODE) \
163({ const tree __t = NODE; \
164 enum tree_code __c = TREE_CODE(__t); \
165 if (__c != VAR_DECL && __c != FUNCTION_DECL) \
1b493b81
ZW
166 tree_check_failed (__t, VAR_DECL, __FILE__, __LINE__, \
167 __FUNCTION__); \
da8a66fc
ML
168 __t; })
169
07c88314
MM
170#define VAR_FUNCTION_OR_PARM_DECL_CHECK(NODE) \
171({ const tree __t = NODE; \
172 enum tree_code __c = TREE_CODE(__t); \
173 if (__c != VAR_DECL \
174 && __c != FUNCTION_DECL \
175 && __c != PARM_DECL) \
1b493b81
ZW
176 tree_check_failed (__t, VAR_DECL, __FILE__, __LINE__, \
177 __FUNCTION__); \
07c88314
MM
178 __t; })
179
7c355bca
ML
180#define VAR_TEMPL_TYPE_OR_FUNCTION_DECL_CHECK(NODE) \
181({ const tree __t = NODE; \
182 enum tree_code __c = TREE_CODE(__t); \
183 if (__c != VAR_DECL \
184 && __c != FUNCTION_DECL \
185 && __c != TYPE_DECL \
186 && __c != TEMPLATE_DECL) \
1b493b81
ZW
187 tree_check_failed (__t, VAR_DECL, __FILE__, __LINE__, \
188 __FUNCTION__); \
7c355bca
ML
189 __t; })
190
da8a66fc
ML
191#define RECORD_OR_UNION_TYPE_CHECK(NODE) \
192({ const tree __t = NODE; \
193 enum tree_code __c = TREE_CODE(__t); \
194 if (__c != RECORD_TYPE && __c != UNION_TYPE) \
1b493b81
ZW
195 tree_check_failed (__t, RECORD_TYPE, __FILE__, __LINE__, \
196 __FUNCTION__); \
da8a66fc
ML
197 __t; })
198
f4524c9e 199#else /* not ENABLE_TREE_CHECKING, or not gcc */
da8a66fc
ML
200
201#define VAR_OR_FUNCTION_DECL_CHECK(NODE) NODE
07c88314 202#define VAR_FUNCTION_OR_PARM_DECL_CHECK(NODE) NODE
7c355bca 203#define VAR_TEMPL_TYPE_OR_FUNCTION_DECL_CHECK(NODE) NODE
da8a66fc
ML
204#define RECORD_OR_UNION_TYPE_CHECK(NODE) NODE
205
206#endif
d7e7759d 207
bbd15aac
MM
208\f
209/* ABI control. */
210
211/* Nonzero to enable experimental ABI changes. */
212
213extern int flag_new_abi;
214
215/* Nonzero to use __cxa_atexit, rather than atexit, to register
216 destructors for local statics and global objects. */
217
218extern int flag_use_cxa_atexit;
219
220/* Nonzero to not ignore namespace std. */
da8a66fc 221
bbd15aac
MM
222extern int flag_honor_std;
223
224/* Nonzero means generate 'rtti' that give run-time type information. */
225
226extern int flag_rtti;
227
4e7512c9
MM
228/* Nonzero if we want to support huge (> 2^(sizeof(short)*8-1) bytes)
229 objects. */
230
231extern int flag_huge_objects;
232
bbd15aac
MM
233/* Nonzero if virtual base class offsets are stored in the virtual
234 function table. Zero if, instead, a pointer to the virtual base is
235 stored in the object itself. */
236#define vbase_offsets_in_vtable_p() (flag_new_abi)
237
1a588ad7
MM
238/* Nonzero if displacements to the `this' pointer to use when calling
239 virtual functions in a virtual base class are present in the
240 vtable. */
241#define vcall_offsets_in_vtable_p() (flag_new_abi)
242
bbd15aac
MM
243/* Nonzero if a derived class that needs a vptr should always get one,
244 even if a non-primary base class already has one. For example,
245 given:
246
247 struct S { int i; virtual void f(); };
248 struct T : virtual public S {};
249
250 one could either reuse the vptr in `S' for `T', or create a new
251 vptr for `T'. If this flag is nonzero we choose the latter
252 alternative; otherwise, we choose the former. */
253#define vptrs_present_everywhere_p() (flag_new_abi)
254
051e6fd7
MM
255/* Nonzero if the vtable for a derived class should contain the
256 virtual functions from the primary base and all virtual functions
257 present in the class itself. Zero if, instead, it should contain
258 only those virtual functions from the primary base together with
259 the functions declared in the derived class (but not in any base
260 class). */
261#define all_overridden_vfuns_in_vtables_p() (flag_new_abi)
262
7267d692
NS
263/* Nonzero if we use access type_info objects directly, and use the
264 cross-vendor layout for them. Zero if we use an accessor function
265 to get the type_info object address. */
808c61c8 266#define new_abi_rtti_p() (flag_new_abi)
7267d692 267
8d7a5379
MM
268/* Nonzero if primary and secondary vtables are combined into a single
269 vtable. */
270#define merge_primary_and_secondary_vtables_p() (flag_new_abi)
271
bbd15aac 272\f
8d08fdba
MS
273/* Language-dependent contents of an identifier. */
274
275struct lang_identifier
276{
277 struct tree_identifier ignore;
f181d4ae
MM
278 tree namespace_bindings;
279 tree bindings;
8d08fdba
MS
280 tree class_value;
281 tree class_template_info;
282 struct lang_id2 *x;
283};
284
da8a66fc
ML
285#define LANG_IDENTIFIER_CAST(NODE) \
286 ((struct lang_identifier*)IDENTIFIER_NODE_CHECK (NODE))
287
8d08fdba
MS
288struct lang_id2
289{
290 tree label_value, implicit_decl;
9e0781b5 291 tree error_locus;
8d08fdba
MS
292};
293
46b02c6d
MS
294typedef struct
295{
296 tree t;
297 int new_type_flag;
70adf8a9 298 tree lookups;
46b02c6d
MS
299} flagged_type_tree;
300
f84b4be9
JM
301typedef struct
302{
2bf105ab 303 struct tree_common common;
f84b4be9
JM
304 HOST_WIDE_INT index;
305 HOST_WIDE_INT level;
306 HOST_WIDE_INT orig_level;
307 tree decl;
308} template_parm_index;
309
61a127b3
MM
310typedef struct ptrmem_cst
311{
2bf105ab 312 struct tree_common common;
87e3dbc9
MM
313 /* This isn't used, but the middle-end expects all constants to have
314 this field. */
315 struct rtx_def *rtl;
61a127b3
MM
316 tree member;
317}* ptrmem_cst_t;
318
f181d4ae
MM
319/* Nonzero if this binding is for a local scope, as opposed to a class
320 or namespace scope. */
321#define LOCAL_BINDING_P(NODE) TREE_LANG_FLAG_0(NODE)
322
8f032717
MM
323/* Nonzero if BINDING_VALUE is from a base class of the class which is
324 currently being defined. */
325#define INHERITED_VALUE_BINDING_P(NODE) TREE_LANG_FLAG_1(NODE)
326
f181d4ae
MM
327/* For a binding between a name and an entity at a non-local scope,
328 defines the scope where the binding is declared. (Either a class
329 _TYPE node, or a NAMESPACE_DECL.) This macro should be used only
330 for namespace-level bindings; on the IDENTIFIER_BINDING list
331 BINDING_LEVEL is used instead. */
da8a66fc 332#define BINDING_SCOPE(NODE) (((struct tree_binding*)CPLUS_BINDING_CHECK (NODE))->scope.scope)
f181d4ae 333
87e3dbc9
MM
334/* Nonzero if NODE has BINDING_LEVEL, rather than BINDING_SCOPE. */
335#define BINDING_HAS_LEVEL_P(NODE) TREE_LANG_FLAG_2 ((NODE))
336
2c73f9f5
ML
337/* This is the declaration bound to the name. Possible values:
338 variable, overloaded function, namespace, template, enumerator. */
da8a66fc 339#define BINDING_VALUE(NODE) (((struct tree_binding*)CPLUS_BINDING_CHECK (NODE))->value)
f181d4ae 340
2c73f9f5
ML
341/* If name is bound to a type, this is the type (struct, union, enum). */
342#define BINDING_TYPE(NODE) TREE_TYPE(NODE)
f181d4ae 343
30394414 344#define IDENTIFIER_GLOBAL_VALUE(NODE) \
2c73f9f5
ML
345 namespace_binding (NODE, global_namespace)
346#define SET_IDENTIFIER_GLOBAL_VALUE(NODE, VAL) \
347 set_namespace_binding (NODE, global_namespace, VAL)
30394414 348#define IDENTIFIER_NAMESPACE_VALUE(NODE) \
2c73f9f5
ML
349 namespace_binding (NODE, current_namespace)
350#define SET_IDENTIFIER_NAMESPACE_VALUE(NODE, VAL) \
351 set_namespace_binding (NODE, current_namespace, VAL)
30394414 352
d7e7759d
BC
353#define CLEANUP_P(NODE) TREE_LANG_FLAG_0 (TRY_BLOCK_CHECK (NODE))
354#define CLEANUP_DECL(NODE) TREE_OPERAND (CLEANUP_STMT_CHECK (NODE), 0)
355#define CLEANUP_EXPR(NODE) TREE_OPERAND (CLEANUP_STMT_CHECK (NODE), 1)
356
357/* Returns nonzero iff TYPE1 and TYPE2 are the same type, in the usual
358 sense of `same'. */
359#define same_type_p(type1, type2) \
360 comptypes ((type1), (type2), COMPARE_STRICT)
361
362/* Returns nonzero iff TYPE1 and TYPE2 are the same type, ignoring
363 top-level qualifiers. */
364#define same_type_ignoring_top_level_qualifiers_p(type1, type2) \
365 same_type_p (TYPE_MAIN_VARIANT (type1), TYPE_MAIN_VARIANT (type2))
366
367/* Non-zero if we are presently building a statement tree, rather
368 than expanding each statement as we encounter it. */
369#define building_stmt_tree() (last_tree != NULL_TREE)
370
371/* Returns non-zero iff NODE is a declaration for the global function
372 `main'. */
373#define DECL_MAIN_P(NODE) \
374 (DECL_EXTERN_C_FUNCTION_P (NODE) \
375 && DECL_NAME (NODE) != NULL_TREE \
376 && MAIN_NAME_P (DECL_NAME (NODE)))
377
378/* Returns non-zero iff ID_NODE is an IDENTIFIER_NODE whose name is
379 `main'. */
380#define MAIN_NAME_P(ID_NODE) \
381 (strcmp (IDENTIFIER_POINTER (ID_NODE), "main") == 0)
382
383
30394414
JM
384struct tree_binding
385{
2bf105ab 386 struct tree_common common;
c7a932b1
JM
387 union {
388 tree scope;
389 struct binding_level *level;
390 } scope;
30394414
JM
391 tree value;
392};
393
2c73f9f5 394/* The overloaded FUNCTION_DECL. */
da8a66fc 395#define OVL_FUNCTION(NODE) (((struct tree_overload*)OVERLOAD_CHECK (NODE))->function)
2c73f9f5
ML
396#define OVL_CHAIN(NODE) TREE_CHAIN(NODE)
397/* Polymorphic access to FUNCTION and CHAIN. */
398#define OVL_CURRENT(NODE) \
399 ((TREE_CODE(NODE)==OVERLOAD) ? OVL_FUNCTION(NODE) : NODE)
400#define OVL_NEXT(NODE) \
401 ((TREE_CODE(NODE)==OVERLOAD) ? TREE_CHAIN(NODE) : NULL_TREE)
402/* If set, this was imported in a using declaration.
403 This is not to confuse with being used somewhere, which
404 is not important for this node. */
405#define OVL_USED(NODE) TREE_USED(NODE)
406
407struct tree_overload
408{
2bf105ab 409 struct tree_common common;
2c73f9f5
ML
410 tree function;
411};
412
4bb0968f
MM
413/* A `baselink' is a TREE_LIST whose TREE_PURPOSE is a BINFO
414 indicating a particular base class, and whose TREE_VALUE is a
415 (possibly overloaded) function from that base class. */
416#define BASELINK_P(NODE) \
3927874d 417 (TREE_CODE (NODE) == TREE_LIST && TREE_LANG_FLAG_1 (NODE))
4bb0968f 418#define SET_BASELINK_P(NODE) \
3927874d 419 (TREE_LANG_FLAG_1 (NODE) = 1)
4bb0968f 420
da8a66fc
ML
421#define WRAPPER_PTR(NODE) (((struct tree_wrapper*)WRAPPER_CHECK (NODE))->u.ptr)
422#define WRAPPER_INT(NODE) (((struct tree_wrapper*)WRAPPER_CHECK (NODE))->u.i)
5ffe581d
JM
423
424struct tree_wrapper
425{
2bf105ab 426 struct tree_common common;
5ffe581d
JM
427 union {
428 void *ptr;
429 int i;
430 } u;
431};
432
da8a66fc
ML
433#define SRCLOC_FILE(NODE) (((struct tree_srcloc*)SRCLOC_CHECK (NODE))->filename)
434#define SRCLOC_LINE(NODE) (((struct tree_srcloc*)SRCLOC_CHECK (NODE))->linenum)
1139b3d8
JM
435struct tree_srcloc
436{
2bf105ab 437 struct tree_common common;
3b304f5b 438 const char *filename;
1139b3d8
JM
439 int linenum;
440};
441
8d08fdba
MS
442/* Macros for access to language-specific slots in an identifier. */
443
30394414 444#define IDENTIFIER_NAMESPACE_BINDINGS(NODE) \
da8a66fc 445 (LANG_IDENTIFIER_CAST (NODE)->namespace_bindings)
8d08fdba 446#define IDENTIFIER_TEMPLATE(NODE) \
da8a66fc 447 (LANG_IDENTIFIER_CAST (NODE)->class_template_info)
8d08fdba 448
f181d4ae
MM
449/* The IDENTIFIER_BINDING is the innermost CPLUS_BINDING for the
450 identifier. It's TREE_CHAIN is the next outermost binding. Each
451 BINDING_VALUE is a DECL for the associated declaration. Thus,
452 name lookup consists simply of pulling off the node at the front
453 of the list (modulo oddities for looking up the names of types,
454 and such.) You can use BINDING_SCOPE or BINDING_LEVEL to
455 determine the scope that bound the name. */
456#define IDENTIFIER_BINDING(NODE) \
da8a66fc 457 (LANG_IDENTIFIER_CAST (NODE)->bindings)
f181d4ae
MM
458
459/* The IDENTIFIER_VALUE is the value of the IDENTIFIER_BINDING, or
460 NULL_TREE if there is no binding. */
461#define IDENTIFIER_VALUE(NODE) \
462 (IDENTIFIER_BINDING (NODE) \
463 ? BINDING_VALUE (IDENTIFIER_BINDING (NODE)) \
464 : NULL_TREE)
465
8f032717
MM
466/* If IDENTIFIER_CLASS_VALUE is set, then NODE is bound in the current
467 class, and IDENTIFIER_CLASS_VALUE is the value binding. This is
468 just a pointer to the BINDING_VALUE of one of the bindings in the
469 IDENTIFIER_BINDINGs list, so any time that this is non-NULL so is
f181d4ae
MM
470 IDENTIFIER_BINDING. */
471#define IDENTIFIER_CLASS_VALUE(NODE) \
da8a66fc 472 (LANG_IDENTIFIER_CAST (NODE)->class_value)
f181d4ae
MM
473
474/* The amount of time used by the file whose special "time identifier"
475 is NODE, represented as an INTEGER_CST. See get_time_identifier. */
476#define TIME_IDENTIFIER_TIME(NODE) IDENTIFIER_BINDING(NODE)
477
478/* For a "time identifier" this is a INTEGER_CST. The
479 TREE_INT_CST_LOW is 1 if the corresponding file is "interface only".
480 The TRE_INT_CST_HIGH is 1 if it is "interface unknown". */
481#define TIME_IDENTIFIER_FILEINFO(NODE) IDENTIFIER_CLASS_VALUE (NODE)
482
2c73f9f5
ML
483/* TREE_TYPE only indicates on local and class scope the current
484 type. For namespace scope, the presence of a type in any namespace
485 is indicated with global_type_node, and the real type behind must
486 be found through lookup. */
487#define IDENTIFIER_TYPE_VALUE(NODE) (identifier_type_value(NODE))
488#define REAL_IDENTIFIER_TYPE_VALUE(NODE) (TREE_TYPE (NODE))
8d08fdba 489#define SET_IDENTIFIER_TYPE_VALUE(NODE,TYPE) (TREE_TYPE (NODE) = TYPE)
2c73f9f5 490#define IDENTIFIER_HAS_TYPE_VALUE(NODE) (IDENTIFIER_TYPE_VALUE (NODE) ? 1 : 0)
8d08fdba 491
da8a66fc
ML
492#define LANG_ID_FIELD(NAME,NODE) \
493 (LANG_IDENTIFIER_CAST (NODE)->x \
494 ? LANG_IDENTIFIER_CAST (NODE)->x->NAME : 0)
495
496#define SET_LANG_ID(NODE,VALUE,NAME) \
497 (LANG_IDENTIFIER_CAST (NODE)->x == 0 \
498 ? LANG_IDENTIFIER_CAST (NODE)->x \
499 = (struct lang_id2 *)perm_calloc (1, sizeof (struct lang_id2)) : 0, \
500 LANG_IDENTIFIER_CAST (NODE)->x->NAME = (VALUE))
8d08fdba
MS
501
502#define IDENTIFIER_LABEL_VALUE(NODE) LANG_ID_FIELD(label_value, NODE)
503#define SET_IDENTIFIER_LABEL_VALUE(NODE,VALUE) \
504 SET_LANG_ID(NODE, VALUE, label_value)
505
506#define IDENTIFIER_IMPLICIT_DECL(NODE) LANG_ID_FIELD(implicit_decl, NODE)
507#define SET_IDENTIFIER_IMPLICIT_DECL(NODE,VALUE) \
508 SET_LANG_ID(NODE, VALUE, implicit_decl)
509
8d08fdba
MS
510#define IDENTIFIER_ERROR_LOCUS(NODE) LANG_ID_FIELD(error_locus, NODE)
511#define SET_IDENTIFIER_ERROR_LOCUS(NODE,VALUE) \
512 SET_LANG_ID(NODE, VALUE, error_locus)
513
514
515#define IDENTIFIER_VIRTUAL_P(NODE) TREE_LANG_FLAG_1(NODE)
516
f71f87f9
MM
517/* Nonzero if this identifier is the prefix for a mangled C++ operator
518 name. */
8d08fdba
MS
519#define IDENTIFIER_OPNAME_P(NODE) TREE_LANG_FLAG_2(NODE)
520
4c571114
MM
521/* Nonzero if this identifier is the name of a type-conversion
522 operator. */
421844e7
MM
523#define IDENTIFIER_TYPENAME_P(NODE) \
524 (TREE_LANG_FLAG_4 (NODE))
8d08fdba 525
298d6f60
MM
526/* Nonzero if this identifier is the name of a constructor or
527 destructor. */
528#define IDENTIFIER_CTOR_OR_DTOR_P(NODE) \
529 TREE_LANG_FLAG_3 (NODE)
530
cab1f180 531/* Nonzero means reject anything that ISO standard C++ forbids. */
8d08fdba
MS
532extern int pedantic;
533
534/* In a RECORD_TYPE or UNION_TYPE, nonzero if any component is read-only. */
535#define C_TYPE_FIELDS_READONLY(type) TYPE_LANG_FLAG_0 (type)
e1cd6e56
MS
536
537/* Record in each node resulting from a binary operator
538 what operator was specified for it. */
539#define C_EXP_ORIGINAL_CODE(exp) ((enum tree_code) TREE_COMPLEXITY (exp))
540
541/* Store a value in that field. */
542#define C_SET_EXP_ORIGINAL_CODE(exp, code) \
543 (TREE_COMPLEXITY (exp) = (int)(code))
8d08fdba
MS
544\f
545/* If non-zero, a VAR_DECL whose cleanup will cause a throw to the
546 next exception handler. */
547extern tree exception_throw_decl;
548
7f4edbcb
BS
549enum cp_tree_index
550{
e2d0a11c
MM
551 CPTI_JAVA_BYTE_TYPE,
552 CPTI_JAVA_SHORT_TYPE,
553 CPTI_JAVA_INT_TYPE,
554 CPTI_JAVA_LONG_TYPE,
555 CPTI_JAVA_FLOAT_TYPE,
556 CPTI_JAVA_DOUBLE_TYPE,
557 CPTI_JAVA_CHAR_TYPE,
558 CPTI_JAVA_BOOLEAN_TYPE,
559
7f4edbcb
BS
560 CPTI_VOID_ZERO,
561 CPTI_WCHAR_DECL,
562 CPTI_VTABLE_ENTRY_TYPE,
563 CPTI_DELTA_TYPE,
c7e266a6 564 CPTI_VTABLE_INDEX_TYPE,
b3ab27f3 565 CPTI_CLEANUP_TYPE,
3ec6bad3 566 CPTI_VTT_PARM_TYPE,
7f4edbcb 567
db1147b2 568 CPTI_TI_DESC_TYPE,
7f4edbcb 569 CPTI_BLTN_DESC_TYPE,
7f4edbcb 570 CPTI_PTR_DESC_TYPE,
db1147b2 571 CPTI_ARY_DESC_TYPE,
7f4edbcb 572 CPTI_FUNC_DESC_TYPE,
db1147b2
NS
573 CPTI_ENUM_DESC_TYPE,
574 CPTI_CLASS_DESC_TYPE,
575 CPTI_SI_CLASS_DESC_TYPE,
576 CPTI_VMI_CLASS_DESC_TYPE,
387769ed 577 CPTI_PTM_DESC_TYPE,
db1147b2 578 CPTI_BASE_DESC_TYPE,
7f4edbcb 579
7f4edbcb
BS
580 CPTI_CLASS_TYPE,
581 CPTI_RECORD_TYPE,
582 CPTI_UNION_TYPE,
583 CPTI_ENUM_TYPE,
584 CPTI_UNKNOWN_TYPE,
7f4edbcb
BS
585 CPTI_VTBL_TYPE,
586 CPTI_VTBL_PTR_TYPE,
587 CPTI_STD,
2854d3c6 588 CPTI_ABI,
7f4edbcb 589 CPTI_TYPE_INFO_TYPE,
669ec2b4 590 CPTI_TINFO_DECL_ID,
db1147b2 591 CPTI_TINFO_DECL_TYPE,
669ec2b4 592 CPTI_TINFO_VAR_ID,
7f4edbcb
BS
593 CPTI_ABORT_FNDECL,
594 CPTI_GLOBAL_DELETE_FNDECL,
595
9cd64686
MM
596 CPTI_ACCESS_DEFAULT,
597 CPTI_ACCESS_PUBLIC,
598 CPTI_ACCESS_PROTECTED,
599 CPTI_ACCESS_PRIVATE,
600 CPTI_ACCESS_DEFAULT_VIRTUAL,
601 CPTI_ACCESS_PUBLIC_VIRTUAL,
602 CPTI_ACCESS_PROTECTED_VIRTUAL,
603 CPTI_ACCESS_PRIVATE_VIRTUAL,
604
605 CPTI_CTOR_IDENTIFIER,
9eb71d8c 606 CPTI_COMPLETE_CTOR_IDENTIFIER,
d43829f9
MM
607 CPTI_BASE_CTOR_IDENTIFIER,
608 CPTI_DTOR_IDENTIFIER,
db9b2174 609 CPTI_COMPLETE_DTOR_IDENTIFIER,
d43829f9
MM
610 CPTI_BASE_DTOR_IDENTIFIER,
611 CPTI_DELETING_DTOR_IDENTIFIER,
9cd64686
MM
612 CPTI_DELTA2_IDENTIFIER,
613 CPTI_DELTA_IDENTIFIER,
9cd64686 614 CPTI_IN_CHARGE_IDENTIFIER,
3ec6bad3 615 CPTI_VTT_PARM_IDENTIFIER,
9cd64686
MM
616 CPTI_INDEX_IDENTIFIER,
617 CPTI_NELTS_IDENTIFIER,
618 CPTI_THIS_IDENTIFIER,
619 CPTI_PFN_IDENTIFIER,
620 CPTI_PFN_OR_DELTA2_IDENTIFIER,
621 CPTI_VPTR_IDENTIFIER,
298d6f60 622 CPTI_PUSH_EXCEPTION_IDENTIFIER,
1f6e1acc 623 CPTI_STD_IDENTIFIER,
9cd64686
MM
624
625 CPTI_LANG_NAME_C,
626 CPTI_LANG_NAME_CPLUSPLUS,
627 CPTI_LANG_NAME_JAVA,
628
629 CPTI_EMPTY_EXCEPT_SPEC,
630 CPTI_NULL,
631 CPTI_JCLASS,
632 CPTI_MINUS_ONE,
633 CPTI_TERMINATE,
f0105ed3 634 CPTI_ATEXIT,
db4283a0 635 CPTI_DSO_HANDLE,
059fa5e7 636 CPTI_DCAST,
9cd64686 637
7f4edbcb
BS
638 CPTI_MAX
639};
8d08fdba 640
7f4edbcb
BS
641extern tree cp_global_trees[CPTI_MAX];
642
4d8a1dd6
MM
643#define java_byte_type_node cp_global_trees[CPTI_JAVA_BYTE_TYPE]
644#define java_short_type_node cp_global_trees[CPTI_JAVA_SHORT_TYPE]
645#define java_int_type_node cp_global_trees[CPTI_JAVA_INT_TYPE]
646#define java_long_type_node cp_global_trees[CPTI_JAVA_LONG_TYPE]
647#define java_float_type_node cp_global_trees[CPTI_JAVA_FLOAT_TYPE]
648#define java_double_type_node cp_global_trees[CPTI_JAVA_DOUBLE_TYPE]
649#define java_char_type_node cp_global_trees[CPTI_JAVA_CHAR_TYPE]
650#define java_boolean_type_node cp_global_trees[CPTI_JAVA_BOOLEAN_TYPE]
651
7f4edbcb
BS
652#define void_zero_node cp_global_trees[CPTI_VOID_ZERO]
653#define wchar_decl_node cp_global_trees[CPTI_WCHAR_DECL]
654#define vtable_entry_type cp_global_trees[CPTI_VTABLE_ENTRY_TYPE]
c7e266a6
MM
655/* The type used to represent an offset by which to adjust the `this'
656 pointer in pointer-to-member types and, when not using vtable
657 thunks, in vtables. */
7f4edbcb 658#define delta_type_node cp_global_trees[CPTI_DELTA_TYPE]
c7e266a6
MM
659/* The type used to represent an index into the vtable. */
660#define vtable_index_type cp_global_trees[CPTI_VTABLE_INDEX_TYPE]
db1147b2
NS
661
662#define ti_desc_type_node cp_global_trees[CPTI_TI_DESC_TYPE]
663#define bltn_desc_type_node cp_global_trees[CPTI_BLTN_DESC_TYPE]
664#define ptr_desc_type_node cp_global_trees[CPTI_PTR_DESC_TYPE]
db1147b2
NS
665#define ary_desc_type_node cp_global_trees[CPTI_ARY_DESC_TYPE]
666#define func_desc_type_node cp_global_trees[CPTI_FUNC_DESC_TYPE]
667#define enum_desc_type_node cp_global_trees[CPTI_ENUM_DESC_TYPE]
668#define class_desc_type_node cp_global_trees[CPTI_CLASS_DESC_TYPE]
669#define si_class_desc_type_node cp_global_trees[CPTI_SI_CLASS_DESC_TYPE]
670#define vmi_class_desc_type_node cp_global_trees[CPTI_VMI_CLASS_DESC_TYPE]
387769ed 671#define ptm_desc_type_node cp_global_trees[CPTI_PTM_DESC_TYPE]
db1147b2
NS
672#define base_desc_type_node cp_global_trees[CPTI_BASE_DESC_TYPE]
673
7f4edbcb
BS
674#define class_type_node cp_global_trees[CPTI_CLASS_TYPE]
675#define record_type_node cp_global_trees[CPTI_RECORD_TYPE]
676#define union_type_node cp_global_trees[CPTI_UNION_TYPE]
677#define enum_type_node cp_global_trees[CPTI_ENUM_TYPE]
678#define unknown_type_node cp_global_trees[CPTI_UNKNOWN_TYPE]
7f4edbcb
BS
679#define vtbl_type_node cp_global_trees[CPTI_VTBL_TYPE]
680#define vtbl_ptr_type_node cp_global_trees[CPTI_VTBL_PTR_TYPE]
681#define std_node cp_global_trees[CPTI_STD]
2854d3c6 682#define abi_node cp_global_trees[CPTI_ABI]
7f4edbcb 683#define type_info_type_node cp_global_trees[CPTI_TYPE_INFO_TYPE]
669ec2b4 684#define tinfo_decl_id cp_global_trees[CPTI_TINFO_DECL_ID]
db1147b2 685#define tinfo_decl_type cp_global_trees[CPTI_TINFO_DECL_TYPE]
669ec2b4 686#define tinfo_var_id cp_global_trees[CPTI_TINFO_VAR_ID]
7f4edbcb
BS
687#define abort_fndecl cp_global_trees[CPTI_ABORT_FNDECL]
688#define global_delete_fndecl cp_global_trees[CPTI_GLOBAL_DELETE_FNDECL]
ea419909 689
9cd64686
MM
690/* Define the sets of attributes that member functions and baseclasses
691 can have. These are sensible combinations of {public,private,protected}
692 cross {virtual,non-virtual}. */
693
694#define access_default_node cp_global_trees[CPTI_ACCESS_DEFAULT]
695#define access_public_node cp_global_trees[CPTI_ACCESS_PUBLIC]
696#define access_protected_node cp_global_trees[CPTI_ACCESS_PROTECTED]
697#define access_private_node cp_global_trees[CPTI_ACCESS_PRIVATE]
698#define access_default_virtual_node cp_global_trees[CPTI_ACCESS_DEFAULT_VIRTUAL]
699#define access_public_virtual_node cp_global_trees[CPTI_ACCESS_PUBLIC_VIRTUAL]
700#define access_protected_virtual_node cp_global_trees[CPTI_ACCESS_PROTECTED_VIRTUAL]
701#define access_private_virtual_node cp_global_trees[CPTI_ACCESS_PRIVATE_VIRTUAL]
702
703/* We cache these tree nodes so as to call get_identifier less
704 frequently. */
705
9eb71d8c 706/* The name of a constructor that takes an in-charge parameter to
db9b2174 707 decide whether or not to construct virtual base classes. */
9cd64686 708#define ctor_identifier cp_global_trees[CPTI_CTOR_IDENTIFIER]
9eb71d8c
MM
709/* The name of a constructor that constructs virtual base classes. */
710#define complete_ctor_identifier cp_global_trees[CPTI_COMPLETE_CTOR_IDENTIFIER]
d43829f9
MM
711/* The name of a constructor that does not construct virtual base classes. */
712#define base_ctor_identifier cp_global_trees[CPTI_BASE_CTOR_IDENTIFIER]
db9b2174
MM
713/* The name of a destructor that takes an in-charge parameter to
714 decide whether or not to destroy virtual base classes and whether
715 or not to delete the object. */
d43829f9 716#define dtor_identifier cp_global_trees[CPTI_DTOR_IDENTIFIER]
db9b2174
MM
717/* The name of a destructor that destroys virtual base classes. */
718#define complete_dtor_identifier cp_global_trees[CPTI_COMPLETE_DTOR_IDENTIFIER]
d43829f9
MM
719/* The name of a destructor that does not destroy virtual base
720 classes. */
721#define base_dtor_identifier cp_global_trees[CPTI_BASE_DTOR_IDENTIFIER]
722/* The name of a destructor that destroys virtual base classes, and
723 then deletes the entire object. */
724#define deleting_dtor_identifier cp_global_trees[CPTI_DELETING_DTOR_IDENTIFIER]
725
9cd64686
MM
726#define delta2_identifier cp_global_trees[CPTI_DELTA2_IDENTIFIER]
727#define delta_identifier cp_global_trees[CPTI_DELTA_IDENTIFIER]
9cd64686 728#define in_charge_identifier cp_global_trees[CPTI_IN_CHARGE_IDENTIFIER]
3ec6bad3
MM
729
730/* The name of the parameter that contains a pointer to the VTT to use
731 for this subobject constructor or destructor. */
732#define vtt_parm_identifier cp_global_trees[CPTI_VTT_PARM_IDENTIFIER]
733
9cd64686
MM
734#define index_identifier cp_global_trees[CPTI_INDEX_IDENTIFIER]
735#define nelts_identifier cp_global_trees[CPTI_NELTS_IDENTIFIER]
736#define this_identifier cp_global_trees[CPTI_THIS_IDENTIFIER]
737#define pfn_identifier cp_global_trees[CPTI_PFN_IDENTIFIER]
738#define pfn_or_delta2_identifier cp_global_trees[CPTI_PFN_OR_DELTA2_IDENTIFIER]
739#define vptr_identifier cp_global_trees[CPTI_VPTR_IDENTIFIER]
298d6f60
MM
740/* The name of the function to call to push an exception onto the
741 exception stack. */
742#define cp_push_exception_identifier cp_global_trees[CPTI_PUSH_EXCEPTION_IDENTIFIER]
1f6e1acc
AS
743/* The name of the std namespace. */
744#define std_identifier cp_global_trees[CPTI_STD_IDENTIFIER]
9cd64686
MM
745
746#define lang_name_c cp_global_trees[CPTI_LANG_NAME_C]
747#define lang_name_cplusplus cp_global_trees[CPTI_LANG_NAME_CPLUSPLUS]
748#define lang_name_java cp_global_trees[CPTI_LANG_NAME_JAVA]
749
750/* Exception specifier used for throw(). */
751#define empty_except_spec cp_global_trees[CPTI_EMPTY_EXCEPT_SPEC]
752
753/* The node for `__null'. */
754#define null_node cp_global_trees[CPTI_NULL]
755
756/* If non-NULL, a POINTER_TYPE equivalent to (java::lang::Class*). */
757#define jclass_node cp_global_trees[CPTI_JCLASS]
758
759/* A node for `(int) -1'. */
760#define minus_one_node cp_global_trees[CPTI_MINUS_ONE]
761
762/* The declaration for `std::terminate'. */
763#define terminate_node cp_global_trees[CPTI_TERMINATE]
764
db4283a0 765/* A pointer to `std::atexit'. */
f0105ed3
MM
766#define atexit_node cp_global_trees[CPTI_ATEXIT]
767
db4283a0
MM
768/* A pointer to `__dso_handle'. */
769#define dso_handle_node cp_global_trees[CPTI_DSO_HANDLE]
770
059fa5e7
NS
771/* The declaration of the dynamic_cast runtime. */
772#define dynamic_cast_node cp_global_trees[CPTI_DCAST]
773
b3ab27f3
MM
774/* The type of a destructor. */
775#define cleanup_type cp_global_trees[CPTI_CLEANUP_TYPE]
776
3ec6bad3
MM
777/* The type of the vtt parameter passed to subobject constructors and
778 destructors. */
779#define vtt_parm_type cp_global_trees[CPTI_VTT_PARM_TYPE]
780
9cd64686
MM
781/* Global state. */
782
6f80451c
MM
783struct stmt_tree {
784 tree x_last_stmt;
785 tree x_last_expr_type;
f2c5f623
BC
786/* Non-zero if we should treat statements as full expressions. In
787 particular, this variable is no-zero if at the end of a statement
788 we should destroy any temporaries created during that statement.
789 Similarly, if, at the end of a block, we should destroy any local
790 variables in this block. Normally, this variable is non-zero,
791 since those are the normal semantics of C++.
792
793 However, in order to represent aggregate initialization code as
794 tree structure, we use statement-expressions. The statements
795 within the statement expression should not result in cleanups being
796 run until the entire enclosing statement is complete. */
6f80451c
MM
797 int stmts_are_full_exprs_p;
798};
799
9cd64686 800struct saved_scope {
9cd64686
MM
801 tree old_bindings;
802 tree old_namespace;
fc0e7bf5
MM
803 tree class_name;
804 tree class_type;
9cd64686 805 tree access_specifier;
a8f73d4b 806 tree function_decl;
9cd64686
MM
807 varray_type lang_base;
808 tree *lang_stack;
809 tree lang_name;
810 tree x_function_parms;
811 tree template_parms;
9cd64686
MM
812 tree x_previous_class_type;
813 tree x_previous_class_values;
6f80451c 814 tree x_saved_tree;
70adf8a9
JM
815 tree incomplete;
816 tree lookups;
fc0e7bf5
MM
817
818 HOST_WIDE_INT x_processing_template_decl;
9cd64686
MM
819 int x_processing_specialization;
820 int x_processing_explicit_instantiation;
a8f73d4b 821 int need_pop_function_context;
fc0e7bf5 822
6f80451c 823 struct stmt_tree x_stmt_tree;
fc0e7bf5
MM
824
825 struct binding_level *class_bindings;
a8f73d4b 826 struct binding_level *bindings;
fc0e7bf5
MM
827
828 struct saved_scope *prev;
9cd64686
MM
829};
830
831/* The current open namespace. */
832
833#define current_namespace scope_chain->old_namespace
834
835/* IDENTIFIER_NODE: name of current class */
836
837#define current_class_name scope_chain->class_name
838
839/* _TYPE: the type of the current class */
840
841#define current_class_type scope_chain->class_type
842
843/* When parsing a class definition, the access specifier most recently
844 given by the user, or, if no access specifier was given, the
845 default value appropriate for the kind of class (i.e., struct,
846 class, or union). */
847
848#define current_access_specifier scope_chain->access_specifier
849
850/* Pointer to the top of the language name stack. */
851
852#define current_lang_stack scope_chain->lang_stack
853#define current_lang_base scope_chain->lang_base
854#define current_lang_name scope_chain->lang_name
855
856/* Parsing a function declarator leaves a list of parameter names
857 or a chain or parameter decls here. */
858
859#define current_function_parms scope_chain->x_function_parms
860#define current_template_parms scope_chain->template_parms
861
862#define processing_template_decl scope_chain->x_processing_template_decl
863#define processing_specialization scope_chain->x_processing_specialization
864#define processing_explicit_instantiation scope_chain->x_processing_explicit_instantiation
865
866/* _TYPE: the previous type that was a class */
867
868#define previous_class_type scope_chain->x_previous_class_type
869
870/* This is a copy of the class_shadowed list of the previous class
871 binding contour when at global scope. It's used to reset
872 IDENTIFIER_CLASS_VALUEs when entering another class scope (i.e. a
873 cache miss). */
874
875#define previous_class_values scope_chain->x_previous_class_values
876
70adf8a9
JM
877/* A list of the declarations with incomplete type at namespace scope. */
878
879#define namespace_scope_incomplete scope_chain->incomplete
880
881/* A list of private types mentioned, for deferred access checking. */
882
883#define type_lookups scope_chain->lookups
884
9cd64686
MM
885extern struct saved_scope *scope_chain;
886
8012c983
MM
887/* Global state pertinent to the current function. */
888
99dccabc 889struct language_function
8012c983 890{
4519c0a8
MM
891 tree x_ctor_label;
892 tree x_dtor_label;
4519c0a8
MM
893 tree x_current_class_ptr;
894 tree x_current_class_ref;
2c146a76
MM
895 tree x_eh_spec_try_block;
896 tree x_scope_stmt_stack;
897 tree x_in_charge_parm;
4519c0a8 898
9bfadf57
MM
899 tree *x_vcalls_possible_p;
900
4519c0a8 901 struct rtx_def *x_result_rtx;
8012c983
MM
902
903 int returns_value;
904 int returns_null;
8012c983 905 int parms_stored;
8012c983 906 int in_function_try_handler;
ed5511d9 907 int x_expanding_p;
24bef158 908 int name_declared;
9bfadf57 909 int vtbls_set_up_p;
8012c983 910
6f80451c
MM
911 struct stmt_tree x_stmt_tree;
912
6625cdb5
JM
913 struct named_label_use_list *x_named_label_uses;
914 struct named_label_list *x_named_labels;
a8f73d4b 915 struct binding_level *bindings;
914653a2
MM
916
917 const char *cannot_inline;
8012c983
MM
918};
919
99dccabc 920/* The current C++-specific per-function global variables. */
8012c983 921
01d939e8 922#define cp_function_chain (cfun->language)
8012c983
MM
923
924/* In a destructor, the point at which all derived class destroying
925 has been done, just before any base class destroying will be done. */
926
4519c0a8 927#define dtor_label cp_function_chain->x_dtor_label
8012c983
MM
928
929/* In a constructor, the point at which we are ready to return
930 the pointer to the initialized object. */
931
4519c0a8 932#define ctor_label cp_function_chain->x_ctor_label
8012c983 933
8012c983
MM
934/* When we're processing a member function, current_class_ptr is the
935 PARM_DECL for the `this' pointer. The current_class_ref is an
936 expression for `*this'. */
937
a8f73d4b 938#define current_class_ptr \
01d939e8 939 (cfun ? cp_function_chain->x_current_class_ptr : NULL_TREE)
a8f73d4b 940#define current_class_ref \
01d939e8 941 (cfun ? cp_function_chain->x_current_class_ref : NULL_TREE)
8012c983 942
6f80451c
MM
943/* Information about the current statement tree. */
944
945#define current_stmt_tree \
01d939e8 946 (cfun \
6f80451c
MM
947 ? &cp_function_chain->x_stmt_tree \
948 : &scope_chain->x_stmt_tree)
949
950/* When building a statement-tree, this is the last statement added to
951 the tree. */
8012c983 952
6f80451c 953#define last_tree current_stmt_tree->x_last_stmt
8012c983
MM
954
955/* The type of the last expression-statement we have seen. This is
956 required because the type of a statement-expression is the type of
957 the last expression statement. */
958
6f80451c 959#define last_expr_type current_stmt_tree->x_last_expr_type
8d08fdba 960
2c146a76
MM
961/* The TRY_BLOCK for the exception-specifiers for the current
962 function, if any. */
963
964#define current_eh_spec_try_block cp_function_chain->x_eh_spec_try_block
965
966/* The stack of SCOPE_STMTs for the current function. */
967
968#define current_scope_stmt_stack cp_function_chain->x_scope_stmt_stack
969
970/* The `__in_chrg' parameter for the current function. Only used for
971 destructors. */
972
973#define current_in_charge_parm cp_function_chain->x_in_charge_parm
974
9bfadf57
MM
975/* In destructors, this is a pointer to a condition in an
976 if-statement. If the pointed-to value is boolean_true_node, then
977 there may be virtual function calls in this destructor. */
978
979#define current_vcalls_possible_p cp_function_chain->x_vcalls_possible_p
980
8012c983
MM
981/* Set to 0 at beginning of a function definition, set to 1 if
982 a return statement that specifies a return value is seen. */
983
984#define current_function_returns_value cp_function_chain->returns_value
985
986/* Set to 0 at beginning of a function definition, set to 1 if
987 a return statement with no argument is seen. */
988
989#define current_function_returns_null cp_function_chain->returns_null
990
991#define current_function_just_assigned_this \
992 cp_function_chain->just_assigned_this
993
994#define current_function_parms_stored \
995 cp_function_chain->parms_stored
996
9bfadf57
MM
997/* Nonzero if we have already generated code to initialize virtual
998 function tables in this function. */
999
1000#define vtbls_set_up_p cp_function_chain->vtbls_set_up_p
1001
8012c983
MM
1002/* Non-zero if we should generate RTL for functions that we process.
1003 When this is zero, we just accumulate tree structure, without
1004 interacting with the back end. */
1005
ed5511d9 1006#define expanding_p cp_function_chain->x_expanding_p
8012c983 1007
b35d4555
MM
1008/* Non-zero if we are in the semantic analysis phase for the current
1009 function. */
1010
6f80451c 1011#define doing_semantic_analysis_p() (!expanding_p)
b35d4555 1012
8012c983
MM
1013#define in_function_try_handler cp_function_chain->in_function_try_handler
1014
1015extern tree current_function_return_value;
30394414
JM
1016extern tree global_namespace;
1017
596ea4e5
AS
1018#define ansi_opname(CODE) \
1019 (operator_name_info[(int) (CODE)].identifier)
1020#define ansi_assopname(CODE) \
1021 (assignment_operator_name_info[(int) (CODE)].identifier)
8d08fdba
MS
1022
1023/* Nonzero means `$' can be in an identifier. */
1024
1025extern int dollars_in_ident;
1026
1027/* Nonzero means allow type mismatches in conditional expressions;
1028 just make their values `void'. */
1029
1030extern int flag_cond_mismatch;
1031
1032/* Nonzero means don't recognize the keyword `asm'. */
1033
1034extern int flag_no_asm;
1035
1036/* For cross referencing. */
1037
1038extern int flag_gnu_xref;
1039
1040/* For environments where you can use GNU binutils (as, ld in particular). */
1041
1042extern int flag_gnu_binutils;
1043
8d08fdba
MS
1044/* Nonzero means warn about implicit declarations. */
1045
1046extern int warn_implicit;
1047
795add94
VM
1048/* Nonzero means warn about usage of long long when `-pedantic'. */
1049
1050extern int warn_long_long;
1051
8d08fdba
MS
1052/* Nonzero means warn when all ctors or dtors are private, and the class
1053 has no friends. */
1054
1055extern int warn_ctor_dtor_privacy;
1056
1057/* Nonzero means warn about function definitions that default the return type
1058 or that use a null return and have a return-type other than void. */
1059
1060extern int warn_return_type;
1061
79f5f47f
BK
1062/* If non-NULL, dump the tree structure for the entire translation
1063 unit to this file. */
1064
2228d450 1065extern const char *flag_dump_translation_unit;
79f5f47f 1066
d9cf7c82
JM
1067/* Nonzero means warn about deprecated conversion from string constant to
1068 `char *'. */
8d08fdba
MS
1069
1070extern int warn_write_strings;
1071
1072/* Nonzero means warn about sizeof(function) or addition/subtraction
1073 of function pointers. */
1074
1075extern int warn_pointer_arith;
1076
8d08fdba
MS
1077/* Nonzero means warn about multiple (redundant) decls for the same single
1078 variable or function. */
1079
1080extern int warn_redundant_decls;
1081
1082/* Warn if initializer is not completely bracketed. */
1083
1084extern int warn_missing_braces;
1085
2ee887f2
MS
1086/* Warn about comparison of signed and unsigned values. */
1087
1088extern int warn_sign_compare;
1089
1bdba2c0
DZ
1090/* Warn about testing equality of floating point numbers. */
1091
1092extern int warn_float_equal;
1093
8d08fdba
MS
1094/* Warn about a subscript that has type char. */
1095
1096extern int warn_char_subscripts;
1097
1098/* Nonzero means warn about pointer casts that can drop a type qualifier
1099 from the pointer target type. */
1100
1101extern int warn_cast_qual;
1102
8d08fdba 1103/* Nonzero means warn about non virtual destructors in classes that have
e92cc029 1104 virtual functions. */
8d08fdba
MS
1105
1106extern int warn_nonvdtor;
1107
9a3b49ac
MS
1108/* Non-zero means warn when we convert a pointer to member function
1109 into a pointer to (void or function). */
1110
1111extern int warn_pmf2ptr;
1112
eb448459
MS
1113/* Nonzero means warn about violation of some Effective C++ style rules. */
1114
1115extern int warn_ecpp;
1116
da20811c
JM
1117/* Nonzero means warn where overload resolution chooses a promotion from
1118 unsigned to signed over a conversion to an unsigned of the same size. */
1119
1120extern int warn_sign_promo;
1121
8d08fdba 1122/* Non-zero means warn when a function is declared extern and later inline. */
eb448459 1123
8d08fdba
MS
1124extern int warn_extern_inline;
1125
0c4b14c4
JM
1126/* Non-zero means warn when an old-style cast is used. */
1127
1128extern int warn_old_style_cast;
1129
3dbc07b6
MM
1130/* Non-zero means warn when the compiler will reorder code. */
1131
1132extern int warn_reorder;
1133
8d08fdba
MS
1134/* Nonzero means to treat bitfields as unsigned unless they say `signed'. */
1135
1136extern int flag_signed_bitfields;
1137
38e01259 1138/* True for more efficient but incompatible (not fully tested)
8926095f 1139 vtable implementation (using thunks).
e92cc029 1140 0 is old behavior; 1 is new behavior. */
8926095f 1141extern int flag_vtable_thunks;
51c184be 1142
8d08fdba
MS
1143/* INTERFACE_ONLY nonzero means that we are in an "interface"
1144 section of the compiler. INTERFACE_UNKNOWN nonzero means
1145 we cannot trust the value of INTERFACE_ONLY. If INTERFACE_UNKNOWN
1146 is zero and INTERFACE_ONLY is zero, it means that we are responsible
1147 for exporting definitions that others might need. */
1148extern int interface_only, interface_unknown;
1149
1150/* Nonzero means we should attempt to elide constructors when possible. */
1151
1152extern int flag_elide_constructors;
1153
cab1f180
ML
1154/* Nonzero means enable obscure standard features and disable GNU
1155 extensions that might cause standard-compliant code to be
1156 miscompiled. */
39211cd5
MS
1157
1158extern int flag_ansi;
1159
8d08fdba
MS
1160/* Nonzero means that member functions defined in class scope are
1161 inline by default. */
1162
1163extern int flag_default_inline;
386b8a85 1164
669ec2b4
JM
1165/* The name-mangling scheme to use. Versions of gcc before 2.8 use
1166 version 0. */
1167extern int name_mangling_version;
1168
5096c664
JM
1169/* Nonzero if wchar_t should be `unsigned short' instead of whatever it
1170 would normally be, for use with WINE. */
1171extern int flag_short_wchar;
1172
669ec2b4
JM
1173/* Nonzero if squashed mangling is to be performed.
1174 This uses the B and K codes to reference previously seen class types
1175 and class qualifiers. */
1176extern int flag_do_squangling;
1177
2aaf816d
JM
1178/* Nonzero means generate separate instantiation control files and juggle
1179 them at link time. */
1180extern int flag_use_repository;
1181
dc8263bc
JM
1182/* Nonzero if we want to issue diagnostics that the standard says are not
1183 required. */
1184extern int flag_optional_diags;
a1dd0d36
JM
1185
1186/* Nonzero means output .vtable_{entry,inherit} for use in doing vtable gc. */
1187extern int flag_vtable_gc;
2642b9bf
JM
1188
1189/* Nonzero means make the default pedwarns warnings instead of errors.
1190 The value of this flag is ignored if -pedantic is specified. */
dfcafcb6 1191extern int flag_permissive;
d6479fe7 1192
1660cb3a
JM
1193/* Nonzero means to implement standard semantics for exception
1194 specifications, calling unexpected if an exception is thrown that
1195 doesn't match the specification. Zero means to treat them as
1196 assertions and optimize accordingly, but not check them. */
1197extern int flag_enforce_eh_specs;
1198
d6479fe7
MM
1199/* Nonzero if we want to obey access control semantics. */
1200
1201extern int flag_access_control;
1202
708cae97
JM
1203/* Nonzero if we want to check the return value of new and avoid calling
1204 constructors if it is a null pointer. */
1205
1206extern int flag_check_new;
1207
1b12a13e
MM
1208/* If this variable is defined to a non-NULL value, it will be called
1209 after the file has been completely parsed. The argument will be
1210 the GLOBAL_NAMESPACE. */
1211
158991b7 1212extern void (*back_end_hook) PARAMS ((tree));
1b12a13e 1213
8d08fdba
MS
1214\f
1215/* C++ language-specific tree codes. */
1216#define DEFTREECODE(SYM, NAME, TYPE, LENGTH) SYM,
1217enum cplus_tree_code {
c7d87c0a 1218 CP_DUMMY_TREE_CODE = LAST_C_TREE_CODE,
e92cc029 1219#include "cp-tree.def"
8d08fdba
MS
1220 LAST_CPLUS_TREE_CODE
1221};
1222#undef DEFTREECODE
1223
fcad5cf5 1224enum languages { lang_c, lang_cplusplus, lang_java };
8d08fdba
MS
1225
1226/* Macros to make error reporting functions' lives easier. */
1227#define TYPE_IDENTIFIER(NODE) (DECL_NAME (TYPE_NAME (NODE)))
1228#define TYPE_NAME_STRING(NODE) (IDENTIFIER_POINTER (TYPE_IDENTIFIER (NODE)))
1229#define TYPE_NAME_LENGTH(NODE) (IDENTIFIER_LENGTH (TYPE_IDENTIFIER (NODE)))
1230
1231#define TYPE_ASSEMBLER_NAME_STRING(NODE) (IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (TYPE_NAME (NODE))))
1232#define TYPE_ASSEMBLER_NAME_LENGTH(NODE) (IDENTIFIER_LENGTH (DECL_ASSEMBLER_NAME (TYPE_NAME (NODE))))
1233
a4443a08 1234/* The _DECL for this _TYPE. */
d2e5ee5c 1235#define TYPE_MAIN_DECL(NODE) (TYPE_STUB_DECL (TYPE_MAIN_VARIANT (NODE)))
a4443a08 1236
c92366fb 1237/* Nonzero if T is a class (or struct or union) type. Also nonzero
83233dca
MM
1238 for template type parameters, typename types, and instantiated
1239 template template parameters. Despite its name,
b80c4d77
MM
1240 this macro has nothing to do with the definition of aggregate given
1241 in the standard. Think of this macro as MAYBE_CLASS_TYPE_P. */
7ddedda4 1242#define IS_AGGR_TYPE(t) \
83233dca
MM
1243 (TREE_CODE (t) == TEMPLATE_TYPE_PARM \
1244 || TREE_CODE (t) == TYPENAME_TYPE \
7ddedda4 1245 || TREE_CODE (t) == TYPEOF_TYPE \
83233dca
MM
1246 || (TREE_CODE (t) == TEMPLATE_TEMPLATE_PARM \
1247 && TYPE_TEMPLATE_INFO (t)) \
7ddedda4
MM
1248 || TYPE_LANG_FLAG_5 (t))
1249
1250/* Set IS_AGGR_TYPE for T to VAL. T must be a class, struct, or
1251 union type. */
1252#define SET_IS_AGGR_TYPE(T, VAL) \
1253 (TYPE_LANG_FLAG_5 (T) = (VAL))
c92366fb 1254
b80c4d77
MM
1255/* Nonzero if T is a class type. Zero for template type parameters,
1256 typename types, and so forth. */
c92366fb 1257#define CLASS_TYPE_P(t) \
7ddedda4 1258 (IS_AGGR_TYPE_CODE (TREE_CODE (t)) && IS_AGGR_TYPE (t))
c92366fb 1259
5566b478 1260#define IS_AGGR_TYPE_CODE(t) (t == RECORD_TYPE || t == UNION_TYPE)
8d08fdba
MS
1261#define IS_AGGR_TYPE_2(TYPE1,TYPE2) \
1262 (TREE_CODE (TYPE1) == TREE_CODE (TYPE2) \
829297e6 1263 && IS_AGGR_TYPE (TYPE1) && IS_AGGR_TYPE (TYPE2))
6467930b
MS
1264#define IS_OVERLOAD_TYPE(t) \
1265 (IS_AGGR_TYPE (t) || TREE_CODE (t) == ENUMERAL_TYPE)
8d08fdba
MS
1266
1267/* In a *_TYPE, nonzero means a built-in type. */
1268#define TYPE_BUILT_IN(NODE) TYPE_LANG_FLAG_6(NODE)
1269
ea419909
PB
1270/* True if this a "Java" type, defined in 'extern "Java"'. */
1271#define TYPE_FOR_JAVA(NODE) TYPE_LANG_FLAG_3(NODE)
1272
91063b51
MM
1273/* The type qualifiers for this type, including the qualifiers on the
1274 elements for an array type. */
1275#define CP_TYPE_QUALS(NODE) \
1276 ((TREE_CODE (NODE) != ARRAY_TYPE) \
1277 ? TYPE_QUALS (NODE) : cp_type_quals (NODE))
1278
1279/* Nonzero if this type is const-qualified. */
1280#define CP_TYPE_CONST_P(NODE) \
174bcdb9 1281 ((CP_TYPE_QUALS (NODE) & TYPE_QUAL_CONST) != 0)
91063b51
MM
1282
1283/* Nonzero if this type is volatile-qualified. */
1284#define CP_TYPE_VOLATILE_P(NODE) \
174bcdb9 1285 ((CP_TYPE_QUALS (NODE) & TYPE_QUAL_VOLATILE) != 0)
91063b51 1286
174bcdb9 1287/* Nonzero if this type is restrict-qualified. */
91063b51 1288#define CP_TYPE_RESTRICT_P(NODE) \
174bcdb9 1289 ((CP_TYPE_QUALS (NODE) & TYPE_QUAL_RESTRICT) != 0)
91063b51
MM
1290
1291/* Nonzero if this type is const-qualified, but not
1292 volatile-qualified. Other qualifiers are ignored. This macro is
1293 used to test whether or not it is OK to bind an rvalue to a
1294 reference. */
1295#define CP_TYPE_CONST_NON_VOLATILE_P(NODE) \
1296 ((CP_TYPE_QUALS (NODE) & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE)) \
1297 == TYPE_QUAL_CONST)
1298
8d08fdba
MS
1299/* Virtual function addresses can be gotten from a virtual function
1300 table entry using this macro. */
eb68cb58
MM
1301#define FNADDR_FROM_VTABLE_ENTRY(ENTRY) \
1302 (!flag_vtable_thunks ? \
1303 TREE_VALUE (TREE_CHAIN (TREE_CHAIN (CONSTRUCTOR_ELTS (ENTRY)))) \
1304 : !DECL_THUNK_P (TREE_OPERAND ((ENTRY), 0)) \
1305 ? (ENTRY) \
8926095f 1306 : DECL_INITIAL (TREE_OPERAND ((ENTRY), 0)))
eb68cb58 1307
8d08fdba
MS
1308#define FUNCTION_ARG_CHAIN(NODE) (TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (NODE))))
1309#define PROMOTES_TO_AGGR_TYPE(NODE,CODE) \
1310 (((CODE) == TREE_CODE (NODE) \
1311 && IS_AGGR_TYPE (TREE_TYPE (NODE))) \
1312 || IS_AGGR_TYPE (NODE))
1313
8d08fdba
MS
1314/* Nonzero iff TYPE is uniquely derived from PARENT. Under MI, PARENT can
1315 be an ambiguous base class of TYPE, and this macro will be false. */
1316#define UNIQUELY_DERIVED_FROM_P(PARENT, TYPE) (get_base_distance (PARENT, TYPE, 0, (tree *)0) >= 0)
1317#define ACCESSIBLY_DERIVED_FROM_P(PARENT, TYPE) (get_base_distance (PARENT, TYPE, -1, (tree *)0) >= 0)
1318#define ACCESSIBLY_UNIQUELY_DERIVED_P(PARENT, TYPE) (get_base_distance (PARENT, TYPE, 1, (tree *)0) >= 0)
2bc9f1d1 1319#define PUBLICLY_UNIQUELY_DERIVED_P(PARENT, TYPE) (get_base_distance (PARENT, TYPE, 2, (tree *)0) >= 0)
a0a33927 1320#define DERIVED_FROM_P(PARENT, TYPE) (get_base_distance (PARENT, TYPE, 0, (tree *)0) != -1)
8d08fdba 1321\f
7ddedda4
MM
1322/* This structure provides additional information above and beyond
1323 what is provide in the ordinary tree_type. In the past, we used it
1324 for the types of class types, template parameters types, typename
1325 types, and so forth. However, there can be many (tens to hundreds
1326 of thousands) of template parameter types in a compilation, and
1327 there's no need for this additional information in that case.
1328 Therefore, we now use this data structure only for class types.
1329
1330 In the past, it was thought that there would be relatively few
1331 class types. However, in the presence of heavy use of templates,
1332 many (i.e., thousands) of classes can easily be generated.
1333 Therefore, we should endeavor to keep the size of this structure to
1334 a minimum. */
8d08fdba
MS
1335struct lang_type
1336{
8012c983
MM
1337 unsigned char align;
1338
1339 unsigned has_type_conversion : 1;
1340 unsigned has_init_ref : 1;
1341 unsigned has_default_ctor : 1;
1342 unsigned uses_multiple_inheritance : 1;
1343 unsigned const_needs_init : 1;
1344 unsigned ref_needs_init : 1;
1345 unsigned has_const_assign_ref : 1;
1346 unsigned anon_aggr : 1;
1347
5b0cec3b
MM
1348 unsigned has_mutable : 1;
1349 unsigned com_interface : 1;
1350 unsigned non_pod_class : 1;
1351 unsigned nearly_empty_p : 1;
8012c983
MM
1352 unsigned vtable_needs_writing : 1;
1353 unsigned has_assign_ref : 1;
834c6dff
MM
1354 unsigned has_new : 1;
1355 unsigned has_array_new : 1;
8012c983
MM
1356
1357 unsigned gets_delete : 2;
1358 unsigned has_call_overloaded : 1;
1359 unsigned has_array_ref_overloaded : 1;
1360 unsigned has_arrow_overloaded : 1;
1361 unsigned interface_only : 1;
1362 unsigned interface_unknown : 1;
1363 unsigned needs_virtual_reinit : 1;
1364
1365 unsigned marks: 6;
1366 unsigned vec_delete_takes_size : 1;
1367 unsigned declared_class : 1;
1368
1369 unsigned being_defined : 1;
1370 unsigned redefined : 1;
1371 unsigned debug_requested : 1;
1372 unsigned use_template : 2;
1373 unsigned got_semicolon : 1;
1374 unsigned ptrmemfunc_flag : 1;
1375 unsigned was_anonymous : 1;
1376
1377 unsigned has_real_assign_ref : 1;
1378 unsigned has_const_init_ref : 1;
1379 unsigned has_complex_init_ref : 1;
1380 unsigned has_complex_assign_ref : 1;
1381 unsigned has_abstract_assign_ref : 1;
1382 unsigned non_aggregate : 1;
1383 unsigned is_partial_instantiation : 1;
11cf4d18 1384 unsigned user_align : 1;
8012c983
MM
1385
1386 /* When adding a flag here, consider whether or not it ought to
1387 apply to a template instance if it applies to the template. If
1388 so, make sure to copy it in instantiate_class_template! */
1389
5b0cec3b
MM
1390 /* There are some bits left to fill out a 32-bit word. Keep track
1391 of this by updating the size of this bitfield whenever you add or
8012c983 1392 remove a flag. */
11cf4d18 1393 unsigned dummy : 8;
c7f9c6f5 1394
8d08fdba 1395 int vsize;
8d08fdba 1396
911a71a7 1397 tree primary_base;
c35cce41
MM
1398 tree vfields;
1399 tree vbases;
1400 tree tags;
c35cce41
MM
1401 tree size;
1402 tree size_unit;
1403 tree pure_virtuals;
1404 tree friend_classes;
1405 tree rtti;
1406 tree methods;
1407 tree template_info;
6a629cac 1408 tree befriending_classes;
8d08fdba
MS
1409};
1410
a0a33927
MS
1411/* Indicates whether or not (and how) a template was expanded for this class.
1412 0=no information yet/non-template class
1413 1=implicit template instantiation
1414 2=explicit template specialization
1415 3=explicit template instantiation */
8012c983 1416#define CLASSTYPE_USE_TEMPLATE(NODE) (TYPE_LANG_SPECIFIC(NODE)->use_template)
8d08fdba
MS
1417
1418/* Fields used for storing information before the class is defined.
1419 After the class is defined, these fields hold other information. */
1420
1421/* List of friends which were defined inline in this class definition. */
1422#define CLASSTYPE_INLINE_FRIENDS(NODE) (TYPE_NONCOPIED_PARTS (NODE))
1423
834c6dff 1424/* Nonzero for _CLASSTYPE means that operator delete is defined. */
8012c983 1425#define TYPE_GETS_DELETE(NODE) (TYPE_LANG_SPECIFIC(NODE)->gets_delete)
a28e3c7f
MS
1426#define TYPE_GETS_REG_DELETE(NODE) (TYPE_GETS_DELETE (NODE) & 1)
1427
1428/* Nonzero for _CLASSTYPE means that operator vec delete is defined and
1429 takes the optional size_t argument. */
1430#define TYPE_VEC_DELETE_TAKES_SIZE(NODE) \
8012c983 1431 (TYPE_LANG_SPECIFIC(NODE)->vec_delete_takes_size)
834c6dff
MM
1432
1433/* Nonzero if `new NODE[x]' should cause the allocation of extra
1434 storage to indicate how many array elements are in use. The old
1435 ABI had a bug in that we always allocate the extra storage if NODE
1436 has a two-argument array operator delete. */
1437#define TYPE_VEC_NEW_USES_COOKIE(NODE) \
1438 (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (NODE) \
1439 || (TYPE_LANG_SPECIFIC (NODE) \
1440 && TYPE_VEC_DELETE_TAKES_SIZE (NODE)))
8d08fdba 1441
8d08fdba
MS
1442/* Nonzero means that this _CLASSTYPE node defines ways of converting
1443 itself to other types. */
8012c983 1444#define TYPE_HAS_CONVERSION(NODE) (TYPE_LANG_SPECIFIC(NODE)->has_type_conversion)
8d08fdba 1445
8d08fdba 1446/* Nonzero means that this _CLASSTYPE node overloads operator=(X&). */
8012c983
MM
1447#define TYPE_HAS_ASSIGN_REF(NODE) (TYPE_LANG_SPECIFIC(NODE)->has_assign_ref)
1448#define TYPE_HAS_CONST_ASSIGN_REF(NODE) (TYPE_LANG_SPECIFIC(NODE)->has_const_assign_ref)
8d08fdba
MS
1449
1450/* Nonzero means that this _CLASSTYPE node has an X(X&) constructor. */
8012c983
MM
1451#define TYPE_HAS_INIT_REF(NODE) (TYPE_LANG_SPECIFIC(NODE)->has_init_ref)
1452#define TYPE_HAS_CONST_INIT_REF(NODE) (TYPE_LANG_SPECIFIC(NODE)->has_const_init_ref)
8d08fdba 1453
834c6dff
MM
1454/* Nonzero if this class defines an overloaded operator new. (An
1455 operator new [] doesn't count.) */
1456#define TYPE_HAS_NEW_OPERATOR(NODE) \
1457 (TYPE_LANG_SPECIFIC (NODE)->has_new)
1458
1459/* Nonzero if this class defines an overloaded operator new[]. */
1460#define TYPE_HAS_ARRAY_NEW_OPERATOR(NODE) \
1461 (TYPE_LANG_SPECIFIC (NODE)->has_array_new)
1462
8d08fdba
MS
1463/* Nonzero means that this type is being defined. I.e., the left brace
1464 starting the definition of this type has been seen. */
8012c983 1465#define TYPE_BEING_DEFINED(NODE) (TYPE_LANG_SPECIFIC(NODE)->being_defined)
8d08fdba
MS
1466/* Nonzero means that this type has been redefined. In this case, if
1467 convenient, don't reprocess any methods that appear in its redefinition. */
8012c983 1468#define TYPE_REDEFINED(NODE) (TYPE_LANG_SPECIFIC(NODE)->redefined)
8d08fdba 1469
9e0781b5 1470/* The is the basetype that contains NODE's rtti. */
db5ae43f 1471#define CLASSTYPE_RTTI(NODE) (TYPE_LANG_SPECIFIC(NODE)->rtti)
8d08fdba
MS
1472
1473/* Nonzero means that this _CLASSTYPE node overloads operator(). */
8012c983 1474#define TYPE_OVERLOADS_CALL_EXPR(NODE) (TYPE_LANG_SPECIFIC(NODE)->has_call_overloaded)
8d08fdba
MS
1475
1476/* Nonzero means that this _CLASSTYPE node overloads operator[]. */
8012c983 1477#define TYPE_OVERLOADS_ARRAY_REF(NODE) (TYPE_LANG_SPECIFIC(NODE)->has_array_ref_overloaded)
8d08fdba
MS
1478
1479/* Nonzero means that this _CLASSTYPE node overloads operator->. */
8012c983 1480#define TYPE_OVERLOADS_ARROW(NODE) (TYPE_LANG_SPECIFIC(NODE)->has_arrow_overloaded)
8d08fdba
MS
1481
1482/* Nonzero means that this _CLASSTYPE (or one of its ancestors) uses
1483 multiple inheritance. If this is 0 for the root of a type
1484 hierarchy, then we can use more efficient search techniques. */
8012c983 1485#define TYPE_USES_MULTIPLE_INHERITANCE(NODE) (TYPE_LANG_SPECIFIC(NODE)->uses_multiple_inheritance)
8d08fdba
MS
1486
1487/* Nonzero means that this _CLASSTYPE (or one of its ancestors) uses
1488 virtual base classes. If this is 0 for the root of a type
1489 hierarchy, then we can use more efficient search techniques. */
1490#define TYPE_USES_VIRTUAL_BASECLASSES(NODE) (TREE_LANG_FLAG_3(NODE))
1491
61a127b3 1492/* Vector member functions defined in this class. Each element is
03017874
MM
1493 either a FUNCTION_DECL, a TEMPLATE_DECL, or an OVERLOAD. All
1494 functions with the same name end up in the same slot. The first
61a127b3 1495 two elements are for constructors, and destructors, respectively.
db9b2174
MM
1496 Any conversion operators are next, followed by ordinary member
1497 functions. There may be empty entries at the end of the vector. */
72b7eeff 1498#define CLASSTYPE_METHOD_VEC(NODE) (TYPE_LANG_SPECIFIC(NODE)->methods)
8d08fdba 1499
db9b2174
MM
1500/* The slot in the CLASSTYPE_METHOD_VEC where constructors go. */
1501#define CLASSTYPE_CONSTRUCTOR_SLOT 0
1502
1503/* The slot in the CLASSTYPE_METHOD_VEC where destructors go. */
1504#define CLASSTYPE_DESTRUCTOR_SLOT 1
1505
1506/* The first slot in the CLASSTYPE_METHOD_VEC where conversion
1507 operators can appear. */
1508#define CLASSTYPE_FIRST_CONVERSION_SLOT 2
1509
1510/* A FUNCTION_DECL or OVERLOAD for the constructors for NODE. These
1511 are the constructors that take an in-charge parameter. */
1512#define CLASSTYPE_CONSTRUCTORS(NODE) \
1513 (TREE_VEC_ELT (CLASSTYPE_METHOD_VEC (NODE), CLASSTYPE_CONSTRUCTOR_SLOT))
1514
1515/* A FUNCTION_DECL for the destructor for NODE. These are te
1516 destructors that take an in-charge parameter. */
1517#define CLASSTYPE_DESTRUCTORS(NODE) \
1518 (TREE_VEC_ELT (CLASSTYPE_METHOD_VEC (NODE), CLASSTYPE_DESTRUCTOR_SLOT))
e1cd6e56 1519
8d08fdba 1520/* Mark bits for depth-first and breath-first searches. */
7ddedda4
MM
1521
1522/* Get the value of the Nth mark bit. */
ba793d6e 1523#define CLASSTYPE_MARKED_N(NODE, N) \
8012c983 1524 (((CLASS_TYPE_P (NODE) ? TYPE_LANG_SPECIFIC (NODE)->marks \
ba793d6e 1525 : ((unsigned) TYPE_ALIAS_SET (NODE))) & (1 << N)) != 0)
7ddedda4
MM
1526
1527/* Set the Nth mark bit. */
ba793d6e
MM
1528#define SET_CLASSTYPE_MARKED_N(NODE, N) \
1529 (CLASS_TYPE_P (NODE) \
1530 ? (void) (TYPE_LANG_SPECIFIC (NODE)->marks |= (1 << (N))) \
1531 : (void) (TYPE_ALIAS_SET (NODE) |= (1 << (N))))
7ddedda4
MM
1532
1533/* Clear the Nth mark bit. */
ba793d6e
MM
1534#define CLEAR_CLASSTYPE_MARKED_N(NODE, N) \
1535 (CLASS_TYPE_P (NODE) \
1536 ? (void) (TYPE_LANG_SPECIFIC (NODE)->marks &= ~(1 << (N))) \
1537 : (void) (TYPE_ALIAS_SET (NODE) &= ~(1 << (N))))
7ddedda4
MM
1538
1539/* Get the value of the mark bits. */
1540#define CLASSTYPE_MARKED(NODE) CLASSTYPE_MARKED_N(NODE, 0)
1541#define CLASSTYPE_MARKED2(NODE) CLASSTYPE_MARKED_N(NODE, 1)
1542#define CLASSTYPE_MARKED3(NODE) CLASSTYPE_MARKED_N(NODE, 2)
1543#define CLASSTYPE_MARKED4(NODE) CLASSTYPE_MARKED_N(NODE, 3)
1544#define CLASSTYPE_MARKED5(NODE) CLASSTYPE_MARKED_N(NODE, 4)
1545#define CLASSTYPE_MARKED6(NODE) CLASSTYPE_MARKED_N(NODE, 5)
1546
8d08fdba 1547/* Macros to modify the above flags */
7ddedda4
MM
1548#define SET_CLASSTYPE_MARKED(NODE) SET_CLASSTYPE_MARKED_N(NODE, 0)
1549#define CLEAR_CLASSTYPE_MARKED(NODE) CLEAR_CLASSTYPE_MARKED_N(NODE, 0)
1550#define SET_CLASSTYPE_MARKED2(NODE) SET_CLASSTYPE_MARKED_N(NODE, 1)
1551#define CLEAR_CLASSTYPE_MARKED2(NODE) CLEAR_CLASSTYPE_MARKED_N(NODE, 1)
1552#define SET_CLASSTYPE_MARKED3(NODE) SET_CLASSTYPE_MARKED_N(NODE, 2)
1553#define CLEAR_CLASSTYPE_MARKED3(NODE) CLEAR_CLASSTYPE_MARKED_N(NODE, 2)
1554#define SET_CLASSTYPE_MARKED4(NODE) SET_CLASSTYPE_MARKED_N(NODE, 3)
1555#define CLEAR_CLASSTYPE_MARKED4(NODE) CLEAR_CLASSTYPE_MARKED_N(NODE, 3)
1556#define SET_CLASSTYPE_MARKED5(NODE) SET_CLASSTYPE_MARKED_N(NODE, 4)
1557#define CLEAR_CLASSTYPE_MARKED5(NODE) CLEAR_CLASSTYPE_MARKED_N(NODE, 4)
1558#define SET_CLASSTYPE_MARKED6(NODE) SET_CLASSTYPE_MARKED_N(NODE, 5)
1559#define CLEAR_CLASSTYPE_MARKED6(NODE) CLEAR_CLASSTYPE_MARKED_N(NODE, 5)
8d08fdba 1560
35acd3f2
MM
1561/* A list of the nested tag-types (class, struct, union, or enum)
1562 found within this class. The TREE_PURPOSE of each node is the name
1563 of the type; the TREE_VALUE is the type itself. This list includes
1564 nested member class templates. */
8d08fdba
MS
1565#define CLASSTYPE_TAGS(NODE) (TYPE_LANG_SPECIFIC(NODE)->tags)
1566
3ef397c1 1567/* Nonzero if NODE has a primary base class, i.e., a base class with
0811ea8f 1568 which it shares the virtual function table pointer. */
3ef397c1 1569#define CLASSTYPE_HAS_PRIMARY_BASE_P(NODE) \
911a71a7 1570 (CLASSTYPE_PRIMARY_BINFO (NODE) != NULL_TREE)
3ef397c1
MM
1571
1572/* If non-NULL, this is the binfo for the primary base class, i.e.,
1573 the base class which contains the virtual function table pointer
1574 for this class. */
5e19c053 1575#define CLASSTYPE_PRIMARY_BINFO(NODE) \
911a71a7 1576 (TYPE_LANG_SPECIFIC (NODE)->primary_base)
3ef397c1 1577
c35cce41 1578/* The number of virtual functions present in this class' virtual
da3d4dfa 1579 function table. */
8d08fdba 1580#define CLASSTYPE_VSIZE(NODE) (TYPE_LANG_SPECIFIC(NODE)->vsize)
23381155
MM
1581
1582/* A chain of BINFOs for the direct and indirect virtual base classes
c35cce41
MM
1583 that this type uses in a post-order depth-first left-to-right
1584 order. (In other words, these bases appear in the order that they
23656158
MM
1585 should be initialized.) If a virtual base is primary, then the
1586 primary copy will appear on this list. Thus, the BINFOs on this
1587 list are all "real"; they are the same BINFOs that will be
1588 encountered when using dfs_unmarked_real_bases_queue_p and related
1589 functions. */
8d08fdba 1590#define CLASSTYPE_VBASECLASSES(NODE) (TYPE_LANG_SPECIFIC(NODE)->vbases)
23381155 1591
3c9d6359 1592/* For a non-virtual BINFO, the BINFO itself; for a virtual BINFO, the
a55583e9 1593 binfo_for_vbase. C is the most derived class for the hierarchy
3c9d6359
MM
1594 containing BINFO. */
1595#define CANONICAL_BINFO(BINFO, C) \
1596 (TREE_VIA_VIRTUAL (BINFO) \
a55583e9 1597 ? binfo_for_vbase (BINFO_TYPE (BINFO), C) \
3c9d6359
MM
1598 : BINFO)
1599
23381155 1600/* Number of direct baseclasses of NODE. */
8d08fdba 1601#define CLASSTYPE_N_BASECLASSES(NODE) \
99a6c6f4 1602 (BINFO_N_BASETYPES (TYPE_BINFO (NODE)))
8d08fdba 1603
2d926395
MM
1604/* These are the size and alignment of the type without its virtual
1605 base classes, for when we use this type as a base itself. */
8d08fdba 1606#define CLASSTYPE_SIZE(NODE) (TYPE_LANG_SPECIFIC(NODE)->size)
06ceef4e 1607#define CLASSTYPE_SIZE_UNIT(NODE) (TYPE_LANG_SPECIFIC(NODE)->size_unit)
8012c983 1608#define CLASSTYPE_ALIGN(NODE) (TYPE_LANG_SPECIFIC(NODE)->align)
11cf4d18 1609#define CLASSTYPE_USER_ALIGN(NODE) (TYPE_LANG_SPECIFIC(NODE)->user_align)
8d08fdba 1610
1b50716d
MM
1611/* The alignment of NODE, without its virtual bases, in bytes. */
1612#define CLASSTYPE_ALIGN_UNIT(NODE) \
1613 (CLASSTYPE_ALIGN (NODE) / BITS_PER_UNIT)
1614
8d08fdba
MS
1615/* A cons list of virtual functions which cannot be inherited by
1616 derived classes. When deriving from this type, the derived
1617 class must provide its own definition for each of these functions. */
fee7654e 1618#define CLASSTYPE_PURE_VIRTUALS(NODE) (TYPE_LANG_SPECIFIC(NODE)->pure_virtuals)
8d08fdba
MS
1619
1620/* Nonzero means that this aggr type has been `closed' by a semicolon. */
8012c983 1621#define CLASSTYPE_GOT_SEMICOLON(NODE) (TYPE_LANG_SPECIFIC (NODE)->got_semicolon)
8d08fdba
MS
1622
1623/* Nonzero means that the main virtual function table pointer needs to be
1624 set because base constructors have placed the wrong value there.
1625 If this is zero, it means that they placed the right value there,
1626 and there is no need to change it. */
8012c983 1627#define CLASSTYPE_NEEDS_VIRTUAL_REINIT(NODE) (TYPE_LANG_SPECIFIC(NODE)->needs_virtual_reinit)
8d08fdba
MS
1628
1629/* Nonzero means that if this type has virtual functions, that
1630 the virtual function table will be written out. */
8012c983 1631#define CLASSTYPE_VTABLE_NEEDS_WRITING(NODE) (TYPE_LANG_SPECIFIC(NODE)->vtable_needs_writing)
8d08fdba 1632
8d08fdba 1633/* Nonzero means that this type has an X() constructor. */
8012c983 1634#define TYPE_HAS_DEFAULT_CONSTRUCTOR(NODE) (TYPE_LANG_SPECIFIC(NODE)->has_default_ctor)
8d08fdba 1635
a7a7710d 1636/* Nonzero means that this type contains a mutable member */
8012c983 1637#define CLASSTYPE_HAS_MUTABLE(NODE) (TYPE_LANG_SPECIFIC(NODE)->has_mutable)
a7a7710d
NS
1638#define TYPE_HAS_MUTABLE_P(NODE) (cp_has_mutable_p (NODE))
1639
52fb2769 1640/* Nonzero means that this class type is a non-POD class. */
8012c983 1641#define CLASSTYPE_NON_POD_P(NODE) (TYPE_LANG_SPECIFIC (NODE)->non_pod_class)
52fb2769 1642
f9c528ea
MM
1643/* Nonzero if this class is "nearly empty", i.e., contains only a
1644 virtual function table pointer. */
1645#define CLASSTYPE_NEARLY_EMPTY_P(NODE) \
1646 (TYPE_LANG_SPECIFIC (NODE)->nearly_empty_p)
1647
aff08c18
JM
1648/* Nonzero means that this type is meant for communication via COM. */
1649#define CLASSTYPE_COM_INTERFACE(NODE) \
8012c983 1650 (TYPE_LANG_SPECIFIC(NODE)->com_interface)
aff08c18 1651
6a629cac 1652/* A list of class types of which this type is a friend. The
ea4e080b
MM
1653 TREE_VALUE is normally a TYPE, but will be a TEMPLATE_DECL in the
1654 case of a template friend. */
8d08fdba
MS
1655#define CLASSTYPE_FRIEND_CLASSES(NODE) (TYPE_LANG_SPECIFIC(NODE)->friend_classes)
1656
6a629cac
MM
1657/* A list of the classes which grant friendship to this class. */
1658#define CLASSTYPE_BEFRIENDING_CLASSES(NODE) \
1659 (TYPE_LANG_SPECIFIC (NODE)->befriending_classes)
1660
8d08fdba 1661/* Say whether this node was declared as a "class" or a "struct". */
8012c983 1662#define CLASSTYPE_DECLARED_CLASS(NODE) (TYPE_LANG_SPECIFIC(NODE)->declared_class)
8d08fdba
MS
1663
1664/* Nonzero if this class has const members which have no specified initialization. */
8012c983 1665#define CLASSTYPE_READONLY_FIELDS_NEED_INIT(NODE) (TYPE_LANG_SPECIFIC(NODE)->const_needs_init)
8d08fdba
MS
1666
1667/* Nonzero if this class has ref members which have no specified initialization. */
8012c983 1668#define CLASSTYPE_REF_FIELDS_NEED_INIT(NODE) (TYPE_LANG_SPECIFIC(NODE)->ref_needs_init)
8d08fdba
MS
1669
1670/* Nonzero if this class is included from a header file which employs
1671 `#pragma interface', and it is not included in its implementation file. */
8012c983 1672#define CLASSTYPE_INTERFACE_ONLY(NODE) (TYPE_LANG_SPECIFIC(NODE)->interface_only)
8d08fdba
MS
1673
1674/* Same as above, but for classes whose purpose we do not know. */
8012c983
MM
1675#define CLASSTYPE_INTERFACE_UNKNOWN(NODE) (TYPE_LANG_SPECIFIC(NODE)->interface_unknown)
1676#define CLASSTYPE_INTERFACE_KNOWN(NODE) (TYPE_LANG_SPECIFIC(NODE)->interface_unknown == 0)
1677#define SET_CLASSTYPE_INTERFACE_UNKNOWN_X(NODE,X) (TYPE_LANG_SPECIFIC(NODE)->interface_unknown = !!(X))
1678#define SET_CLASSTYPE_INTERFACE_UNKNOWN(NODE) (TYPE_LANG_SPECIFIC(NODE)->interface_unknown = 1)
1679#define SET_CLASSTYPE_INTERFACE_KNOWN(NODE) (TYPE_LANG_SPECIFIC(NODE)->interface_unknown = 0)
8d08fdba
MS
1680
1681/* Nonzero if a _DECL node requires us to output debug info for this class. */
8012c983 1682#define CLASSTYPE_DEBUG_REQUESTED(NODE) (TYPE_LANG_SPECIFIC(NODE)->debug_requested)
8d08fdba
MS
1683\f
1684/* Additional macros for inheritance information. */
1685
ca107ded
MM
1686/* The BINFO_INHERITANCE_CHAIN is used opposite to the description in
1687 gcc/tree.h. In particular if D is derived from B then the BINFO
1688 for B (in D) will have a BINFO_INHERITANCE_CHAIN pointing to
1689 D. In tree.h, this pointer is described as pointing in other
d6479fe7 1690 direction. There is a different BINFO for each path to a virtual
a55583e9 1691 base; BINFOs for virtual bases are not shared.
ca107ded 1692
d6479fe7
MM
1693 We use TREE_VIA_PROTECTED and TREE_VIA_PUBLIC, but private
1694 inheritance is indicated by the absence of the other two flags, not
c35cce41 1695 by TREE_VIA_PRIVATE, which is unused. */
ca107ded 1696
8d08fdba
MS
1697/* Nonzero means marked by DFS or BFS search, including searches
1698 by `get_binfo' and `get_base_distance'. */
1699#define BINFO_MARKED(NODE) (TREE_VIA_VIRTUAL(NODE)?CLASSTYPE_MARKED(BINFO_TYPE(NODE)):TREE_LANG_FLAG_0(NODE))
1700/* Macros needed because of C compilers that don't allow conditional
1701 expressions to be lvalues. Grr! */
1702#define SET_BINFO_MARKED(NODE) (TREE_VIA_VIRTUAL(NODE)?SET_CLASSTYPE_MARKED(BINFO_TYPE(NODE)):(TREE_LANG_FLAG_0(NODE)=1))
1703#define CLEAR_BINFO_MARKED(NODE) (TREE_VIA_VIRTUAL(NODE)?CLEAR_CLASSTYPE_MARKED(BINFO_TYPE(NODE)):(TREE_LANG_FLAG_0(NODE)=0))
1704
8d08fdba
MS
1705/* Nonzero means that this class is on a path leading to a new vtable. */
1706#define BINFO_VTABLE_PATH_MARKED(NODE) \
1707 (TREE_VIA_VIRTUAL(NODE)?CLASSTYPE_MARKED3(BINFO_TYPE(NODE)):TREE_LANG_FLAG_3(NODE))
1708#define SET_BINFO_VTABLE_PATH_MARKED(NODE) (TREE_VIA_VIRTUAL(NODE)?SET_CLASSTYPE_MARKED3(BINFO_TYPE(NODE)):(TREE_LANG_FLAG_3(NODE)=1))
1709#define CLEAR_BINFO_VTABLE_PATH_MARKED(NODE) (TREE_VIA_VIRTUAL(NODE)?CLEAR_CLASSTYPE_MARKED3(BINFO_TYPE(NODE)):(TREE_LANG_FLAG_3(NODE)=0))
1710
eaef69ce
MM
1711/* Nonzero means B (a BINFO) has its own vtable. Under the old ABI,
1712 secondary vtables are sometimes shared. Any copies will not have
1713 this flag set.
1714
1715 B is part of the hierarchy dominated by C. */
3c9d6359
MM
1716#define BINFO_NEW_VTABLE_MARKED(B, C) \
1717 (TREE_LANG_FLAG_4 (CANONICAL_BINFO (B, C)))
23656158
MM
1718
1719/* Any subobject that needs a new vtable must have a vptr and must not
1720 be a primary base (since it would then use the vtable from a
1721 derived class.) */
1722#define SET_BINFO_NEW_VTABLE_MARKED(B, C) \
1723 (BINFO_NEW_VTABLE_MARKED (B, C) = 1, \
1724 my_friendly_assert (!BINFO_PRIMARY_MARKED_P (B), 20000517), \
1725 my_friendly_assert (CLASSTYPE_VFIELDS (BINFO_TYPE (B)) != NULL_TREE, \
1726 20000517))
8d08fdba 1727
0ec57017
JM
1728/* Nonzero means this class has done dfs_pushdecls. */
1729#define BINFO_PUSHDECLS_MARKED(NODE) BINFO_VTABLE_PATH_MARKED (NODE)
1730#define SET_BINFO_PUSHDECLS_MARKED(NODE) SET_BINFO_VTABLE_PATH_MARKED (NODE)
1731#define CLEAR_BINFO_PUSHDECLS_MARKED(NODE) CLEAR_BINFO_VTABLE_PATH_MARKED (NODE)
72c4a2a6 1732
174eceea
MM
1733/* Nonzero if this BINFO is a primary base class.
1734
1735 In the TYPE_BINFO hierarchy, this flag is never set for a base
a55583e9
MM
1736 class of a non-primary virtual base. This flag is only valid for
1737 paths (given by BINFO_INHERITANCE_CHAIN) that really exist in the
1738 final object. */
911a71a7
MM
1739#define BINFO_PRIMARY_MARKED_P(NODE) \
1740 (BINFO_PRIMARY_BASE_OF (NODE) != NULL_TREE)
99a6c6f4 1741
3ec6bad3
MM
1742/* The index in the VTT where this subobject's sub-VTT can be found.
1743 NULL_TREE if there is no sub-VTT. */
1744#define BINFO_SUBVTT_INDEX(NODE) TREE_VEC_ELT ((NODE), 8)
1745
1746/* The index in the VTT where the vptr for this subobject can be
1747 found. NULL_TREE if there is no secondary vptr in the VTT. */
1748#define BINFO_VPTR_INDEX(NODE) TREE_VEC_ELT ((NODE), 9)
1749
911a71a7
MM
1750/* The binfo of which NODE is a primary base. (This is different from
1751 BINFO_INHERITANCE_CHAIN for virtual base because a virtual base is
1752 sometimes a primary base for a class for which it is not an
1753 immediate base.) */
1754#define BINFO_PRIMARY_BASE_OF(NODE) TREE_VEC_ELT ((NODE), 10)
1755
db3d8cde
MM
1756/* Nonzero if this binfo declares a virtual function which is
1757 overridden along a virtual path. */
1758#define BINFO_OVERRIDE_ALONG_VIRTUAL_PATH_P(NODE) TREE_LANG_FLAG_2 (NODE)
1759
911a71a7
MM
1760/* Nonzero if this binfo is an indirect primary base, i.e. a virtual
1761 base that is a primary base of some of other class in the
1762 hierarchy. */
1763#define BINFO_INDIRECT_PRIMARY_P(NODE) TREE_USED (NODE)
1764
72c4a2a6
JM
1765/* Used by various search routines. */
1766#define IDENTIFIER_MARKED(NODE) TREE_LANG_FLAG_0 (NODE)
8d08fdba
MS
1767\f
1768/* Accessor macros for the vfield slots in structures. */
1769
8026246f
MM
1770/* The virtual function pointer fields that this type contains. For a
1771 vfield defined just for this class, or from a primary base, the
1772 TREE_PURPOSE is NULL. Otherwise, the TREE_PURPOSE is the BINFO for
1773 the class containing the vfield. The TREE_VALUE is the class where
1774 the vfield was first defined. */
1775#define CLASSTYPE_VFIELDS(NODE) (TYPE_LANG_SPECIFIC(NODE)->vfields)
1776
8d08fdba
MS
1777/* Get the assoc info that caused this vfield to exist. */
1778#define VF_BINFO_VALUE(NODE) TREE_PURPOSE (NODE)
1779
1780/* Get that same information as a _TYPE. */
1781#define VF_BASETYPE_VALUE(NODE) TREE_VALUE (NODE)
1782
1783/* Get the value of the top-most type dominating the non-`normal' vfields. */
1784#define VF_DERIVED_VALUE(NODE) (VF_BINFO_VALUE (NODE) ? BINFO_TYPE (VF_BINFO_VALUE (NODE)) : NULL_TREE)
c0bbf652
MM
1785
1786/* The number of bytes by which to adjust the `this' pointer when
1787 calling this virtual function. */
5e19c053 1788#define BV_DELTA(NODE) (TREE_PURPOSE (NODE))
c0bbf652
MM
1789
1790/* If non-NULL, the vtable index at which to find the vcall offset
1791 when calling this virtual function. */
5e19c053 1792#define BV_VCALL_INDEX(NODE) (TREE_TYPE (NODE))
c0bbf652
MM
1793
1794/* The function to call. */
5e19c053
MM
1795#define BV_FN(NODE) (TREE_VALUE (NODE))
1796
31f8e4f3
MM
1797/* Nonzero if we should use a virtual thunk for this entry. */
1798#define BV_USE_VCALL_INDEX_P(NODE) \
1799 (TREE_LANG_FLAG_0 (NODE))
1800
1801/* Nonzero if we should generate this thunk when the vtable that
1802 references it is emitted, rather than with the final overrider. */
1803#define BV_GENERATE_THUNK_WITH_VTABLE_P(NODE) \
1804 (TREE_LANG_FLAG_1 (NODE))
1805
5e19c053 1806/* The most derived class. */
c0bbf652 1807
8d08fdba
MS
1808\f
1809/* Nonzero for TREE_LIST node means that this list of things
1810 is a list of parameters, as opposed to a list of expressions. */
1811#define TREE_PARMLIST(NODE) ((NODE)->common.unsigned_flag) /* overloaded! */
1812
1813/* For FUNCTION_TYPE or METHOD_TYPE, a list of the exceptions that
193306f7 1814 this type can raise. Each TREE_VALUE is a _TYPE. The TREE_VALUE
66a6250f
JM
1815 will be NULL_TREE to indicate a throw specification of `()', or
1816 no exceptions allowed. */
8d08fdba 1817#define TYPE_RAISES_EXCEPTIONS(NODE) TYPE_NONCOPIED_PARTS (NODE)
a9aedbc2 1818
7f477e81
NS
1819/* For FUNCTION_TYPE or METHOD_TYPE, return 1 iff it is declared `throw()'. */
1820#define TYPE_NOTHROW_P(NODE) \
1821 (TYPE_RAISES_EXCEPTIONS (NODE) \
1822 && TREE_VALUE (TYPE_RAISES_EXCEPTIONS (NODE)) == NULL_TREE)
1823
e92cc029 1824/* The binding level associated with the namespace. */
3ebc5c52
MM
1825#define NAMESPACE_LEVEL(NODE) \
1826 (DECL_LANG_SPECIFIC(NODE)->decl_flags.u.level)
8d08fdba 1827\f
6a629cac
MM
1828
1829/* If a DECL has DECL_LANG_SPECIFIC, it is either a lang_decl_flags or
b0d06515
MM
1830 a lang_decl (which has lang_decl_flags as its initial prefix).
1831 This macro is nonzero for tree nodes whose DECL_LANG_SPECIFIC is
1832 the full lang_decl, and not just lang_decl_flags. */
1833#define CAN_HAVE_FULL_LANG_DECL_P(NODE) \
1834 (!(TREE_CODE ((NODE)) == VAR_DECL \
1835 || TREE_CODE ((NODE)) == CONST_DECL \
1836 || TREE_CODE ((NODE)) == FIELD_DECL \
1837 || TREE_CODE ((NODE)) == USING_DECL))
6a629cac 1838
8d08fdba
MS
1839struct lang_decl_flags
1840{
e60a8c26 1841 ENUM_BITFIELD(languages) language : 8;
8d08fdba
MS
1842
1843 unsigned operator_attr : 1;
1844 unsigned constructor_attr : 1;
0d9eb3ba 1845 unsigned destructor_attr : 1;
8d08fdba
MS
1846 unsigned friend_attr : 1;
1847 unsigned static_function : 1;
fee7654e 1848 unsigned pure_virtual : 1;
454fa7a7 1849 unsigned has_in_charge_parm_p : 1;
721c3b42 1850 unsigned uninlinable : 1;
d60f72ae 1851
56e770bf 1852 unsigned deferred : 1;
a0a33927 1853 unsigned use_template : 2;
db5ae43f 1854 unsigned nonconverting : 1;
faae18ab
MS
1855 unsigned declared_inline : 1;
1856 unsigned not_really_extern : 1;
cdcb673e 1857 unsigned needs_final_overrider : 1;
6ba89f8e 1858 unsigned defined_in_class : 1;
721c3b42 1859
59026e79 1860 unsigned pending_inline_p : 1;
af3b4e59
MM
1861 unsigned global_ctor_p : 1;
1862 unsigned global_dtor_p : 1;
721c3b42 1863 unsigned tinfo_fn_p : 1;
596ea4e5 1864 unsigned assignment_operator_p : 1;
cc057ef3 1865 unsigned anticipated_p : 1;
31f8e4f3
MM
1866 unsigned generate_with_vtable_p : 1;
1867 unsigned dummy : 1;
8d08fdba 1868
8d08fdba 1869 tree context;
3ebc5c52 1870
3ebc5c52 1871 union {
7c355bca
ML
1872 /* In a FUNCTION_DECL, VAR_DECL, TYPE_DECL, or TEMPLATE_DECL, this
1873 is DECL_TEMPLATE_INFO. */
3ebc5c52
MM
1874 tree template_info;
1875
1876 /* In a NAMESPACE_DECL, this is NAMESPACE_LEVEL. */
1877 struct binding_level *level;
1878 } u;
af3b4e59
MM
1879
1880 union {
1881 /* This is DECL_ACCESS. */
1882 tree access;
1883
1884 /* In a namespace-scope FUNCTION_DECL, this is
1885 GLOBAL_INIT_PRIORITY. */
1886 int init_priority;
6462c441
MM
1887
1888 /* In a FUNCTION_DECL for which DECL_THUNK_P holds, this is
1889 THUNK_VCALL_OFFSET. */
31f8e4f3 1890 tree vcall_offset;
af3b4e59 1891 } u2;
8d08fdba
MS
1892};
1893
1894struct lang_decl
1895{
1896 struct lang_decl_flags decl_flags;
1897
6a629cac 1898 tree befriending_classes;
9188c363
MM
1899
1900 /* In a FUNCTION_DECL, this is DECL_SAVED_TREE. */
1901 tree saved_tree;
1902
db9b2174
MM
1903 /* In a FUNCTION_DECL, this is DECL_CLONED_FUNCTION. */
1904 tree cloned_function;
1905
f90cdf34
MT
1906 union
1907 {
1908 tree sorted_fields;
1909 struct pending_inline *pending_inline_info;
59026e79 1910 struct language_function *saved_language_function;
f90cdf34 1911 } u;
596ea4e5
AS
1912
1913 union {
1914 /* In an overloaded operator, this is the value of
1915 DECL_OVERLOADED_OPERATOR_P. */
1916 enum tree_code operator_code;
1917 /* In a maybe-in-charge constructor or destructor, this is
1918 DECL_VTT_PARM. */
1919 tree vtt_parm;
1920 } u2;
8d08fdba
MS
1921};
1922
d7e7759d
BC
1923/* An un-parsed default argument looks like an identifier. */
1924#define DEFARG_LENGTH(NODE) (DEFAULT_ARG_CHECK(NODE)->identifier.length)
1925#define DEFARG_POINTER(NODE) (DEFAULT_ARG_CHECK(NODE)->identifier.pointer)
1926
8d08fdba
MS
1927/* Non-zero if NODE is a _DECL with TREE_READONLY set. */
1928#define TREE_READONLY_DECL_P(NODE) \
fc611ce0 1929 (TREE_READONLY (NODE) && DECL_P (NODE))
8d08fdba 1930
d7e7759d
BC
1931/* DECL_NEEDED_P holds of a declaration when we need to emit its
1932 definition. This is true when the back-end tells us that
1933 the symbol has been referenced in the generated code. If, however,
1934 we are not generating code, then it is also true when a symbol has
1935 just been used somewhere, even if it's not really needed. We need
1936 anything that isn't comdat, but we don't know for sure whether or
1937 not something is comdat until end-of-file. */
1938#define DECL_NEEDED_P(DECL) \
3f954fc3 1939 ((at_eof && TREE_PUBLIC (DECL) && !DECL_COMDAT (DECL)) \
d7e7759d
BC
1940 || (TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME ((DECL)))) \
1941 || (flag_syntax_only && TREE_USED ((DECL))))
1942
cffa8729
MS
1943/* Non-zero iff DECL is memory-based. The DECL_RTL of
1944 certain const variables might be a CONST_INT, or a REG
1945 in some cases. We cannot use `memory_operand' as a test
1946 here because on most RISC machines, a variable's address
1947 is not, by itself, a legitimate address. */
1948#define DECL_IN_MEMORY_P(NODE) \
1949 (DECL_RTL (NODE) != NULL_RTX && GET_CODE (DECL_RTL (NODE)) == MEM)
1950
8d08fdba
MS
1951/* For FUNCTION_DECLs: return the language in which this decl
1952 was declared. */
1953#define DECL_LANGUAGE(NODE) (DECL_LANG_SPECIFIC(NODE)->decl_flags.language)
1954
1955/* For FUNCTION_DECLs: nonzero means that this function is a constructor. */
1956#define DECL_CONSTRUCTOR_P(NODE) (DECL_LANG_SPECIFIC(NODE)->decl_flags.constructor_attr)
aa45967f 1957
db9b2174
MM
1958/* Nonzero if NODE (a FUNCTION_DECL) is a constructor for a complete
1959 object. */
1960#define DECL_COMPLETE_CONSTRUCTOR_P(NODE) \
1961 (DECL_CONSTRUCTOR_P (NODE) \
1962 && DECL_NAME (NODE) == complete_ctor_identifier)
1963
1964/* Nonzero if NODE (a FUNCTION_DECL) is a constructor for a base
1965 object. */
1966#define DECL_BASE_CONSTRUCTOR_P(NODE) \
1967 (DECL_CONSTRUCTOR_P (NODE) \
1968 && DECL_NAME (NODE) == base_ctor_identifier)
1969
1970/* Nonzero if NODE (a FUNCTION_DECL) is a constructor, but not either the
1971 specialized in-charge constructor or the specialized not-in-charge
1972 constructor. */
1973#define DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P(NODE) \
1974 (DECL_CONSTRUCTOR_P (NODE) && !DECL_CLONED_FUNCTION_P (NODE))
1975
454fa7a7
MM
1976/* Nonzero if NODE (a FUNCTION_DECL) is a copy constructor. */
1977#define DECL_COPY_CONSTRUCTOR_P(NODE) \
1978 (DECL_CONSTRUCTOR_P (NODE) && copy_args_p (NODE))
1979
1f6e1acc 1980/* Nonzero if NODE is a destructor. */
aa45967f 1981#define DECL_DESTRUCTOR_P(NODE) \
0d9eb3ba 1982 (DECL_LANG_SPECIFIC (NODE)->decl_flags.destructor_attr)
aa45967f 1983
db9b2174
MM
1984/* Nonzero if NODE (a FUNCTION_DECL) is a destructor, but not the
1985 specialized in-charge constructor, in-charge deleting constructor,
1986 or the the base destructor. */
1987#define DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P(NODE) \
1988 (DECL_DESTRUCTOR_P (NODE) && !DECL_CLONED_FUNCTION_P (NODE))
1989
298d6f60
MM
1990/* Nonzero if NODE (a FUNCTION_DECL) is a destructor for a complete
1991 object. */
1992#define DECL_COMPLETE_DESTRUCTOR_P(NODE) \
1993 (DECL_DESTRUCTOR_P (NODE) \
1994 && DECL_NAME (NODE) == complete_dtor_identifier)
1995
1996/* Nonzero if NODE (a FUNCTION_DECL) is a destructor for a base
1997 object. */
1998#define DECL_BASE_DESTRUCTOR_P(NODE) \
1999 (DECL_DESTRUCTOR_P (NODE) \
2000 && DECL_NAME (NODE) == base_dtor_identifier)
2001
2002/* Nonzero if NODE (a FUNCTION_DECL) is a destructor for a complete
872f37f9 2003 object that deletes the object after it has been destroyed. */
298d6f60
MM
2004#define DECL_DELETING_DESTRUCTOR_P(NODE) \
2005 (DECL_DESTRUCTOR_P (NODE) \
2006 && DECL_NAME (NODE) == deleting_dtor_identifier)
2007
db9b2174
MM
2008/* Nonzero if NODE (a FUNCTION_DECL) is a cloned constructor or
2009 destructor. */
2010#define DECL_CLONED_FUNCTION_P(NODE) \
2011 (DECL_CLONED_FUNCTION (NODE) != NULL_TREE)
2012
2013/* If DECL_CLONED_FUNCTION_P holds, this is the function that was
2014 cloned. */
2015#define DECL_CLONED_FUNCTION(NODE) \
2016 (DECL_LANG_SPECIFIC (NODE)->cloned_function)
2017
3ec6bad3
MM
2018/* In a maybe-in-charge constructor or destructor, this is the VTT
2019 parameter. It's not actually on the DECL_ARGUMENTS list. */
2020#define DECL_VTT_PARM(NODE) \
596ea4e5 2021 (DECL_LANG_SPECIFIC (NODE)->u2.vtt_parm)
3ec6bad3
MM
2022
2023/* If there's a DECL_VTT_PARM, this is a magic variable that indicates
2024 whether or not the VTT parm should be used. In a subobject
2025 constructor, `true' is substituted for this value; in a complete
2026 object constructor, `false' is substituted instead. */
2027#define DECL_USE_VTT_PARM(NODE) \
2028 (TREE_CHAIN (DECL_VTT_PARM (NODE)))
2029
2030/* Non-zero if NODE is a FUNCTION_DECL for which a VTT parameter is
2031 required. */
2032#define DECL_NEEDS_VTT_PARM_P(NODE) \
2033 (TYPE_USES_VIRTUAL_BASECLASSES (DECL_CONTEXT (NODE)) \
2034 && (DECL_BASE_CONSTRUCTOR_P (NODE) \
2035 || DECL_BASE_DESTRUCTOR_P (NODE)))
2036
f71f87f9 2037/* Non-zero if NODE is a user-defined conversion operator. */
421844e7
MM
2038#define DECL_CONV_FN_P(NODE) \
2039 (IDENTIFIER_TYPENAME_P (DECL_NAME (NODE)))
711734a9 2040
596ea4e5
AS
2041/* Set the overloaded operator code for NODE to CODE. */
2042#define SET_OVERLOADED_OPERATOR_CODE(NODE, CODE) \
2043 (DECL_LANG_SPECIFIC (NODE)->u2.operator_code = (CODE))
2044
2045/* If NODE is an overloaded operator, then this returns the TREE_CODE
2046 associcated with the overloaded operator.
2047 DECL_ASSIGNMENT_OPERATOR_P must also be checked to determine
2048 whether or not NODE is an assignment operator. If NODE is not an
2049 overloaded operator, ERROR_MARK is returned. Since the numerical
2050 value of ERROR_MARK is zero, this macro can be used as a predicate
2051 to test whether or not NODE is an overloaded operator. */
2052#define DECL_OVERLOADED_OPERATOR_P(NODE) \
2053 (IDENTIFIER_OPNAME_P (DECL_NAME ((NODE))) \
2054 ? DECL_LANG_SPECIFIC (NODE)->u2.operator_code : ERROR_MARK)
2055
2056/* Non-zero if NODE is an assignment operator. */
2057#define DECL_ASSIGNMENT_OPERATOR_P(NODE) \
2058 (DECL_LANG_SPECIFIC (NODE)->decl_flags.assignment_operator_p)
f71f87f9 2059
454fa7a7
MM
2060/* For FUNCTION_DECLs: nonzero means that this function is a
2061 constructor or a destructor with an extra in-charge parameter to
2062 control whether or not virtual bases are constructed. */
2063#define DECL_HAS_IN_CHARGE_PARM_P(NODE) \
2064 (DECL_LANG_SPECIFIC (NODE)->decl_flags.has_in_charge_parm_p)
8d08fdba 2065
db1147b2
NS
2066/* Non-zero for a FUNCTION_DECL that declares a type-info function.
2067 This only happens in the old abi. */
0aafb128
MM
2068#define DECL_TINFO_FN_P(NODE) \
2069 (TREE_CODE (NODE) == FUNCTION_DECL \
2070 && DECL_ARTIFICIAL (NODE) \
721c3b42 2071 && DECL_LANG_SPECIFIC(NODE)->decl_flags.tinfo_fn_p)
0aafb128
MM
2072
2073/* Mark NODE as a type-info function. */
2074#define SET_DECL_TINFO_FN_P(NODE) \
721c3b42 2075 (DECL_LANG_SPECIFIC((NODE))->decl_flags.tinfo_fn_p = 1)
0aafb128 2076
834c6dff
MM
2077/* Nonzero if NODE is an overloaded `operator delete[]' function. */
2078#define DECL_ARRAY_DELETE_OPERATOR_P(NODE) \
596ea4e5 2079 (DECL_OVERLOADED_OPERATOR_P (NODE) == VEC_DELETE_EXPR)
834c6dff 2080
8d08fdba
MS
2081/* Nonzero for _DECL means that this decl appears in (or will appear
2082 in) as a member in a RECORD_TYPE or UNION_TYPE node. It is also for
2083 detecting circularity in case members are multiply defined. In the
2084 case of a VAR_DECL, it is also used to determine how program storage
2085 should be allocated. */
2086#define DECL_IN_AGGR_P(NODE) (DECL_LANG_FLAG_3(NODE))
2087
6ba89f8e
MM
2088/* Nonzero if the DECL was defined in the class definition itself,
2089 rather than outside the class. */
2090#define DECL_DEFINED_IN_CLASS_P(DECL) \
2091 (DECL_LANG_SPECIFIC (DECL)->decl_flags.defined_in_class)
2092
8d08fdba
MS
2093/* Nonzero for FUNCTION_DECL means that this decl is just a
2094 friend declaration, and should not be added to the list of
2095 member functions for this class. */
2096#define DECL_FRIEND_P(NODE) (DECL_LANG_SPECIFIC(NODE)->decl_flags.friend_attr)
2097
6a629cac
MM
2098/* A TREE_LIST of the types which have befriended this FUNCTION_DECL. */
2099#define DECL_BEFRIENDING_CLASSES(NODE) \
2100 (DECL_LANG_SPECIFIC(NODE)->befriending_classes)
2101
8d08fdba
MS
2102/* Nonzero for FUNCTION_DECL means that this decl is a static
2103 member function. */
2104#define DECL_STATIC_FUNCTION_P(NODE) (DECL_LANG_SPECIFIC(NODE)->decl_flags.static_function)
2105
700f8a87
MS
2106/* Nonzero for a class member means that it is shared between all objects
2107 of that class. */
2108#define SHARED_MEMBER_P(NODE) \
2109 (TREE_CODE (NODE) == VAR_DECL || TREE_CODE (NODE) == TYPE_DECL \
2110 || TREE_CODE (NODE) == CONST_DECL)
2111
8857f91e
MM
2112/* Nonzero for FUNCTION_DECL means that this decl is a non-static
2113 member function. */
2114#define DECL_NONSTATIC_MEMBER_FUNCTION_P(NODE) \
2115 (TREE_CODE (TREE_TYPE (NODE)) == METHOD_TYPE)
2116
8926095f
MS
2117/* Nonzero for FUNCTION_DECL means that this decl is a member function
2118 (static or non-static). */
2119#define DECL_FUNCTION_MEMBER_P(NODE) \
8857f91e 2120 (DECL_NONSTATIC_MEMBER_FUNCTION_P (NODE) || DECL_STATIC_FUNCTION_P (NODE))
8926095f 2121
8d08fdba
MS
2122/* Nonzero for FUNCTION_DECL means that this member function
2123 has `this' as const X *const. */
0d9eb3ba
MM
2124#define DECL_CONST_MEMFUNC_P(NODE) \
2125 (DECL_NONSTATIC_MEMBER_FUNCTION_P (NODE) \
2126 && CP_TYPE_CONST_P (TREE_TYPE (TREE_VALUE \
2127 (TYPE_ARG_TYPES (TREE_TYPE (NODE))))))
8d08fdba 2128
1f6e1acc
AS
2129/* Nonzero for FUNCTION_DECL means that this member function
2130 has `this' as volatile X *const. */
2131#define DECL_VOLATILE_MEMFUNC_P(NODE) \
2132 (DECL_NONSTATIC_MEMBER_FUNCTION_P (NODE) \
2133 && CP_TYPE_VOLATILE_P (TREE_TYPE (TREE_VALUE \
2134 (TYPE_ARG_TYPES (TREE_TYPE (NODE))))))
2135
d6479fe7
MM
2136/* Nonzero for a DECL means that this member is a non-static member. */
2137#define DECL_NONSTATIC_MEMBER_P(NODE) \
2138 ((TREE_CODE (NODE) == FUNCTION_DECL \
2139 && DECL_NONSTATIC_MEMBER_FUNCTION_P (NODE)) \
2140 || TREE_CODE (NODE) == FIELD_DECL)
2141
8d08fdba
MS
2142/* Nonzero for _DECL means that this member object type
2143 is mutable. */
721c3b42 2144#define DECL_MUTABLE_P(NODE) (DECL_LANG_FLAG_0 (NODE))
8d08fdba 2145
db5ae43f
MS
2146/* Nonzero for _DECL means that this constructor is a non-converting
2147 constructor. */
2148#define DECL_NONCONVERTING_P(NODE) (DECL_LANG_SPECIFIC(NODE)->decl_flags.nonconverting)
2149
fee7654e
MM
2150/* Nonzero for FUNCTION_DECL means that this member function is a pure
2151 virtual function. */
2152#define DECL_PURE_VIRTUAL_P(NODE) (DECL_LANG_SPECIFIC(NODE)->decl_flags.pure_virtual)
8d08fdba 2153
cdcb673e
MH
2154/* Nonzero for FUNCTION_DECL means that this member function
2155 must be overridden by derived classes. */
2156#define DECL_NEEDS_FINAL_OVERRIDER_P(NODE) (DECL_LANG_SPECIFIC(NODE)->decl_flags.needs_final_overrider)
2157
eb68cb58
MM
2158/* Nonzero if NODE is a thunk, rather than an ordinary function. */
2159#define DECL_THUNK_P(NODE) \
2160 (TREE_CODE (NODE) == FUNCTION_DECL \
2161 && DECL_LANG_FLAG_7 (NODE))
2162
2163/* Nonzero if NODE is a FUNCTION_DECL, but not a thunk. */
2164#define DECL_NON_THUNK_FUNCTION_P(NODE) \
2165 (TREE_CODE (NODE) == FUNCTION_DECL && !DECL_THUNK_P (NODE))
2166
2167/* Nonzero if NODE is `extern "C"'. */
2168#define DECL_EXTERN_C_P(NODE) \
2169 (DECL_LANGUAGE (NODE) == lang_c)
2170
2171/* Nonzero if NODE is an `extern "C"' function. */
2172#define DECL_EXTERN_C_FUNCTION_P(NODE) \
2173 (DECL_NON_THUNK_FUNCTION_P (NODE) && DECL_EXTERN_C_P (NODE))
2174
2175/* Set DECL_THUNK_P for node. */
2176#define SET_DECL_THUNK_P(NODE) \
2177 (DECL_LANG_FLAG_7 (NODE) = 1)
2178
f9817201
MM
2179/* Nonzero if this DECL is the __PRETTY_FUNCTION__ variable in a
2180 template function. */
2181#define DECL_PRETTY_FUNCTION_P(NODE) \
6dfbb909 2182 (TREE_LANG_FLAG_0 (NODE))
f9817201 2183
8926095f 2184/* The _TYPE context in which this _DECL appears. This field holds the
4f1c5b7d
MM
2185 class where a virtual function instance is actually defined. */
2186#define DECL_CLASS_CONTEXT(NODE) \
2187 (DECL_CLASS_SCOPE_P (NODE) ? DECL_CONTEXT (NODE) : NULL_TREE)
2188
2189/* For a non-member friend function, the class (if any) in which this
2190 friend was defined. For example, given:
2191
2192 struct S { friend void f (); };
2193
2194 the DECL_FRIEND_CONTEXT for `f' will be `S'. */
2195#define DECL_FRIEND_CONTEXT(NODE) \
2196 ((DECL_FRIEND_P (NODE) && !DECL_FUNCTION_MEMBER_P (NODE)) \
2197 ? DECL_LANG_SPECIFIC (NODE)->decl_flags.context \
2198 : NULL_TREE)
2199
2200/* Set the DECL_FRIEND_CONTEXT for NODE to CONTEXT. */
2201#define SET_DECL_FRIEND_CONTEXT(NODE, CONTEXT) \
2202 (DECL_LANG_SPECIFIC (NODE)->decl_flags.context = (CONTEXT))
cb0dbb9a
JM
2203
2204/* NULL_TREE in DECL_CONTEXT represents the global namespace. */
2205#define CP_DECL_CONTEXT(NODE) \
2206 (DECL_CONTEXT (NODE) ? DECL_CONTEXT (NODE) : global_namespace)
2207#define FROB_CONTEXT(NODE) ((NODE) == global_namespace ? NULL_TREE : (NODE))
8d08fdba 2208
3927874d
JM
2209/* For a virtual function, the base where we find its vtable entry.
2210 For a non-virtual function, the base where it is defined. */
4f1c5b7d
MM
2211#define DECL_VIRTUAL_CONTEXT(NODE) \
2212 (DECL_LANG_SPECIFIC (NODE)->decl_flags.context)
3927874d 2213
42c7b807 2214/* 1 iff NODE has namespace scope, including the global namespace. */
4f71f630
MM
2215#define DECL_NAMESPACE_SCOPE_P(NODE) \
2216 (!DECL_TEMPLATE_PARM_P (NODE) \
2217 && TREE_CODE (CP_DECL_CONTEXT (NODE)) == NAMESPACE_DECL)
42c7b807
JM
2218
2219/* 1 iff NODE is a class member. */
6eb3bb27 2220#define DECL_CLASS_SCOPE_P(NODE) \
4f1c5b7d 2221 (DECL_CONTEXT (NODE) && TYPE_P (DECL_CONTEXT (NODE)))
42c7b807 2222
2642b9bf
JM
2223/* 1 iff NODE is function-local. */
2224#define DECL_FUNCTION_SCOPE_P(NODE) \
2225 (DECL_CONTEXT (NODE) \
2226 && TREE_CODE (DECL_CONTEXT (NODE)) == FUNCTION_DECL)
1f6e1acc 2227
2c73f9f5 2228/* For a NAMESPACE_DECL: the list of using namespace directives
30394414 2229 The PURPOSE is the used namespace, the value is the namespace
2c73f9f5 2230 that is the common ancestor. */
da8a66fc 2231#define DECL_NAMESPACE_USING(NODE) DECL_VINDEX (NAMESPACE_DECL_CHECK (NODE))
30394414
JM
2232
2233/* In a NAMESPACE_DECL, the DECL_INITIAL is used to record all users
2c73f9f5 2234 of a namespace, to record the transitive closure of using namespace. */
da8a66fc 2235#define DECL_NAMESPACE_USERS(NODE) DECL_INITIAL (NAMESPACE_DECL_CHECK (NODE))
30394414 2236
3e3f722c
ML
2237/* In a NAMESPACE_DECL, points to the original namespace if this is
2238 a namespace alias. */
da8a66fc
ML
2239#define DECL_NAMESPACE_ALIAS(NODE) \
2240 DECL_ABSTRACT_ORIGIN (NAMESPACE_DECL_CHECK (NODE))
3e3f722c
ML
2241#define ORIGINAL_NAMESPACE(NODE) \
2242 (DECL_NAMESPACE_ALIAS (NODE) ? DECL_NAMESPACE_ALIAS (NODE) : (NODE))
2243
1f6e1acc
AS
2244/* Non-zero if NODE is the std namespace. */
2245#define DECL_NAMESPACE_STD_P(NODE) \
2246 (TREE_CODE (NODE) == NAMESPACE_DECL \
2247 && CP_DECL_CONTEXT (NODE) == global_namespace \
2248 && DECL_NAME (NODE) == std_identifier)
2249
0aafb128
MM
2250/* In a non-local VAR_DECL with static storage duration, this is the
2251 initialization priority. If this value is zero, the NODE will be
2252 initialized at the DEFAULT_INIT_PRIORITY. */
9df2c88c 2253#define DECL_INIT_PRIORITY(NODE) (VAR_DECL_CHECK (NODE)->decl.u2.i)
0aafb128 2254
9df2c88c 2255/* In a TREE_LIST concatenating using directives, indicate indirect
30394414 2256 directives */
da8a66fc 2257#define TREE_INDIRECT_USING(NODE) (TREE_LIST_CHECK (NODE)->common.lang_flag_0)
8d08fdba 2258
d2ad151f 2259/* In a VAR_DECL for a variable declared in a for statement,
e92cc029 2260 this is the shadowed (local) variable. */
17aec3eb 2261#define DECL_SHADOWED_FOR_VAR(NODE) DECL_RESULT_FLD(VAR_DECL_CHECK (NODE))
d2ad151f 2262
59026e79
MM
2263/* In a FUNCTION_DECL, this is nonzero if this function was defined in
2264 the class definition. We have saved away the text of the function,
2265 but have not yet processed it. */
2266#define DECL_PENDING_INLINE_P(NODE) \
f5e6b7bc 2267 (DECL_LANG_SPECIFIC (NODE)->decl_flags.pending_inline_p)
59026e79
MM
2268
2269/* If DECL_PENDING_INLINE_P holds, this is the saved text of the
2270 function. */
2271#define DECL_PENDING_INLINE_INFO(NODE) \
2272 (DECL_LANG_SPECIFIC(NODE)->u.pending_inline_info)
f90cdf34
MT
2273
2274/* For a TYPE_DECL: if this function has many fields, we'll sort them
2275 and put them into a TREE_VEC. */
da8a66fc
ML
2276#define DECL_SORTED_FIELDS(NODE) \
2277 (DECL_LANG_SPECIFIC (TYPE_DECL_CHECK (NODE))->u.sorted_fields)
8d08fdba 2278
56e770bf
MM
2279/* True if on the deferred_fns (see decl2.c) list. */
2280#define DECL_DEFERRED_FN(DECL) \
2281 (DECL_LANG_SPECIFIC(DECL)->decl_flags.deferred)
8926095f 2282
7c355bca
ML
2283/* For a VAR_DECL, FUNCTION_DECL, TYPE_DECL or TEMPLATE_DECL:
2284 template-specific information. */
3ebc5c52 2285#define DECL_TEMPLATE_INFO(NODE) \
7c355bca 2286 (DECL_LANG_SPECIFIC(VAR_TEMPL_TYPE_OR_FUNCTION_DECL_CHECK (NODE))->decl_flags.u.template_info)
ed44da02
MM
2287
2288/* Template information for a RECORD_TYPE or UNION_TYPE. */
da8a66fc
ML
2289#define CLASSTYPE_TEMPLATE_INFO(NODE) \
2290 (TYPE_LANG_SPECIFIC(RECORD_OR_UNION_TYPE_CHECK (NODE))->template_info)
ed44da02
MM
2291
2292/* Template information for an ENUMERAL_TYPE. Although an enumeration may
2293 not be a primary template, it may be declared within the scope of a
2294 primary template and the enumeration constants may depend on
2295 non-type template parameters. */
da8a66fc 2296#define ENUM_TEMPLATE_INFO(NODE) (TYPE_BINFO (ENUMERAL_TYPE_CHECK (NODE)))
ed44da02 2297
7ddedda4
MM
2298/* Template information for a template template parameter. */
2299#define TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO(NODE) (TYPE_BINFO (NODE))
2300
ed44da02 2301/* Template information for an ENUMERAL_, RECORD_, or UNION_TYPE. */
7ddedda4
MM
2302#define TYPE_TEMPLATE_INFO(NODE) \
2303 (TREE_CODE (NODE) == ENUMERAL_TYPE \
9076e292 2304 ? ENUM_TEMPLATE_INFO (NODE) : \
7ddedda4 2305 (TREE_CODE (NODE) == TEMPLATE_TEMPLATE_PARM \
9076e292
JM
2306 ? TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (NODE) : \
2307 (TYPE_LANG_SPECIFIC (NODE) \
2308 ? CLASSTYPE_TEMPLATE_INFO (NODE) \
2309 : NULL_TREE)))
ed44da02
MM
2310
2311/* Set the template information for an ENUMERAL_, RECORD_, or
2312 UNION_TYPE to VAL. */
2313#define SET_TYPE_TEMPLATE_INFO(NODE, VAL) \
2314 (TREE_CODE (NODE) == ENUMERAL_TYPE \
2315 ? (ENUM_TEMPLATE_INFO (NODE) = VAL) \
2316 : (CLASSTYPE_TEMPLATE_INFO (NODE) = VAL))
2317
5566b478
MS
2318#define TI_TEMPLATE(NODE) (TREE_PURPOSE (NODE))
2319#define TI_ARGS(NODE) (TREE_VALUE (NODE))
824b9a4c 2320#define TI_PENDING_TEMPLATE_FLAG(NODE) TREE_LANG_FLAG_1 (NODE)
ed44da02 2321
b5ac18ea
MM
2322/* We use TREE_VECs to hold template arguments. If there is only one
2323 level of template arguments, then the TREE_VEC contains the
2324 arguments directly. If there is more than one level of template
2325 arguments, then each entry in the TREE_VEC is itself a TREE_VEC,
2326 containing the template arguments for a single level. The first
2327 entry in the outer TREE_VEC is the outermost level of template
2328 parameters; the last is the innermost.
2329
2330 It is incorrect to ever form a template argument vector containing
2331 only one level of arguments, but which is a TREE_VEC containing as
2332 its only entry the TREE_VEC for that level. */
2333
2334/* Non-zero if the template arguments is actually a vector of vectors,
2335 rather than just a vector. */
2336#define TMPL_ARGS_HAVE_MULTIPLE_LEVELS(NODE) \
2337 (NODE != NULL_TREE \
2338 && TREE_CODE (NODE) == TREE_VEC \
2339 && TREE_VEC_LENGTH (NODE) > 0 \
2340 && TREE_VEC_ELT (NODE, 0) != NULL_TREE \
2341 && TREE_CODE (TREE_VEC_ELT (NODE, 0)) == TREE_VEC)
2342
2343/* The depth of a template argument vector. When called directly by
2344 the parser, we use a TREE_LIST rather than a TREE_VEC to represent
2345 template arguments. In fact, we may even see NULL_TREE if there
2346 are no template arguments. In both of those cases, there is only
2347 one level of template arguments. */
2348#define TMPL_ARGS_DEPTH(NODE) \
2349 (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (NODE) ? TREE_VEC_LENGTH (NODE) : 1)
2350
f9a7ae04
MM
2351/* The LEVELth level of the template ARGS. The outermost level of of
2352 args is level 1, not level 0. */
b5ac18ea
MM
2353#define TMPL_ARGS_LEVEL(ARGS, LEVEL) \
2354 (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (ARGS) \
2355 ? TREE_VEC_ELT ((ARGS), (LEVEL) - 1) : ARGS)
2356
2357/* Set the LEVELth level of the template ARGS to VAL. This macro does
2358 not work with single-level argument vectors. */
2359#define SET_TMPL_ARGS_LEVEL(ARGS, LEVEL, VAL) \
2360 (TREE_VEC_ELT ((ARGS), (LEVEL) - 1) = (VAL))
2361
2362/* Accesses the IDXth parameter in the LEVELth level of the ARGS. */
2363#define TMPL_ARG(ARGS, LEVEL, IDX) \
2364 (TREE_VEC_ELT (TMPL_ARGS_LEVEL (ARGS, LEVEL), IDX))
2365
2366/* Set the IDXth element in the LEVELth level of ARGS to VAL. This
2367 macro does not work with single-level argument vectors. */
2368#define SET_TMPL_ARG(ARGS, LEVEL, IDX, VAL) \
2369 (TREE_VEC_ELT (TREE_VEC_ELT ((ARGS), (LEVEL) - 1), (IDX)) = (VAL))
2370
2371/* Given a single level of template arguments in NODE, return the
2372 number of arguments. */
2373#define NUM_TMPL_ARGS(NODE) \
2374 ((NODE) == NULL_TREE ? 0 \
2375 : (TREE_CODE (NODE) == TREE_VEC \
2376 ? TREE_VEC_LENGTH (NODE) : list_length (NODE)))
2377
f9a7ae04
MM
2378/* Returns the innermost level of template arguments in ARGS. */
2379#define INNERMOST_TEMPLATE_ARGS(NODE) \
2380 (get_innermost_template_args ((NODE), 1))
2381
b5ac18ea
MM
2382/* The number of levels of template parameters given by NODE. */
2383#define TMPL_PARMS_DEPTH(NODE) \
2384 (TREE_INT_CST_HIGH (TREE_PURPOSE (NODE)))
2385
36a117a5
MM
2386/* The TEMPLATE_DECL instantiated or specialized by NODE. This
2387 TEMPLATE_DECL will be the immediate parent, not the most general
2388 template. For example, in:
2389
2390 template <class T> struct S { template <class U> void f(U); }
2391
2392 the FUNCTION_DECL for S<int>::f<double> will have, as its
2393 DECL_TI_TEMPLATE, `template <class U> S<int>::f<U>'.
2394
2395 As a special case, for a member friend template of a template
2396 class, this value will not be a TEMPLATE_DECL, but rather a
672476cb
MM
2397 LOOKUP_EXPR or IDENTIFIER_NODE indicating the name of the template
2398 and any explicit template arguments provided. For example, in:
36a117a5
MM
2399
2400 template <class T> struct S { friend void f<int>(int, double); }
2401
2402 the DECL_TI_TEMPLATE will be a LOOKUP_EXPR for `f' and the
2403 DECL_TI_ARGS will be {int}. */
5566b478 2404#define DECL_TI_TEMPLATE(NODE) TI_TEMPLATE (DECL_TEMPLATE_INFO (NODE))
ed44da02 2405
36a117a5
MM
2406/* The template arguments used to obtain this decl from the most
2407 general form of DECL_TI_TEMPLATE. For the example given for
2408 DECL_TI_TEMPLATE, the DECL_TI_ARGS will be {int, double}. These
2409 are always the full set of arguments required to instantiate this
2410 declaration from the most general template specialized here. */
5566b478
MS
2411#define DECL_TI_ARGS(NODE) TI_ARGS (DECL_TEMPLATE_INFO (NODE))
2412#define CLASSTYPE_TI_TEMPLATE(NODE) TI_TEMPLATE (CLASSTYPE_TEMPLATE_INFO (NODE))
2413#define CLASSTYPE_TI_ARGS(NODE) TI_ARGS (CLASSTYPE_TEMPLATE_INFO (NODE))
ed44da02
MM
2414#define ENUM_TI_TEMPLATE(NODE) \
2415 TI_TEMPLATE (ENUM_TEMPLATE_INFO (NODE))
2416#define ENUM_TI_ARGS(NODE) \
2417 TI_ARGS (ENUM_TEMPLATE_INFO (NODE))
2418
2419/* Like DECL_TI_TEMPLATE, but for an ENUMERAL_, RECORD_, or UNION_TYPE. */
2420#define TYPE_TI_TEMPLATE(NODE) \
2421 (TI_TEMPLATE (TYPE_TEMPLATE_INFO (NODE)))
2422
59026e79 2423/* Like DECL_TI_ARGS, but for an ENUMERAL_, RECORD_, or UNION_TYPE. */
ed44da02
MM
2424#define TYPE_TI_ARGS(NODE) \
2425 (TI_ARGS (TYPE_TEMPLATE_INFO (NODE)))
2426
98c1c668 2427#define INNERMOST_TEMPLATE_PARMS(NODE) TREE_VALUE(NODE)
5566b478 2428
6ba89f8e
MM
2429/* Nonzero if the NODE corresponds to the template parameters for a
2430 member template, whose inline definition is being processed after
2431 the class definition is complete. */
cae40af6
JM
2432#define TEMPLATE_PARMS_FOR_INLINE(NODE) TREE_LANG_FLAG_1 (NODE)
2433
59026e79
MM
2434/* In a FUNCTION_DECL, the saved representation of the body of the
2435 entire function. Usually a COMPOUND_STMT, but this may also be a
2436 RETURN_INIT, CTOR_INITIALIZER, or TRY_BLOCK. */
6eabb241 2437#define DECL_SAVED_TREE(NODE) \
da8a66fc 2438 (DECL_LANG_SPECIFIC (FUNCTION_DECL_CHECK (NODE))->saved_tree)
3ebc5c52 2439
59026e79
MM
2440/* In a FUNCTION_DECL, the saved language-specific per-function data. */
2441#define DECL_SAVED_FUNCTION_DATA(NODE) \
da8a66fc 2442 (DECL_LANG_SPECIFIC (FUNCTION_DECL_CHECK (NODE))->u.saved_language_function)
59026e79 2443
5566b478
MS
2444#define NEW_EXPR_USE_GLOBAL(NODE) TREE_LANG_FLAG_0 (NODE)
2445#define DELETE_EXPR_USE_GLOBAL(NODE) TREE_LANG_FLAG_0 (NODE)
2446#define DELETE_EXPR_USE_VEC(NODE) TREE_LANG_FLAG_1 (NODE)
2447#define LOOKUP_EXPR_GLOBAL(NODE) TREE_LANG_FLAG_0 (NODE)
8d08fdba 2448
e1376b00
MM
2449/* Nonzero if this AGGR_INIT_EXPR provides for initialization via a
2450 constructor call, rather than an ordinary function call. */
da8a66fc
ML
2451#define AGGR_INIT_VIA_CTOR_P(NODE) \
2452 TREE_LANG_FLAG_0 (AGGR_INIT_EXPR_CHECK (NODE))
e1376b00 2453
a7e4cfa0
MM
2454/* Nonzero if this statement should be considered a full-expression. */
2455#define STMT_IS_FULL_EXPR_P(NODE) TREE_LANG_FLAG_1 ((NODE))
2456
6757edfe
MM
2457/* The TYPE_MAIN_DECL for a class template type is a TYPE_DECL, not a
2458 TEMPLATE_DECL. This macro determines whether or not a given class
2459 type is really a template type, as opposed to an instantiation or
2460 specialization of one. */
2461#define CLASSTYPE_IS_TEMPLATE(NODE) \
2462 (CLASSTYPE_TEMPLATE_INFO (NODE) \
2463 && !CLASSTYPE_USE_TEMPLATE (NODE) \
2464 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (NODE)))
2465
45869a6c
MM
2466/* The name used by the user to name the typename type. Typically,
2467 this is an IDENTIFIER_NODE, and the same as the DECL_NAME on the
2468 corresponding TYPE_DECL. However, this may also be a
2469 TEMPLATE_ID_EXPR if we had something like `typename X::Y<T>'. */
7ddedda4 2470#define TYPENAME_TYPE_FULLNAME(NODE) TYPE_BINFO (NODE)
ca40b399 2471
f181d4ae
MM
2472/* Nonzero if NODE is an implicit typename. */
2473#define IMPLICIT_TYPENAME_P(NODE) \
2474 (TREE_CODE (NODE) == TYPENAME_TYPE && TREE_TYPE (NODE))
2475
83233dca
MM
2476/* Nonzero if NODE is a TYPE_DECL that should not be visible because
2477 it is from a dependent base class. */
2478#define IMPLICIT_TYPENAME_TYPE_DECL_P(NODE) \
2479 (TREE_CODE (NODE) == TYPE_DECL \
2480 && DECL_ARTIFICIAL (NODE) \
2481 && IMPLICIT_TYPENAME_P (TREE_TYPE (NODE)))
2482
cfdd0551 2483/* Nonzero in INTEGER_CST means that this int is negative by dint of
8d08fdba 2484 using a twos-complement negated operand. */
da8a66fc 2485#define TREE_NEGATED_INT(NODE) TREE_LANG_FLAG_0 (INTEGER_CST_CHECK (NODE))
8d08fdba 2486
4c6b7393
MM
2487/* Nonzero in any kind of _TYPE where conversions to base-classes may
2488 involve pointer arithmetic. If this is zero, then converting to
2489 a base-class never requires changing the value of the pointer. */
2490#define TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P(NODE) (TREE_LANG_FLAG_1 (NODE))
8d08fdba 2491
4c6b7393 2492/* [class.virtual]
8d08fdba 2493
4c6b7393
MM
2494 A class that declares or inherits a virtual function is called a
2495 polymorphic class. */
2496#define TYPE_POLYMORPHIC_P(NODE) (TREE_LANG_FLAG_2 (NODE))
8d08fdba 2497
bbd15aac
MM
2498/* Nonzero if this class has a virtual function table pointer. */
2499#define TYPE_CONTAINS_VPTR_P(NODE) \
2500 (TYPE_POLYMORPHIC_P (NODE) \
2501 || (vbase_offsets_in_vtable_p () \
2502 && TYPE_USES_VIRTUAL_BASECLASSES (NODE)))
2503
d2ad151f
PB
2504extern int flag_new_for_scope;
2505
2506/* This flag is true of a local VAR_DECL if it was declared in a for
e92cc029 2507 statement, but we are no longer in the scope of the for. */
da8a66fc 2508#define DECL_DEAD_FOR_LOCAL(NODE) DECL_LANG_FLAG_7 (VAR_DECL_CHECK (NODE))
d2ad151f
PB
2509
2510/* This flag is set on a VAR_DECL that is a DECL_DEAD_FOR_LOCAL
2511 if we already emitted a warning about using it. */
da8a66fc 2512#define DECL_ERROR_REPORTED(NODE) DECL_LANG_FLAG_0 (VAR_DECL_CHECK (NODE))
d2ad151f 2513
cd9f6678
MM
2514/* Nonzero if NODE is a FUNCTION_DECL (for a function with global
2515 scope) declared in a local scope. */
2516#define DECL_LOCAL_FUNCTION_P(NODE) \
2517 DECL_LANG_FLAG_0 (FUNCTION_DECL_CHECK (NODE))
935d1834
ZW
2518
2519/* Nonzero if NODE is a FUNCTION_DECL for a built-in function, and we have
2520 not yet seen a prototype for that function. */
cc057ef3
MM
2521#define DECL_ANTICIPATED(NODE) \
2522 (DECL_LANG_SPECIFIC (FUNCTION_DECL_CHECK (NODE))->decl_flags.anticipated_p)
cd9f6678 2523
8d08fdba
MS
2524/* Record whether a typedef for type `int' was actually `signed int'. */
2525#define C_TYPEDEF_EXPLICITLY_SIGNED(exp) DECL_LANG_FLAG_1 ((exp))
2526
162bc98d
JM
2527/* In a FIELD_DECL, nonzero if the decl was originally a bitfield. */
2528#define DECL_C_BIT_FIELD(NODE) \
721c3b42 2529 (DECL_LANG_FLAG_1 (FIELD_DECL_CHECK (NODE)) == 1)
162bc98d 2530#define SET_DECL_C_BIT_FIELD(NODE) \
721c3b42 2531 (DECL_LANG_FLAG_1 (FIELD_DECL_CHECK (NODE)) = 1)
cd8ed629 2532#define CLEAR_DECL_C_BIT_FIELD(NODE) \
721c3b42 2533 (DECL_LANG_FLAG_1 (FIELD_DECL_CHECK (NODE)) = 0)
162bc98d 2534
46e8c075
MM
2535/* In a FUNCTION_DECL, nonzero if the function cannot be inlined. */
2536#define DECL_UNINLINABLE(NODE) \
721c3b42 2537 (DECL_LANG_SPECIFIC (NODE)->decl_flags.uninlinable)
46e8c075 2538
2986ae00
MS
2539#define INTEGRAL_CODE_P(CODE) \
2540 (CODE == INTEGER_TYPE || CODE == ENUMERAL_TYPE || CODE == BOOLEAN_TYPE)
a7a64a77
MM
2541
2542/* [basic.fundamental]
2543
2544 Types bool, char, wchar_t, and the signed and unsigned integer types
2545 are collectively called integral types.
2546
2547 Note that INTEGRAL_TYPE_P, as defined in tree.h, allows enumeration
2548 types as well, which is incorrect in C++. */
2549#define CP_INTEGRAL_TYPE_P(TYPE) \
2550 (TREE_CODE ((TYPE)) == BOOLEAN_TYPE \
2551 || TREE_CODE ((TYPE)) == INTEGER_TYPE)
2552
2553/* [basic.fundamental]
2554
2555 Integral and floating types are collectively called arithmetic
2556 types. */
2557#define ARITHMETIC_TYPE_P(TYPE) \
2558 (CP_INTEGRAL_TYPE_P (TYPE) || TREE_CODE (TYPE) == REAL_TYPE)
2986ae00 2559
8d08fdba
MS
2560/* Mark which labels are explicitly declared.
2561 These may be shadowed, and may be referenced from nested functions. */
2562#define C_DECLARED_LABEL_FLAG(label) TREE_LANG_FLAG_1 (label)
2563
8d08fdba
MS
2564/* Nonzero for _TYPE means that the _TYPE defines
2565 at least one constructor. */
2566#define TYPE_HAS_CONSTRUCTOR(NODE) (TYPE_LANG_FLAG_1(NODE))
2567
2568/* When appearing in an INDIRECT_REF, it means that the tree structure
2569 underneath is actually a call to a constructor. This is needed
2570 when the constructor must initialize local storage (which can
2571 be automatically destroyed), rather than allowing it to allocate
2572 space from the heap.
2573
2574 When appearing in a SAVE_EXPR, it means that underneath
2575 is a call to a constructor.
2576
2577 When appearing in a CONSTRUCTOR, it means that it was
2578 a GNU C constructor expression.
2579
2580 When appearing in a FIELD_DECL, it means that this field
2581 has been duly initialized in its constructor. */
2582#define TREE_HAS_CONSTRUCTOR(NODE) (TREE_LANG_FLAG_4(NODE))
2583
8452b1d3
JM
2584#define EMPTY_CONSTRUCTOR_P(NODE) (TREE_CODE (NODE) == CONSTRUCTOR \
2585 && CONSTRUCTOR_ELTS (NODE) == NULL_TREE \
2586 && ! TREE_HAS_CONSTRUCTOR (NODE))
a3203465 2587
eb66be0e 2588#if 0
8d08fdba
MS
2589/* Indicates that a NON_LVALUE_EXPR came from a C++ reference.
2590 Used to generate more helpful error message in case somebody
2591 tries to take its address. */
2592#define TREE_REFERENCE_EXPR(NODE) (TREE_LANG_FLAG_3(NODE))
eb66be0e 2593#endif
8d08fdba
MS
2594
2595/* Nonzero for _TYPE means that the _TYPE defines a destructor. */
2596#define TYPE_HAS_DESTRUCTOR(NODE) (TYPE_LANG_FLAG_2(NODE))
2597
f30432d7
MS
2598/* Nonzero means that an object of this type can not be initialized using
2599 an initializer list. */
2600#define CLASSTYPE_NON_AGGREGATE(NODE) \
8012c983 2601 (TYPE_LANG_SPECIFIC (NODE)->non_aggregate)
f30432d7
MS
2602#define TYPE_NON_AGGREGATE_CLASS(NODE) \
2603 (IS_AGGR_TYPE (NODE) && CLASSTYPE_NON_AGGREGATE (NODE))
2604
8d08fdba 2605/* Nonzero if there is a user-defined X::op=(x&) for this class. */
8012c983
MM
2606#define TYPE_HAS_REAL_ASSIGN_REF(NODE) (TYPE_LANG_SPECIFIC(NODE)->has_real_assign_ref)
2607#define TYPE_HAS_COMPLEX_ASSIGN_REF(NODE) (TYPE_LANG_SPECIFIC(NODE)->has_complex_assign_ref)
2608#define TYPE_HAS_ABSTRACT_ASSIGN_REF(NODE) (TYPE_LANG_SPECIFIC(NODE)->has_abstract_assign_ref)
2609#define TYPE_HAS_COMPLEX_INIT_REF(NODE) (TYPE_LANG_SPECIFIC(NODE)->has_complex_init_ref)
8d08fdba 2610
834c6dff
MM
2611/* Nonzero if TYPE has a trivial destructor. From [class.dtor]:
2612
2613 A destructor is trivial if it is an implicitly declared
2614 destructor and if:
2615
2616 - all of the direct base classes of its class have trivial
2617 destructors,
2618
2619 - for all of the non-static data members of its class that are
2620 of class type (or array thereof), each such class has a
2621 trivial destructor. */
2622#define TYPE_HAS_TRIVIAL_DESTRUCTOR(NODE) \
2623 (!TYPE_HAS_NONTRIVIAL_DESTRUCTOR (NODE))
2624
2625/* Nonzero for _TYPE node means that this type does not have a trivial
2626 destructor. Therefore, destroying an object of this type will
2627 involve a call to a destructor. This can apply to objects of
2628 ARRAY_TYPE is the type of the elements needs a destructor. */
2629#define TYPE_HAS_NONTRIVIAL_DESTRUCTOR(NODE) \
2630 (TYPE_LANG_FLAG_4(NODE))
8d08fdba 2631
e8abc66f
MS
2632/* Nonzero for class type means that initialization of this type can use
2633 a bitwise copy. */
2634#define TYPE_HAS_TRIVIAL_INIT_REF(NODE) \
2635 (TYPE_HAS_INIT_REF (NODE) && ! TYPE_HAS_COMPLEX_INIT_REF (NODE))
2636
2637/* Nonzero for class type means that assignment of this type can use
2638 a bitwise copy. */
2639#define TYPE_HAS_TRIVIAL_ASSIGN_REF(NODE) \
2640 (TYPE_HAS_ASSIGN_REF (NODE) && ! TYPE_HAS_COMPLEX_ASSIGN_REF (NODE))
2641
c11b6f21
MS
2642#define TYPE_PTRMEM_P(NODE) \
2643 (TREE_CODE (NODE) == POINTER_TYPE \
2644 && TREE_CODE (TREE_TYPE (NODE)) == OFFSET_TYPE)
2645#define TYPE_PTR_P(NODE) \
2646 (TREE_CODE (NODE) == POINTER_TYPE \
2647 && TREE_CODE (TREE_TYPE (NODE)) != OFFSET_TYPE)
2648#define TYPE_PTROB_P(NODE) \
2649 (TYPE_PTR_P (NODE) && TREE_CODE (TREE_TYPE (NODE)) != FUNCTION_TYPE \
2650 && TREE_CODE (TREE_TYPE (NODE)) != VOID_TYPE)
2651#define TYPE_PTROBV_P(NODE) \
2652 (TYPE_PTR_P (NODE) && TREE_CODE (TREE_TYPE (NODE)) != FUNCTION_TYPE)
2653#define TYPE_PTRFN_P(NODE) \
2654 (TREE_CODE (NODE) == POINTER_TYPE \
2655 && TREE_CODE (TREE_TYPE (NODE)) == FUNCTION_TYPE)
2656
8d08fdba 2657/* Nonzero for _TYPE node means that this type is a pointer to member
e92cc029 2658 function type. */
83e9506e
RH
2659#define TYPE_PTRMEMFUNC_P(NODE) \
2660 (TREE_CODE(NODE) == RECORD_TYPE \
2661 && TYPE_LANG_SPECIFIC(NODE) \
2662 && TYPE_PTRMEMFUNC_FLAG (NODE))
2663
e08a8f45 2664#define TYPE_PTRMEMFUNC_FLAG(NODE) \
8012c983 2665 (TYPE_LANG_SPECIFIC(NODE)->ptrmemfunc_flag)
e08a8f45
MM
2666
2667/* A pointer-to-function member type looks like:
2668
2669 struct {
2670 short __delta;
2671 short __index;
2672 union {
2673 P __pfn;
2674 short __delta2;
2675 } __pfn_or_delta2;
2676 };
2677
2678 where P is a POINTER_TYPE to a METHOD_TYPE appropriate for the
2679 pointer to member. The fields are used as follows:
2680
2681 If __INDEX is -1, then the function to call is non-virtual, and
2682 is located at the address given by __PFN.
2683
2684 If __INDEX is zero, then this a NULL pointer-to-member.
2685
2686 Otherwise, the function to call is virtual. Then, __DELTA2 gives
2687 the offset from an instance of the object to the virtual function
2688 table, and __INDEX - 1 is the index into the vtable to use to
2689 find the function.
2690
2691 The value to use for the THIS parameter is the address of the
2692 object plus __DELTA.
2693
2694 For example, given:
2695
2696 struct B1 {
2697 int i;
2698 };
2699
2700 struct B2 {
2701 double d;
2702 void f();
2703 };
2704
2705 struct S : public B1, B2 {};
2706
2707 the pointer-to-member for `&S::f' looks like:
2708
2709 { 4, -1, { &f__2B2 } };
2710
2711 The `4' means that given an `S*' you have to add 4 bytes to get to
2712 the address of the `B2*'. Then, the -1 indicates that this is a
2713 non-virtual function. Of course, `&f__2B2' is the name of that
2714 function.
2715
adecb3f4 2716 (Of course, the exact values may differ depending on the mangling
c7e266a6
MM
2717 scheme, sizes of types, and such.).
2718
2719 Under the new ABI, we do:
2720
2721 struct {
2722 __P __pfn;
2723 ptrdiff_t __delta;
2724 };
2725
2726 (We don't need DELTA2, because the vtable is always the first thing
2727 in the object.) If the function is virtual, then PFN is one plus
2728 twice the index into the vtable; otherwise, it is just a pointer to
2729 the function. */
e08a8f45 2730
8d08fdba
MS
2731/* Get the POINTER_TYPE to the METHOD_TYPE associated with this
2732 pointer to member function. TYPE_PTRMEMFUNC_P _must_ be true,
e92cc029 2733 before using this macro. */
c7e266a6
MM
2734#define TYPE_PTRMEMFUNC_FN_TYPE(NODE) \
2735 (flag_new_abi \
2736 ? (TREE_TYPE (TYPE_FIELDS (NODE))) \
2737 : (TREE_TYPE (TYPE_FIELDS (TREE_TYPE (TREE_CHAIN (TREE_CHAIN (TYPE_FIELDS (NODE))))))))
ceab47eb
MM
2738
2739/* Returns `A' for a type like `int (A::*)(double)' */
2740#define TYPE_PTRMEMFUNC_OBJECT_TYPE(NODE) \
2741 TYPE_METHOD_BASETYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (NODE)))
2742
38e01259 2743/* These are use to manipulate the canonical RECORD_TYPE from the
e92cc029 2744 hashed POINTER_TYPE, and can only be used on the POINTER_TYPE. */
8d08fdba
MS
2745#define TYPE_GET_PTRMEMFUNC_TYPE(NODE) ((tree)TYPE_LANG_SPECIFIC(NODE))
2746#define TYPE_SET_PTRMEMFUNC_TYPE(NODE, VALUE) (TYPE_LANG_SPECIFIC(NODE) = ((struct lang_type *)(void*)(VALUE)))
e92cc029 2747/* These are to get the delta2 and pfn fields from a TYPE_PTRMEMFUNC_P. */
e08a8f45
MM
2748#define DELTA2_FROM_PTRMEMFUNC(NODE) delta2_from_ptrmemfunc ((NODE))
2749#define PFN_FROM_PTRMEMFUNC(NODE) pfn_from_ptrmemfunc ((NODE))
8d08fdba 2750
f71f87f9
MM
2751/* For a pointer-to-member type of the form `T X::*', this is `X'. */
2752#define TYPE_PTRMEM_CLASS_TYPE(NODE) \
2753 (TYPE_PTRMEM_P ((NODE)) \
2754 ? TYPE_OFFSET_BASETYPE (TREE_TYPE ((NODE))) \
2755 : TYPE_PTRMEMFUNC_OBJECT_TYPE ((NODE)))
2756
2757/* For a pointer-to-member type of the form `T X::*', this is `T'. */
2758#define TYPE_PTRMEM_POINTED_TO_TYPE(NODE) \
2759 (TYPE_PTRMEM_P ((NODE)) \
2760 ? TREE_TYPE (TREE_TYPE (NODE)) \
2761 : TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE ((NODE))))
2762
61a127b3
MM
2763/* For a pointer-to-member constant `X::Y' this is the RECORD_TYPE for
2764 `X'. */
f71f87f9 2765#define PTRMEM_CST_CLASS(NODE) \
da8a66fc 2766 TYPE_PTRMEM_CLASS_TYPE (TREE_TYPE (PTRMEM_CST_CHECK (NODE)))
61a127b3
MM
2767
2768/* For a pointer-to-member constant `X::Y' this is the _DECL for
2769 `Y'. */
da8a66fc 2770#define PTRMEM_CST_MEMBER(NODE) (((ptrmem_cst_t)PTRMEM_CST_CHECK (NODE))->member)
61a127b3 2771
faae18ab 2772/* Nonzero for VAR_DECL and FUNCTION_DECL node means that `extern' was
07c88314
MM
2773 specified in its declaration. This can also be set for an
2774 erroneously declared PARM_DECL. */
da8a66fc 2775#define DECL_THIS_EXTERN(NODE) \
07c88314 2776 DECL_LANG_FLAG_2 (VAR_FUNCTION_OR_PARM_DECL_CHECK (NODE))
8d08fdba 2777
faae18ab 2778/* Nonzero for VAR_DECL and FUNCTION_DECL node means that `static' was
07c88314
MM
2779 specified in its declaration. This can also be set for an
2780 erroneously declared PARM_DECL. */
da8a66fc 2781#define DECL_THIS_STATIC(NODE) \
07c88314 2782 DECL_LANG_FLAG_6 (VAR_FUNCTION_OR_PARM_DECL_CHECK (NODE))
faae18ab 2783
6bdb8141
JM
2784/* Nonzero if TYPE is an anonymous union or struct type. We have to use a
2785 flag for this because "A union for which objects or pointers are
2786 declared is not an anonymous union" [class.union]. */
2787#define ANON_AGGR_TYPE_P(NODE) \
8012c983 2788 (CLASS_TYPE_P (NODE) && TYPE_LANG_SPECIFIC (NODE)->anon_aggr)
6bdb8141 2789#define SET_ANON_AGGR_TYPE_P(NODE) \
8012c983 2790 (TYPE_LANG_SPECIFIC (NODE)->anon_aggr = 1)
67ffc812 2791
1e30f9b4
MM
2792/* Nonzero if TYPE is an anonymous union type. */
2793#define ANON_UNION_TYPE_P(NODE) \
2794 (TREE_CODE (NODE) == UNION_TYPE && ANON_AGGR_TYPE_P (NODE))
2795
8d08fdba
MS
2796#define UNKNOWN_TYPE LANG_TYPE
2797
2798/* Define fields and accessors for nodes representing declared names. */
2799
2800#if 0
2801/* C++: A derived class may be able to directly use the virtual
2802 function table of a base class. When it does so, it may
2803 still have a decl node used to access the virtual function
2804 table (so that variables of this type can initialize their
2805 virtual function table pointers by name). When such thievery
2806 is committed, know exactly which base class's virtual function
2807 table is the one being stolen. This effectively computes the
2808 transitive closure. */
2809#define DECL_VPARENT(NODE) ((NODE)->decl.arguments)
2810#endif
2811
8012c983 2812#define TYPE_WAS_ANONYMOUS(NODE) (TYPE_LANG_SPECIFIC (NODE)->was_anonymous)
8d08fdba
MS
2813
2814/* C++: all of these are overloaded! These apply only to TYPE_DECLs. */
f84b4be9
JM
2815
2816/* The format of each node in the DECL_FRIENDLIST is as follows:
2817
2818 The TREE_PURPOSE will be the name of a function, i.e., an
2819 IDENTIFIER_NODE. The TREE_VALUE will be itself a TREE_LIST, the
2820 list of functions with that name which are friends. The
2821 TREE_PURPOSE of each node in this sublist will be error_mark_node,
2822 if the function was declared a friend individually, in which case
2823 the TREE_VALUE will be the function_decl. If, however, all
2824 functions with a given name in a class were declared to be friends,
2825 the TREE_PUROSE will be the class type, and the TREE_VALUE will be
2826 NULL_TREE. */
8d08fdba 2827#define DECL_FRIENDLIST(NODE) (DECL_INITIAL (NODE))
6a629cac
MM
2828#define FRIEND_NAME(LIST) (TREE_PURPOSE (LIST))
2829#define FRIEND_DECLS(LIST) (TREE_VALUE (LIST))
8d08fdba 2830
2036a15c
MM
2831/* The DECL_ACCESS, if non-NULL, is a TREE_LIST. The TREE_PURPOSE of
2832 each node is a type; the TREE_VALUE is the access granted for this
2833 DECL in that type. The DECL_ACCESS is set by access declarations.
2834 For example, if a member that would normally be public in a
2835 derived class is made protected, then the derived class and the
2836 protected_access_node will appear in the DECL_ACCESS for the node. */
af3b4e59
MM
2837#define DECL_ACCESS(NODE) (DECL_LANG_SPECIFIC(NODE)->decl_flags.u2.access)
2838
2839/* Nonzero if the FUNCTION_DECL is a global constructor. */
2840#define DECL_GLOBAL_CTOR_P(NODE) \
2841 (DECL_LANG_SPECIFIC ((NODE))->decl_flags.global_ctor_p)
2842
2843/* Nonzero if the FUNCTION_DECL is a global destructor. */
2844#define DECL_GLOBAL_DTOR_P(NODE) \
2845 (DECL_LANG_SPECIFIC ((NODE))->decl_flags.global_dtor_p)
2846
2847/* If DECL_GLOBAL_CTOR_P or DECL_GLOBAL_DTOR_P holds, this macro
2848 returns the initialization priority for the function. Constructors
2849 with lower numbers should be run first. Destructors should be run
2850 in the reverse order of constructors. */
2851#define GLOBAL_INIT_PRIORITY(NODE) \
2852 (DECL_LANG_SPECIFIC ((NODE))->decl_flags.u2.init_priority)
8d08fdba 2853
8d08fdba 2854/* Accessor macros for C++ template decl nodes. */
f84b4be9
JM
2855
2856/* The DECL_TEMPLATE_PARMS are a list. The TREE_PURPOSE of each node
36a117a5
MM
2857 is a INT_CST whose TREE_INT_CST_HIGH indicates the level of the
2858 template parameters, with 1 being the outermost set of template
2859 parameters. The TREE_VALUE is a vector, whose elements are the
2860 template parameters at each level. Each element in the vector is a
2861 TREE_LIST, whose TREE_VALUE is a PARM_DECL (if the parameter is a
2862 non-type parameter), or a TYPE_DECL (if the parameter is a type
2863 parameter). The TREE_PURPOSE is the default value, if any. The
2864 TEMPLATE_PARM_INDEX for the parameter is avilable as the
2865 DECL_INITIAL (for a PARM_DECL) or as the TREE_TYPE (for a
2866 TYPE_DECL). */
8d08fdba 2867#define DECL_TEMPLATE_PARMS(NODE) DECL_ARGUMENTS(NODE)
98c1c668
JM
2868#define DECL_INNERMOST_TEMPLATE_PARMS(NODE) \
2869 INNERMOST_TEMPLATE_PARMS (DECL_TEMPLATE_PARMS (NODE))
2870#define DECL_NTPARMS(NODE) \
2871 TREE_VEC_LENGTH (DECL_INNERMOST_TEMPLATE_PARMS (NODE))
8d08fdba 2872/* For function, method, class-data templates. */
17aec3eb 2873#define DECL_TEMPLATE_RESULT(NODE) DECL_RESULT_FLD(NODE)
36a117a5
MM
2874/* For a static member variable template, the
2875 DECL_TEMPLATE_INSTANTIATIONS list contains the explicitly and
2876 implicitly generated instantiations of the variable. There are no
2877 partial instantiations of static member variables, so all of these
2878 will be full instantiations.
2879
2880 For a class template the DECL_TEMPLATE_INSTANTIATIONS lists holds
2881 all instantiations and specializations of the class type, including
2882 partial instantiations and partial specializations.
2883
2884 In both cases, the TREE_PURPOSE of each node contains the arguments
2885 used; the TREE_VALUE contains the generated variable. The template
2886 arguments are always complete. For example, given:
2887
2888 template <class T> struct S1 {
2889 template <class U> struct S2 {};
2890 template <class U> struct S2<U*> {};
2891 };
2892
2893 the record for the partial specialization will contain, as its
2894 argument list, { {T}, {U*} }, and will be on the
2895 DECL_TEMPLATE_INSTANTIATIONS list for `template <class T> template
2896 <class U> struct S1<T>::S2'.
2897
2898 This list is not used for function templates. */
8d08fdba 2899#define DECL_TEMPLATE_INSTANTIATIONS(NODE) DECL_VINDEX(NODE)
36a117a5
MM
2900/* For a function template, the DECL_TEMPLATE_SPECIALIZATIONS lists
2901 contains all instantiations and specializations of the function,
2902 including partial instantiations. For a partial instantiation
2903 which is a specialization, this list holds only full
2904 specializations of the template that are instantiations of the
2905 partial instantiation. For example, given:
2906
2907 template <class T> struct S {
2908 template <class U> void f(U);
2909 template <> void f(T);
2910 };
2911
2912 the `S<int>::f<int>(int)' function will appear on the
2913 DECL_TEMPLATE_SPECIALIZATIONS list for both `template <class T>
2914 template <class U> void S<T>::f(U)' and `template <class T> void
2915 S<int>::f(T)'. In the latter case, however, it will have only the
2916 innermost set of arguments (T, in this case). The DECL_TI_TEMPLATE
2917 for the function declaration will point at the specialization, not
2918 the fully general template.
2919
2920 For a class template, this list contains the partial
2921 specializations of this template. (Full specializations are not
2922 recorded on this list.) The TREE_PURPOSE holds the innermost
2923 arguments used in the partial specialization (e.g., for `template
2924 <class T> struct S<T*, int>' this will be `T*'.) The TREE_VALUE
2925 holds the innermost template parameters for the specialization
2926 (e.g., `T' in the example above.) The TREE_TYPE is the _TYPE node
2927 for the partial specialization.
2928
2929 This list is not used for static variable templates. */
2930#define DECL_TEMPLATE_SPECIALIZATIONS(NODE) DECL_SIZE(NODE)
5566b478 2931
50714e79 2932/* Nonzero for a DECL which is actually a template parameter. */
cd9f6678
MM
2933#define DECL_TEMPLATE_PARM_P(NODE) \
2934 (DECL_LANG_FLAG_0 (NODE) \
2935 && (TREE_CODE (NODE) == CONST_DECL \
2936 || TREE_CODE (NODE) == TYPE_DECL \
2937 || TREE_CODE (NODE) == TEMPLATE_DECL))
2938
2939/* Mark NODE as a template parameter. */
2940#define SET_DECL_TEMPLATE_PARM_P(NODE) \
2941 (DECL_LANG_FLAG_0 (NODE) = 1)
50714e79 2942
cd9f6678 2943/* Nonzero if NODE is a template template parameter. */
73b0fce8 2944#define DECL_TEMPLATE_TEMPLATE_PARM_P(NODE) \
50714e79 2945 (TREE_CODE (NODE) == TEMPLATE_DECL && DECL_TEMPLATE_PARM_P (NODE))
73b0fce8 2946
5566b478
MS
2947#define DECL_FUNCTION_TEMPLATE_P(NODE) \
2948 (TREE_CODE (NODE) == TEMPLATE_DECL \
2949 && TREE_CODE (DECL_TEMPLATE_RESULT (NODE)) == FUNCTION_DECL)
2950
6757edfe
MM
2951/* Nonzero for a DECL that represents a template class. */
2952#define DECL_CLASS_TEMPLATE_P(NODE) \
2953 (TREE_CODE (NODE) == TEMPLATE_DECL \
2954 && TREE_CODE (DECL_TEMPLATE_RESULT (NODE)) == TYPE_DECL \
2955 && !DECL_TEMPLATE_TEMPLATE_PARM_P (NODE))
2956
35acd3f2
MM
2957/* Nonzero if NODE which declares a type. */
2958#define DECL_DECLARES_TYPE_P(NODE) \
2959 (TREE_CODE (NODE) == TYPE_DECL || DECL_CLASS_TEMPLATE_P (NODE))
2960
9188c363
MM
2961/* Nonzero if NODE is the typedef implicitly generated for a type when
2962 the type is declared. (In C++, `struct S {};' is roughly equivalent
2963 to `struct S {}; typedef struct S S;' in C. This macro will hold
2964 for the typedef indicated in this example. Note that in C++, there
2965 is a second implicit typedef for each class, in the scope of `S'
99a6c6f4 2966 itself, so that you can say `S::S'. This macro does *not* hold for
9188c363
MM
2967 those typedefs. */
2968#define DECL_IMPLICIT_TYPEDEF_P(NODE) \
2969 (TREE_CODE ((NODE)) == TYPE_DECL && DECL_LANG_FLAG_2 ((NODE)))
2970#define SET_DECL_IMPLICIT_TYPEDEF_P(NODE) \
2971 (DECL_LANG_FLAG_2 ((NODE)) = 1)
2972
93cdc044
JM
2973/* A `primary' template is one that has its own template header. A
2974 member function of a class template is a template, but not primary.
6757edfe
MM
2975 A member template is primary. Friend templates are primary, too. */
2976
2977/* Returns the primary template corresponding to these parameters. */
2978#define DECL_PRIMARY_TEMPLATE(NODE) \
2979 (TREE_TYPE (DECL_INNERMOST_TEMPLATE_PARMS (NODE)))
2980
2981/* Returns non-zero if NODE is a primary template. */
2982#define PRIMARY_TEMPLATE_P(NODE) (DECL_PRIMARY_TEMPLATE (NODE) == NODE)
5566b478
MS
2983
2984#define CLASSTYPE_TEMPLATE_LEVEL(NODE) \
2985 (TREE_INT_CST_HIGH (TREE_PURPOSE (CLASSTYPE_TI_TEMPLATE (NODE))))
8d08fdba 2986
a0a33927
MS
2987/* Indicates whether or not (and how) a template was expanded for this
2988 FUNCTION_DECL or VAR_DECL.
2989 0=normal declaration, e.g. int min (int, int);
2990 1=implicit template instantiation
2991 2=explicit template specialization, e.g. int min<int> (int, int);
e92cc029 2992 3=explicit template instantiation, e.g. template int min<int> (int, int); */
a0a33927
MS
2993#define DECL_USE_TEMPLATE(NODE) (DECL_LANG_SPECIFIC(NODE)->decl_flags.use_template)
2994
2995#define DECL_TEMPLATE_INSTANTIATION(NODE) (DECL_USE_TEMPLATE (NODE) & 1)
2996#define CLASSTYPE_TEMPLATE_INSTANTIATION(NODE) \
2997 (CLASSTYPE_USE_TEMPLATE (NODE) & 1)
2998
2999#define DECL_TEMPLATE_SPECIALIZATION(NODE) (DECL_USE_TEMPLATE (NODE) == 2)
3000#define SET_DECL_TEMPLATE_SPECIALIZATION(NODE) (DECL_USE_TEMPLATE (NODE) = 2)
370af2d5 3001#define CLASSTYPE_TEMPLATE_SPECIALIZATION(NODE) \
a0a33927 3002 (CLASSTYPE_USE_TEMPLATE (NODE) == 2)
370af2d5 3003#define SET_CLASSTYPE_TEMPLATE_SPECIALIZATION(NODE) \
a0a33927
MS
3004 (CLASSTYPE_USE_TEMPLATE (NODE) = 2)
3005
3006#define DECL_IMPLICIT_INSTANTIATION(NODE) (DECL_USE_TEMPLATE (NODE) == 1)
3007#define SET_DECL_IMPLICIT_INSTANTIATION(NODE) (DECL_USE_TEMPLATE (NODE) = 1)
3008#define CLASSTYPE_IMPLICIT_INSTANTIATION(NODE) \
3009 (CLASSTYPE_USE_TEMPLATE(NODE) == 1)
3010#define SET_CLASSTYPE_IMPLICIT_INSTANTIATION(NODE) \
3011 (CLASSTYPE_USE_TEMPLATE(NODE) = 1)
3012
3013#define DECL_EXPLICIT_INSTANTIATION(NODE) (DECL_USE_TEMPLATE (NODE) == 3)
3014#define SET_DECL_EXPLICIT_INSTANTIATION(NODE) (DECL_USE_TEMPLATE (NODE) = 3)
3015#define CLASSTYPE_EXPLICIT_INSTANTIATION(NODE) \
3016 (CLASSTYPE_USE_TEMPLATE(NODE) == 3)
3017#define SET_CLASSTYPE_EXPLICIT_INSTANTIATION(NODE) \
3018 (CLASSTYPE_USE_TEMPLATE(NODE) = 3)
7177d104 3019
61289ca3
MM
3020/* Non-zero if DECL is a friend function which is an instantiation
3021 from the point of view of the compiler, but not from the point of
3022 view of the language. For example given:
3023 template <class T> struct S { friend void f(T) {}; };
3024 the declaration of `void f(int)' generated when S<int> is
3025 instantiated will not be a DECL_TEMPLATE_INSTANTIATION, but will be
3026 a DECL_FRIEND_PSUEDO_TEMPLATE_INSTANTIATION. */
3027#define DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION(DECL) \
3028 (DECL_TEMPLATE_INFO (DECL) && !DECL_USE_TEMPLATE (DECL))
3029
4c571114
MM
3030/* Non-zero if TYPE is a partial instantiation of a template class,
3031 i.e., an instantiation whose instantiation arguments involve
3032 template types. */
3033#define PARTIAL_INSTANTIATION_P(TYPE) \
8012c983 3034 (TYPE_LANG_SPECIFIC (TYPE)->is_partial_instantiation)
4c571114 3035
39c01e4c
MM
3036/* Non-zero iff we are currently processing a declaration for an
3037 entity with its own template parameter list, and which is not a
3038 full specialization. */
3039#define PROCESSING_REAL_TEMPLATE_DECL_P() \
3040 (processing_template_decl > template_class_depth (current_class_type))
3041
73aad9b9
JM
3042/* This function may be a guiding decl for a template. */
3043#define DECL_MAYBE_TEMPLATE(NODE) DECL_LANG_FLAG_4 (NODE)
fbf1c34b
MM
3044
3045/* Nonzero if this VAR_DECL or FUNCTION_DECL has already been
3046 instantiated, i.e. its definition has been generated from the
3047 pattern given in the the template. */
da8a66fc
ML
3048#define DECL_TEMPLATE_INSTANTIATED(NODE) \
3049 DECL_LANG_FLAG_1 (VAR_OR_FUNCTION_DECL_CHECK (NODE))
fbf1c34b 3050
db5ae43f 3051/* We know what we're doing with this decl now. */
e3417fcd 3052#define DECL_INTERFACE_KNOWN(NODE) DECL_LANG_FLAG_5 (NODE)
db5ae43f 3053
faae18ab
MS
3054/* This function was declared inline. This flag controls the linkage
3055 semantics of 'inline'; whether or not the function is inlined is
3056 controlled by DECL_INLINE. */
3057#define DECL_THIS_INLINE(NODE) \
3058 (DECL_LANG_SPECIFIC (NODE)->decl_flags.declared_inline)
3059
3060/* DECL_EXTERNAL must be set on a decl until the decl is actually emitted,
3061 so that assemble_external will work properly. So we have this flag to
3062 tell us whether the decl is really not external. */
3063#define DECL_NOT_REALLY_EXTERN(NODE) \
3064 (DECL_LANG_SPECIFIC (NODE)->decl_flags.not_really_extern)
db5ae43f 3065
6b5fbb55
MS
3066#define DECL_REALLY_EXTERN(NODE) \
3067 (DECL_EXTERNAL (NODE) && ! DECL_NOT_REALLY_EXTERN (NODE))
3068
eb68cb58
MM
3069/* A thunk is a stub function.
3070
3071 A thunk is an alternate entry point for an ordinary FUNCTION_DECL.
3072 The address of the ordinary FUNCTION_DECL is given by the
3073 DECL_INITIAL, which is always an ADDR_EXPR whose operand is a
3074 FUNCTION_DECL. The job of the thunk is to adjust the `this'
3075 pointer before transferring control to the FUNCTION_DECL.
3076
3077 A thunk may perform either, or both, of the following operations:
3078
3079 o Adjust the `this' pointer by a constant offset.
3080 o Adjust the `this' pointer by looking up a vcall-offset
3081 in the vtable.
3082
3083 If both operations are performed, then the constant adjument to
3084 `this' is performed first.
3085
3086 The constant adjustment is given by THUNK_DELTA. If the
3087 vcall-offset is required, the index into the vtable is given by
3088 THUNK_VCALL_OFFSET. */
3089
c0bbf652
MM
3090/* An integer indicating how many bytes should be subtracted from the
3091 `this' pointer when this function is called. */
9df2c88c 3092#define THUNK_DELTA(DECL) (DECL_CHECK (DECL)->decl.u1.i)
8926095f 3093
193833ed 3094/* A tree indicating how many bytes should be subtracted from the
c0bbf652 3095 vtable for the `this' pointer to find the vcall offset. (The vptr
27d26ee7 3096 is always located at offset zero from the f `this' pointer.) If
193833ed 3097 NULL, then there is no vcall offset. */
6462c441
MM
3098#define THUNK_VCALL_OFFSET(DECL) \
3099 (DECL_LANG_SPECIFIC (DECL)->decl_flags.u2.vcall_offset)
c0bbf652 3100
31f8e4f3
MM
3101/* Nonzero if this thunk should be generated with the vtable that
3102 references it. */
3103#define THUNK_GENERATE_WITH_VTABLE_P(DECL) \
3104 (DECL_LANG_SPECIFIC (DECL)->decl_flags.generate_with_vtable_p)
42976354 3105
ad321293
MM
3106/* These macros provide convenient access to the various _STMT nodes
3107 created when parsing template declarations. */
da8a66fc
ML
3108#define TRY_STMTS(NODE) TREE_OPERAND (TRY_BLOCK_CHECK (NODE), 0)
3109#define TRY_HANDLERS(NODE) TREE_OPERAND (TRY_BLOCK_CHECK (NODE), 1)
d7e7759d 3110
62409b39 3111/* Nonzero if this try block is a function try block. */
da8a66fc
ML
3112#define FN_TRY_BLOCK_P(NODE) TREE_LANG_FLAG_3 (TRY_BLOCK_CHECK (NODE))
3113#define HANDLER_PARMS(NODE) TREE_OPERAND (HANDLER_CHECK (NODE), 0)
3114#define HANDLER_BODY(NODE) TREE_OPERAND (HANDLER_CHECK (NODE), 1)
da8a66fc 3115#define SUBOBJECT_CLEANUP(NODE) TREE_OPERAND (SUBOBJECT_CHECK (NODE), 0)
da8a66fc 3116#define START_CATCH_TYPE(NODE) TREE_TYPE (START_CATCH_STMT_CHECK (NODE))
59026e79 3117
d9b2d9da 3118
46e8c075
MM
3119/* Nonzero if this CTOR_STMT is for the beginning of a constructor. */
3120#define CTOR_BEGIN_P(NODE) \
3121 (TREE_LANG_FLAG_0 (CTOR_STMT_CHECK (NODE)))
3122
3123/* Nonzero if this CTOR_STMT is for the end of a constructor. */
3124#define CTOR_END_P(NODE) \
3125 (!CTOR_BEGIN_P (NODE))
3126
43f887f9
MM
3127/* The parameters for a call-declarator. */
3128#define CALL_DECLARATOR_PARMS(NODE) \
3129 (TREE_PURPOSE (TREE_OPERAND ((NODE), 1)))
3130
3131/* The cv-qualifiers for a call-declarator. */
3132#define CALL_DECLARATOR_QUALS(NODE) \
3133 (TREE_VALUE (TREE_OPERAND ((NODE), 1)))
3134
3135/* The exception-specification for a call-declarator. */
3136#define CALL_DECLARATOR_EXCEPTION_SPEC(NODE) \
3137 (TREE_TYPE ((NODE)))
3138
8d08fdba 3139/* An enumeration of the kind of tags that C++ accepts. */
6eabb241 3140enum tag_types { record_type, class_type, union_type, enum_type };
8d08fdba 3141
27b8d0cd
MM
3142/* The various kinds of lvalues we distinguish. */
3143typedef enum cp_lvalue_kind {
3144 clk_none = 0, /* Things that are not an lvalue. */
3145 clk_ordinary = 1, /* An ordinary lvalue. */
3146 clk_class = 2, /* An rvalue of class-type. */
3147 clk_bitfield = 4, /* An lvalue for a bit-field. */
3148} cp_lvalue_kind;
3149
74b846e0
MM
3150/* The kinds of scopes we recognize. */
3151typedef enum scope_kind {
3152 sk_template_parms, /* A scope for template parameters. */
3153 sk_template_spec /* A scope corresponding to a template
3154 specialization. There is never anything in
3155 this scope. */
3156} scope_kind;
3157
3158/* Various kinds of template specialization, instantiation, etc. */
3159typedef enum tmpl_spec_kind {
3160 tsk_none, /* Not a template at all. */
3161 tsk_invalid_member_spec, /* An explicit member template
3162 specialization, but the enclosing
3163 classes have not all been explicitly
3164 specialized. */
3165 tsk_invalid_expl_inst, /* An explicit instantiation containing
3166 template parameter lists. */
3167 tsk_excessive_parms, /* A template declaration with too many
3168 template parameter lists. */
3169 tsk_insufficient_parms, /* A template declaration with too few
3170 parameter lists. */
3171 tsk_template, /* A template declaration. */
3172 tsk_expl_spec, /* An explicit specialization. */
3173 tsk_expl_inst /* An explicit instantiation. */
3174} tmpl_spec_kind;
3175
c35cce41
MM
3176/* The various kinds of access. BINFO_ACCESS depends on these being
3177 two bit quantities. The numerical values are important; they are
3178 used to initialize RTTI data structures, so chaning them changes
3179 the ABI. */
3180typedef enum access_kind {
3181 ak_none = 0, /* Inaccessible. */
3182 ak_public = 1, /* Accessible, as a `public' thing. */
3183 ak_protected = 2, /* Accessible, as a `protected' thing. */
3184 ak_private = 3 /* Accessible, as a `private' thing. */
3185} access_kind;
3186
872f37f9
MM
3187/* The various kinds of special functions. If you add to this list,
3188 you should update special_function_p as well. */
3dbc07b6 3189typedef enum special_function_kind {
872f37f9
MM
3190 sfk_none = 0, /* Not a special function. This enumeral
3191 must have value zero; see
3192 special_function_p. */
3dbc07b6 3193 sfk_constructor, /* A constructor. */
9eb71d8c
MM
3194 sfk_copy_constructor, /* A copy constructor. */
3195 sfk_assignment_operator, /* An assignment operator. */
3dbc07b6 3196 sfk_destructor, /* A destructor. */
872f37f9
MM
3197 sfk_complete_destructor, /* A destructor for complete objects. */
3198 sfk_base_destructor, /* A destructor for base subobjects. */
3199 sfk_deleting_destructor, /* A destructor for complete objects that
3200 deletes the object after it has been
3201 destroyed. */
3dbc07b6
MM
3202 sfk_conversion /* A conversion operator. */
3203} special_function_kind;
3204
8d08fdba
MS
3205/* Non-zero means that if a label exists, and no other identifier
3206 applies, use the value of the label. */
3207extern int flag_labels_ok;
3208
d2c192ad
JM
3209/* Nonzero means allow Microsoft extensions without a pedwarn. */
3210extern int flag_ms_extensions;
3211
8d08fdba
MS
3212/* Non-zero means to collect statistics which might be expensive
3213 and to print them when we are done. */
3214extern int flag_detailed_statistics;
3215
3216/* Non-zero means warn in function declared in derived class has the
3217 same name as a virtual in the base class, but fails to match the
3218 type signature of any virtual function in the base class. */
3219extern int warn_overloaded_virtual;
3220
dc8263bc
JM
3221/* Nonzero means warn about use of multicharacter literals. */
3222extern int warn_multichar;
3223
9018ce4d
BK
3224/* Non-zero means warn if a non-templatized friend function is
3225 declared in a templatized class. This behavior is warned about with
3226 flag_guiding_decls in do_friend. */
3227extern int warn_nontemplate_friend;
3228
8d08fdba 3229/* in c-common.c */
158991b7
KG
3230extern void declare_function_name PARAMS ((void));
3231extern void decl_attributes PARAMS ((tree, tree, tree));
3232extern void init_function_format_info PARAMS ((void));
3233extern void record_function_format PARAMS ((tree, tree, int, int, int));
3234extern void check_function_format PARAMS ((tree, tree, tree));
8d08fdba
MS
3235/* Print an error message for invalid operands to arith operation CODE.
3236 NOP_EXPR is used as a special case (see truthvalue_conversion). */
158991b7
KG
3237extern void binary_op_error PARAMS ((enum tree_code));
3238extern tree canonical_type_variant PARAMS ((tree));
3239extern void c_expand_expr_stmt PARAMS ((tree));
8d08fdba 3240/* Validate the expression after `case' and apply default promotions. */
158991b7 3241extern tree check_case_value PARAMS ((tree));
8d08fdba 3242/* Concatenate a list of STRING_CST nodes into one STRING_CST. */
158991b7
KG
3243extern tree combine_strings PARAMS ((tree));
3244extern void constant_expression_warning PARAMS ((tree));
3245extern tree convert_and_check PARAMS ((tree, tree));
3246extern void overflow_warning PARAMS ((tree));
3247extern void unsigned_conversion_warning PARAMS ((tree, tree));
3248extern void c_apply_type_quals_to_decl PARAMS ((int, tree));
61a127b3 3249
8d08fdba 3250/* Read the rest of the current #-directive line. */
d4dfe7d6 3251#if USE_CPPLIB
158991b7 3252extern char *get_directive_line PARAMS ((void));
d4dfe7d6
DB
3253#define GET_DIRECTIVE_LINE() get_directive_line ()
3254#else
158991b7 3255extern char *get_directive_line PARAMS ((FILE *));
d4dfe7d6
DB
3256#define GET_DIRECTIVE_LINE() get_directive_line (finput)
3257#endif
8d08fdba
MS
3258/* Subroutine of build_binary_op, used for comparison operations.
3259 See if the operands have both been converted from subword integer types
3260 and, if so, perhaps change them both back to their original type. */
158991b7 3261extern tree shorten_compare PARAMS ((tree *, tree *, tree *, enum tree_code *));
8d08fdba 3262/* Prepare expr to be an argument of a TRUTH_NOT_EXPR,
e92cc029 3263 or validate its data type for an `if' or `while' statement or ?..: exp. */
158991b7
KG
3264extern tree truthvalue_conversion PARAMS ((tree));
3265extern tree type_for_mode PARAMS ((enum machine_mode, int));
3266extern tree type_for_size PARAMS ((unsigned, int));
8d08fdba 3267
51c184be 3268/* in decl{2}.c */
8d08fdba
MS
3269/* A node that is a list (length 1) of error_mark_nodes. */
3270extern tree error_mark_list;
3271
9cd64686
MM
3272/* A list of virtual function tables we must make sure to write out. */
3273extern tree pending_vtables;
3274
700f8a87 3275/* Node for "pointer to (virtual) function".
e92cc029 3276 This may be distinct from ptr_type_node so gdb can distinguish them. */
700f8a87
MS
3277#define vfunc_ptr_type_node \
3278 (flag_vtable_thunks ? vtable_entry_type : ptr_type_node)
3279
8d08fdba 3280
8d08fdba
MS
3281/* For building calls to `delete'. */
3282extern tree integer_two_node, integer_three_node;
3283
0c8feefe
MM
3284extern tree anonymous_namespace_name;
3285
b2244c65
MM
3286/* The number of function bodies which we are currently processing.
3287 (Zero if we are at namespace scope, one inside the body of a
3288 function, two inside the body of a function in a local class, etc.) */
3289extern int function_depth;
3290
51c184be 3291/* in pt.c */
5566b478 3292
830bfa74
MM
3293/* These values are used for the `STRICT' parameter to type_unfication and
3294 fn_type_unification. Their meanings are described with the
3295 documentation for fn_type_unification. */
3296
3297typedef enum unification_kind_t {
3298 DEDUCE_CALL,
3299 DEDUCE_CONV,
3300 DEDUCE_EXACT
3301} unification_kind_t;
3302
3ae18eaf
JM
3303/* Macros for operating on a template instantation level node, represented
3304 by an EXPR_WITH_FILE_LOCATION. */
3305
3306#define TINST_DECL(NODE) EXPR_WFL_NODE (NODE)
3307#define TINST_LINE(NODE) EXPR_WFL_LINENO (NODE)
3308#define TINST_FILE(NODE) EXPR_WFL_FILENAME (NODE)
8d08fdba 3309
158991b7 3310extern void maybe_print_template_context PARAMS ((void));
bcb80729 3311
51c184be 3312/* in class.c */
61a127b3 3313
b4c4a9ec 3314extern int current_class_depth;
8d08fdba 3315
8d08fdba
MS
3316/* Points to the name of that function. May not be the DECL_NAME
3317 of CURRENT_FUNCTION_DECL due to overloading */
3318extern tree original_function_name;
1f6e1acc
AS
3319
3320/* An array of all local classes present in this translation unit, in
3321 declaration order. */
3322extern varray_type local_classes;
8d08fdba
MS
3323\f
3324/* Here's where we control how name mangling takes place. */
3325
3326#define OPERATOR_ASSIGN_FORMAT "__a%s"
3327#define OPERATOR_FORMAT "__%s"
3328#define OPERATOR_TYPENAME_FORMAT "__op"
8d08fdba
MS
3329
3330/* Cannot use '$' up front, because this confuses gdb
3331 (names beginning with '$' are gdb-local identifiers).
3332
3333 Note that all forms in which the '$' is significant are long enough
3334 for direct indexing (meaning that if we know there is a '$'
3335 at a particular location, we can index into the string at
3336 any other location that provides distinguishing characters). */
3337
3338/* Define NO_DOLLAR_IN_LABEL in your favorite tm file if your assembler
3339 doesn't allow '$' in symbol names. */
3340#ifndef NO_DOLLAR_IN_LABEL
3341
3342#define JOINER '$'
3343
3344#define VPTR_NAME "$v"
3345#define THROW_NAME "$eh_throw"
3346#define DESTRUCTOR_DECL_PREFIX "_$_"
3347#define AUTO_VTABLE_NAME "__vtbl$me__"
3348#define AUTO_TEMP_NAME "_$tmp_"
3349#define AUTO_TEMP_FORMAT "_$tmp_%d"
3350#define VTABLE_BASE "$vb"
486837a7 3351#define VTABLE_NAME_PREFIX (flag_vtable_thunks ? "__vt_" : "_vt$")
8d08fdba
MS
3352#define VFIELD_BASE "$vf"
3353#define VFIELD_NAME "_vptr$"
3354#define VFIELD_NAME_FORMAT "_vptr$%s"
3355#define VBASE_NAME "_vb$"
3356#define VBASE_NAME_FORMAT "_vb$%s"
3357#define STATIC_NAME_FORMAT "_%s$%s"
3358#define ANON_AGGRNAME_FORMAT "$_%d"
3359
3360#else /* NO_DOLLAR_IN_LABEL */
3361
3362#ifndef NO_DOT_IN_LABEL
3363
3364#define JOINER '.'
3365
3366#define VPTR_NAME ".v"
3367#define THROW_NAME ".eh_throw"
3368#define DESTRUCTOR_DECL_PREFIX "_._"
3369#define AUTO_VTABLE_NAME "__vtbl.me__"
3370#define AUTO_TEMP_NAME "_.tmp_"
3371#define AUTO_TEMP_FORMAT "_.tmp_%d"
3372#define VTABLE_BASE ".vb"
486837a7 3373#define VTABLE_NAME_PREFIX (flag_vtable_thunks ? "__vt_" : "_vt.")
8d08fdba
MS
3374#define VFIELD_BASE ".vf"
3375#define VFIELD_NAME "_vptr."
3376#define VFIELD_NAME_FORMAT "_vptr.%s"
3377#define VBASE_NAME "_vb."
3378#define VBASE_NAME_FORMAT "_vb.%s"
3379#define STATIC_NAME_FORMAT "_%s.%s"
3380
3381#define ANON_AGGRNAME_FORMAT "._%d"
3382
3383#else /* NO_DOT_IN_LABEL */
3384
3385#define VPTR_NAME "__vptr"
3386#define VPTR_NAME_P(ID_NODE) \
3387 (!strncmp (IDENTIFIER_POINTER (ID_NODE), VPTR_NAME, sizeof (VPTR_NAME) - 1))
3388#define THROW_NAME "__eh_throw"
3389#define DESTRUCTOR_DECL_PREFIX "__destr_"
3390#define DESTRUCTOR_NAME_P(ID_NODE) \
3391 (!strncmp (IDENTIFIER_POINTER (ID_NODE), DESTRUCTOR_DECL_PREFIX, \
3392 sizeof (DESTRUCTOR_DECL_PREFIX) - 1))
3393#define IN_CHARGE_NAME "__in_chrg"
3394#define AUTO_VTABLE_NAME "__vtbl_me__"
3395#define AUTO_TEMP_NAME "__tmp_"
3396#define TEMP_NAME_P(ID_NODE) \
3397 (!strncmp (IDENTIFIER_POINTER (ID_NODE), AUTO_TEMP_NAME, \
3398 sizeof (AUTO_TEMP_NAME) - 1))
3399#define AUTO_TEMP_FORMAT "__tmp_%d"
3400#define VTABLE_BASE "__vtb"
3401#define VTABLE_NAME "__vt_"
486837a7 3402#define VTABLE_NAME_PREFIX (flag_vtable_thunks ? "__vt_" : "_vt_")
8d08fdba
MS
3403#define VTABLE_NAME_P(ID_NODE) \
3404 (!strncmp (IDENTIFIER_POINTER (ID_NODE), VTABLE_NAME, \
3405 sizeof (VTABLE_NAME) - 1))
3406#define VFIELD_BASE "__vfb"
3407#define VFIELD_NAME "__vptr_"
3408#define VFIELD_NAME_P(ID_NODE) \
3409 (!strncmp (IDENTIFIER_POINTER (ID_NODE), VFIELD_NAME, \
3410 sizeof (VFIELD_NAME) - 1))
3411#define VFIELD_NAME_FORMAT "_vptr_%s"
3412#define VBASE_NAME "__vb_"
3413#define VBASE_NAME_P(ID_NODE) \
3414 (!strncmp (IDENTIFIER_POINTER (ID_NODE), VBASE_NAME, \
3415 sizeof (VBASE_NAME) - 1))
3416#define VBASE_NAME_FORMAT "__vb_%s"
3417#define STATIC_NAME_FORMAT "__static_%s_%s"
3418
3419#define ANON_AGGRNAME_PREFIX "__anon_"
3420#define ANON_AGGRNAME_P(ID_NODE) \
3421 (!strncmp (IDENTIFIER_POINTER (ID_NODE), ANON_AGGRNAME_PREFIX, \
3422 sizeof (ANON_AGGRNAME_PREFIX) - 1))
3423#define ANON_AGGRNAME_FORMAT "__anon_%d"
3424#define ANON_PARMNAME_FORMAT "__%d"
3425#define ANON_PARMNAME_P(ID_NODE) (IDENTIFIER_POINTER (ID_NODE)[0] == '_' \
3426 && IDENTIFIER_POINTER (ID_NODE)[1] == '_' \
3427 && IDENTIFIER_POINTER (ID_NODE)[2] <= '9')
3428
3429#endif /* NO_DOT_IN_LABEL */
3430#endif /* NO_DOLLAR_IN_LABEL */
3431
3432#define THIS_NAME "this"
3433#define DESTRUCTOR_NAME_FORMAT "~%s"
3434#define FILE_FUNCTION_PREFIX_LEN 9
fc378698
MS
3435#define CTOR_NAME "__ct"
3436#define DTOR_NAME "__dt"
8d08fdba
MS
3437
3438#define IN_CHARGE_NAME "__in_chrg"
3439
3440#define VTBL_PTR_TYPE "__vtbl_ptr_type"
3441#define VTABLE_DELTA_NAME "__delta"
3442#define VTABLE_INDEX_NAME "__index"
3443#define VTABLE_PFN_NAME "__pfn"
3444#define VTABLE_DELTA2_NAME "__delta2"
3445
8d08fdba
MS
3446#define EXCEPTION_CLEANUP_NAME "exception cleanup"
3447
23656158
MM
3448/* The name used as a prefix for VTTs. When the new ABI mangling
3449 scheme is implemented, this should be removed. */
3450
3451#define VTT_NAME_PREFIX "__vtt_"
3452
3453/* The name used as a prefix for construction vtables. */
3454
3455#define CTOR_VTBL_NAME_PREFIX "__ctorvt_"
3456
8d08fdba
MS
3457#define THIS_NAME_P(ID_NODE) (strcmp(IDENTIFIER_POINTER (ID_NODE), "this") == 0)
3458
3459#if !defined(NO_DOLLAR_IN_LABEL) || !defined(NO_DOT_IN_LABEL)
3460
3461#define VPTR_NAME_P(ID_NODE) (IDENTIFIER_POINTER (ID_NODE)[0] == JOINER \
3462 && IDENTIFIER_POINTER (ID_NODE)[1] == 'v')
3463#define DESTRUCTOR_NAME_P(ID_NODE) (IDENTIFIER_POINTER (ID_NODE)[1] == JOINER \
3464 && IDENTIFIER_POINTER (ID_NODE)[2] == '_')
3465
3466#define VTABLE_NAME_P(ID_NODE) (IDENTIFIER_POINTER (ID_NODE)[1] == 'v' \
3467 && IDENTIFIER_POINTER (ID_NODE)[2] == 't' \
3468 && IDENTIFIER_POINTER (ID_NODE)[3] == JOINER)
3469
3470#define VBASE_NAME_P(ID_NODE) (IDENTIFIER_POINTER (ID_NODE)[1] == 'v' \
3471 && IDENTIFIER_POINTER (ID_NODE)[2] == 'b' \
3472 && IDENTIFIER_POINTER (ID_NODE)[3] == JOINER)
3473
3474#define TEMP_NAME_P(ID_NODE) (!strncmp (IDENTIFIER_POINTER (ID_NODE), AUTO_TEMP_NAME, sizeof (AUTO_TEMP_NAME)-1))
3475#define VFIELD_NAME_P(ID_NODE) (!strncmp (IDENTIFIER_POINTER (ID_NODE), VFIELD_NAME, sizeof(VFIELD_NAME)-1))
3476
3477/* For anonymous aggregate types, we need some sort of name to
3478 hold on to. In practice, this should not appear, but it should
3479 not be harmful if it does. */
3480#define ANON_AGGRNAME_P(ID_NODE) (IDENTIFIER_POINTER (ID_NODE)[0] == JOINER \
3481 && IDENTIFIER_POINTER (ID_NODE)[1] == '_')
3482#define ANON_PARMNAME_FORMAT "_%d"
3483#define ANON_PARMNAME_P(ID_NODE) (IDENTIFIER_POINTER (ID_NODE)[0] == '_' \
3484 && IDENTIFIER_POINTER (ID_NODE)[1] <= '9')
3485#endif /* !defined(NO_DOLLAR_IN_LABEL) || !defined(NO_DOT_IN_LABEL) */
35680744 3486
c8298f61 3487/* Store the vbase pointer field name for type TYPE into pointer BUF. */
d8e178a0
KG
3488#define FORMAT_VBASE_NAME(BUF,TYPE) do { \
3489 char *wbuf = (char *) alloca (TYPE_ASSEMBLER_NAME_LENGTH (TYPE) \
c8298f61 3490 + sizeof (VBASE_NAME) + 1); \
d8e178a0
KG
3491 sprintf (wbuf, VBASE_NAME_FORMAT, TYPE_ASSEMBLER_NAME_STRING (TYPE)); \
3492 (BUF) = wbuf; \
c8298f61
MH
3493} while (0)
3494
35680744
MM
3495/* Returns non-zero iff ID_NODE is an IDENTIFIER_NODE whose name is
3496 `main'. */
3497#define MAIN_NAME_P(ID_NODE) \
3498 (strcmp (IDENTIFIER_POINTER (ID_NODE), "main") == 0)
3499
3500/* Returns non-zero iff NODE is a declaration for the global function
3501 `main'. */
3502#define DECL_MAIN_P(NODE) \
eb68cb58 3503 (DECL_EXTERN_C_FUNCTION_P (NODE) \
35680744
MM
3504 && DECL_NAME (NODE) != NULL_TREE \
3505 && MAIN_NAME_P (DECL_NAME (NODE)))
3506
8d08fdba 3507\f
8d08fdba
MS
3508/* Things for handling inline functions. */
3509
3510struct pending_inline
3511{
3512 struct pending_inline *next; /* pointer to next in chain */
3513 int lineno; /* line number we got the text from */
3b304f5b 3514 const char *filename; /* name of file we were processing */
8d08fdba
MS
3515 tree fndecl; /* FUNCTION_DECL that brought us here */
3516 int token; /* token we were scanning */
3517 int token_value; /* value of token we were scanning (YYSTYPE) */
3518
3519 char *buf; /* pointer to character stream */
3520 int len; /* length of stream */
8d08fdba
MS
3521 unsigned int can_free : 1; /* free this after we're done with it? */
3522 unsigned int deja_vu : 1; /* set iff we don't want to see it again. */
3523 unsigned int interface : 2; /* 0=interface 1=unknown 2=implementation */
3524};
3525
51c184be 3526/* in method.c */
8d08fdba
MS
3527extern struct pending_inline *pending_inlines;
3528
9bfadf57 3529/* Negative values means we know `this' to be of static type. */
8d08fdba
MS
3530
3531extern int flag_this_is_variable;
3532
a0a33927
MS
3533/* Nonzero means do emit exported implementations of functions even if
3534 they can be inlined. */
3535
3536extern int flag_implement_inlines;
3537
8d08fdba
MS
3538/* Nonzero means templates obey #pragma interface and implementation. */
3539
3540extern int flag_external_templates;
3541
3542/* Nonzero means templates are emitted where they are instantiated. */
3543
3544extern int flag_alt_external_templates;
3545
ddd5a7c1 3546/* Nonzero means implicit template instantiations are emitted. */
a0a33927
MS
3547
3548extern int flag_implicit_templates;
3549
72b7eeff
MS
3550/* Nonzero if we want to emit defined symbols with common-like linkage as
3551 weak symbols where possible, in order to conform to C++ semantics.
3552 Otherwise, emit them as local symbols. */
3553
3554extern int flag_weak;
3555
46e8c075
MM
3556/* Nonzero if we should expand functions calls inline at the tree
3557 level, rather than at the RTL level. */
3558
3559extern int flag_inline_trees;
3560
5566b478
MS
3561/* Nonzero if we're done parsing and into end-of-file activities. */
3562
3563extern int at_eof;
3564
8d08fdba
MS
3565enum overload_flags { NO_SPECIAL = 0, DTOR_FLAG, OP_FLAG, TYPENAME_FLAG };
3566
8d08fdba
MS
3567/* Some macros for char-based bitfields. */
3568#define B_SET(a,x) (a[x>>3] |= (1 << (x&7)))
3569#define B_CLR(a,x) (a[x>>3] &= ~(1 << (x&7)))
3570#define B_TST(a,x) (a[x>>3] & (1 << (x&7)))
3571
3572/* These are uses as bits in flags passed to build_method_call
3573 to control its error reporting behavior.
3574
3575 LOOKUP_PROTECT means flag access violations.
3576 LOOKUP_COMPLAIN mean complain if no suitable member function
3577 matching the arguments is found.
3578 LOOKUP_NORMAL is just a combination of these two.
8d08fdba
MS
3579 LOOKUP_NONVIRTUAL means make a direct call to the member function found
3580 LOOKUP_GLOBAL means search through the space of overloaded functions,
3581 as well as the space of member functions.
6060a796 3582 LOOKUP_ONLYCONVERTING means that non-conversion constructors are not tried.
9a3b49ac
MS
3583 DIRECT_BIND means that if a temporary is created, it should be created so
3584 that it lives as long as the current variable bindings; otherwise it
3585 only lives until the end of the complete-expression.
878cd289
MS
3586 LOOKUP_SPECULATIVELY means return NULL_TREE if we cannot find what we are
3587 after. Note, LOOKUP_COMPLAIN is checked and error messages printed
3588 before LOOKUP_SPECULATIVELY is checked.
8d08fdba
MS
3589 LOOKUP_NO_CONVERSION means that user-defined conversions are not
3590 permitted. Built-in conversions are permitted.
c73964b2 3591 LOOKUP_DESTRUCTOR means explicit call to destructor.
52c11ef6
JM
3592 LOOKUP_NO_TEMP_BIND means temporaries will not be bound to references.
3593
3594 These are used in global lookup to support elaborated types and
3595 qualifiers.
3596
3597 LOOKUP_PREFER_TYPES means not to accept objects, and possibly namespaces.
3598 LOOKUP_PREFER_NAMESPACES means not to accept objects, and possibly types.
3599 LOOKUP_PREFER_BOTH means class-or-namespace-name.
3600 LOOKUP_TEMPLATES_EXPECTED means that class templates also count
3601 as types. */
8d08fdba
MS
3602
3603#define LOOKUP_PROTECT (1)
3604#define LOOKUP_COMPLAIN (2)
3605#define LOOKUP_NORMAL (3)
8d08fdba
MS
3606#define LOOKUP_NONVIRTUAL (8)
3607#define LOOKUP_GLOBAL (16)
8d08fdba 3608#define LOOKUP_SPECULATIVELY (64)
db5ae43f 3609#define LOOKUP_ONLYCONVERTING (128)
9a3b49ac 3610#define DIRECT_BIND (256)
8d08fdba
MS
3611#define LOOKUP_NO_CONVERSION (512)
3612#define LOOKUP_DESTRUCTOR (512)
c73964b2 3613#define LOOKUP_NO_TEMP_BIND (1024)
52c11ef6
JM
3614#define LOOKUP_PREFER_TYPES (2048)
3615#define LOOKUP_PREFER_NAMESPACES (4096)
3616#define LOOKUP_PREFER_BOTH (6144)
3617#define LOOKUP_TEMPLATES_EXPECTED (8192)
3618
3619#define LOOKUP_NAMESPACES_ONLY(f) \
3620 (((f) & LOOKUP_PREFER_NAMESPACES) && !((f) & LOOKUP_PREFER_TYPES))
3621#define LOOKUP_TYPES_ONLY(f) \
3622 (!((f) & LOOKUP_PREFER_NAMESPACES) && ((f) & LOOKUP_PREFER_TYPES))
3623#define LOOKUP_QUALIFIERS_ONLY(f) ((f) & LOOKUP_PREFER_BOTH)
3624
8d08fdba 3625
a4443a08
MS
3626/* These flags are used by the conversion code.
3627 CONV_IMPLICIT : Perform implicit conversions (standard and user-defined).
3628 CONV_STATIC : Perform the explicit conversions for static_cast.
3629 CONV_CONST : Perform the explicit conversions for const_cast.
3630 CONV_REINTERPRET: Perform the explicit conversions for reinterpret_cast.
6060a796 3631 CONV_PRIVATE : Perform upcasts to private bases.
8ccc31eb
MS
3632 CONV_FORCE_TEMP : Require a new temporary when converting to the same
3633 aggregate type. */
a4443a08
MS
3634
3635#define CONV_IMPLICIT 1
3636#define CONV_STATIC 2
3637#define CONV_CONST 4
3638#define CONV_REINTERPRET 8
3639#define CONV_PRIVATE 16
faf5394a 3640/* #define CONV_NONCONVERTING 32 */
8ccc31eb
MS
3641#define CONV_FORCE_TEMP 64
3642#define CONV_STATIC_CAST (CONV_IMPLICIT | CONV_STATIC | CONV_FORCE_TEMP)
a4443a08
MS
3643#define CONV_OLD_CONVERT (CONV_IMPLICIT | CONV_STATIC | CONV_CONST \
3644 | CONV_REINTERPRET)
3645#define CONV_C_CAST (CONV_IMPLICIT | CONV_STATIC | CONV_CONST \
8ccc31eb 3646 | CONV_REINTERPRET | CONV_PRIVATE | CONV_FORCE_TEMP)
a4443a08 3647
b7484fbe
MS
3648/* Used by build_expr_type_conversion to indicate which types are
3649 acceptable as arguments to the expression under consideration. */
3650
3651#define WANT_INT 1 /* integer types, including bool */
3652#define WANT_FLOAT 2 /* floating point types */
3653#define WANT_ENUM 4 /* enumerated types */
3654#define WANT_POINTER 8 /* pointer types */
3655#define WANT_NULL 16 /* null pointer constant */
b7484fbe
MS
3656#define WANT_ARITH (WANT_INT | WANT_FLOAT)
3657
3bfdc719
MM
3658/* Used with comptypes, and related functions, to guide type
3659 comparison. */
3660
3661#define COMPARE_STRICT 0 /* Just check if the types are the
3662 same. */
3663#define COMPARE_BASE 1 /* Check to see if the second type is
3664 derived from the first, or if both
3665 are pointers (or references) and
3666 the types pointed to by the second
3667 type is derived from the pointed to
3668 by the first. */
3669#define COMPARE_RELAXED 2 /* Like COMPARE_DERIVED, but in
3670 reverse. Also treat enmeration
3671 types as the same as integer types
3672 of the same width. */
3673#define COMPARE_REDECLARATION 4 /* The comparsion is being done when
3674 another declaration of an existing
3675 entity is seen. */
940ff223
JM
3676#define COMPARE_NO_ATTRIBUTES 8 /* The comparison should ignore
3677 extra-linguistic type attributes. */
3bfdc719 3678
7bdbfa05
MM
3679/* Used with push_overloaded_decl. */
3680#define PUSH_GLOBAL 0 /* Push the DECL into namespace scope,
3681 regardless of the current scope. */
3682#define PUSH_LOCAL 1 /* Push the DECL into the current
3683 scope. */
3684#define PUSH_USING 2 /* We are pushing this DECL as the
3685 result of a using declaration. */
3686
a8f73d4b 3687/* Used with start function. */
b35d4555 3688#define SF_DEFAULT 0 /* No flags. */
a8f73d4b
MM
3689#define SF_PRE_PARSED 1 /* The function declaration has
3690 already been parsed. */
3691#define SF_INCLASS_INLINE 2 /* The function is an inline, defined
3692 in the class body. */
3693#define SF_EXPAND 4 /* Generate RTL for this function. */
3694
9edc3913 3695
3bfdc719
MM
3696/* Returns nonzero iff TYPE1 and TYPE2 are the same type, or if TYPE2
3697 is derived from TYPE1, or if TYPE2 is a pointer (reference) to a
3698 class derived from the type pointed to (referred to) by TYPE1. */
3699#define same_or_base_type_p(type1, type2) \
3700 comptypes ((type1), (type2), COMPARE_BASE)
3701
f84b4be9 3702/* These macros are used to access a TEMPLATE_PARM_INDEX. */
da8a66fc
ML
3703#define TEMPLATE_PARM_INDEX_CAST(NODE) \
3704 ((template_parm_index*)TEMPLATE_PARM_INDEX_CHECK (NODE))
3705#define TEMPLATE_PARM_IDX(NODE) (TEMPLATE_PARM_INDEX_CAST (NODE)->index)
3706#define TEMPLATE_PARM_LEVEL(NODE) (TEMPLATE_PARM_INDEX_CAST (NODE)->level)
f84b4be9 3707#define TEMPLATE_PARM_DESCENDANTS(NODE) (TREE_CHAIN (NODE))
da8a66fc
ML
3708#define TEMPLATE_PARM_ORIG_LEVEL(NODE) (TEMPLATE_PARM_INDEX_CAST (NODE)->orig_level)
3709#define TEMPLATE_PARM_DECL(NODE) (TEMPLATE_PARM_INDEX_CAST (NODE)->decl)
f84b4be9 3710
73b0fce8
KL
3711/* These macros are for accessing the fields of TEMPLATE_TYPE_PARM
3712 and TEMPLATE_TEMPLATE_PARM nodes. */
f84b4be9
JM
3713#define TEMPLATE_TYPE_PARM_INDEX(NODE) (TYPE_FIELDS (NODE))
3714#define TEMPLATE_TYPE_IDX(NODE) \
3715 (TEMPLATE_PARM_IDX (TEMPLATE_TYPE_PARM_INDEX (NODE)))
3716#define TEMPLATE_TYPE_LEVEL(NODE) \
3717 (TEMPLATE_PARM_LEVEL (TEMPLATE_TYPE_PARM_INDEX (NODE)))
3718#define TEMPLATE_TYPE_ORIG_LEVEL(NODE) \
3719 (TEMPLATE_PARM_ORIG_LEVEL (TEMPLATE_TYPE_PARM_INDEX (NODE)))
3720#define TEMPLATE_TYPE_DECL(NODE) \
3721 (TEMPLATE_PARM_DECL (TEMPLATE_TYPE_PARM_INDEX (NODE)))
8d08fdba 3722
9e93bc9d
NS
3723/* Control stringification of trees (types, decls & exprs).
3724 Bit or them together. */
3725enum tree_string_flags
3726{
3727 TS_PLAIN, /* nothing special */
3728 TS_CHASE_TYPEDEFS = 1 << 0, /* look through typedefs */
3729 TS_DECORATE = 1 << 1, /* decorate things */
3730 TS_FUNC_NORETURN = 1 << 2, /* inhibit function return type */
3731 TS_FUNC_THROW = 1 << 3, /* show throw spec */
3732 TS_PARM_DEFAULTS = 1 << 4, /* show parm defaults */
3733 TS_EXPR_PARENS = 1 << 5, /* enclose in parens */
3734 TS_AGGR_TAGS = 1 << 6, /* show struct tags */
3735 TS_DECL_TYPE = 1 << 7, /* show decl's type */
3736 TS_FUNC_SCOPE = 1 << 8, /* show function scope */
3737 TS_PEDANTIC_NAME = 1 << 9, /* pedantically name things */
3738 TS_TEMPLATE_PREFIX= 1 << 10, /* show template <parms> prefix */
3739
3740 /* Internal use flags */
3741 TS_TEMPLATE_PARM = 1 << 11, /* decl is really a non-type template parm */
3742 TS_TEMPLATE_PLAIN = 1 << 12, /* don't decorate primary template_name */
3743
3744 TS_NEXT_BIT = 13 /* next available bit */
3745};
3746
1899c3a4
KL
3747/* Returns the TEMPLATE_DECL associated to a TEMPLATE_TEMPLATE_PARM
3748 node. */
3749#define TEMPLATE_TEMPLATE_PARM_TEMPLATE_DECL(NODE) \
3750 (TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (NODE) \
3751 ? TYPE_TI_TEMPLATE (NODE) \
3752 : TYPE_NAME (NODE))
3753
51c184be 3754/* in lex.c */
d7e7759d
BC
3755/* Indexed by TREE_CODE, these tables give C-looking names to
3756 operators represented by TREE_CODES. For example,
3757 opname_tab[(int) MINUS_EXPR] == "-". */
3758extern const char **opname_tab, **assignop_tab;
596ea4e5
AS
3759
3760typedef struct operator_name_info_t
3761{
3762 /* The IDENTIFIER_NODE for the operator. */
3763 tree identifier;
3764 /* The name of the operator. */
3765 const char *name;
3766 /* The mangled name of the operator. */
3767 const char *mangled_name;
3768} operator_name_info_t;
3769
3770/* A mapping from tree codes to operator name information. */
3771extern operator_name_info_t operator_name_info[];
3772/* Similar, but for assignment operators. */
3773extern operator_name_info_t assignment_operator_name_info[];
3774
51c184be 3775/* in call.c */
158991b7
KG
3776extern int check_dtor_name PARAMS ((tree, tree));
3777extern int get_arglist_len_in_bytes PARAMS ((tree));
3778
3779extern tree build_vfield_ref PARAMS ((tree, tree));
158991b7
KG
3780extern tree build_scoped_method_call PARAMS ((tree, tree, tree, tree));
3781extern tree build_addr_func PARAMS ((tree));
0c11ada6 3782extern tree build_call PARAMS ((tree, tree));
158991b7
KG
3783extern tree build_method_call PARAMS ((tree, tree, tree, tree, int));
3784extern int null_ptr_cst_p PARAMS ((tree));
3785extern tree type_decays_to PARAMS ((tree));
3786extern tree build_user_type_conversion PARAMS ((tree, tree, int));
3787extern tree build_new_function_call PARAMS ((tree, tree));
3788extern tree build_new_op PARAMS ((enum tree_code, int, tree, tree, tree));
158991b7
KG
3789extern tree build_op_delete_call PARAMS ((enum tree_code, tree, tree, int, tree));
3790extern int can_convert PARAMS ((tree, tree));
3791extern int can_convert_arg PARAMS ((tree, tree, tree));
3792extern int enforce_access PARAMS ((tree, tree));
c3f08228 3793extern tree convert_default_arg PARAMS ((tree, tree, tree, int));
158991b7
KG
3794extern tree convert_arg_to_ellipsis PARAMS ((tree));
3795extern tree build_x_va_arg PARAMS ((tree, tree));
3796extern tree convert_type_from_ellipsis PARAMS ((tree));
3797extern int is_properly_derived_from PARAMS ((tree, tree));
3798extern tree initialize_reference PARAMS ((tree, tree));
3799extern tree strip_top_quals PARAMS ((tree));
3800extern tree perform_implicit_conversion PARAMS ((tree, tree));
8d08fdba 3801
51c184be 3802/* in class.c */
158991b7
KG
3803extern tree build_vbase_path PARAMS ((enum tree_code, tree, tree, tree, int));
3804extern tree build_vtbl_ref PARAMS ((tree, tree));
3805extern tree build_vfn_ref PARAMS ((tree *, tree, tree));
3806extern tree get_vtable_decl PARAMS ((tree, int));
452a394b 3807extern void add_method PARAMS ((tree, tree, int));
158991b7 3808extern int currently_open_class PARAMS ((tree));
70adf8a9 3809extern tree currently_open_derived_class PARAMS ((tree));
158991b7
KG
3810extern tree get_vfield_offset PARAMS ((tree));
3811extern void duplicate_tag_error PARAMS ((tree));
3812extern tree finish_struct PARAMS ((tree, tree));
3813extern void finish_struct_1 PARAMS ((tree));
3814extern int resolves_to_fixed_type_p PARAMS ((tree, int *));
3815extern void init_class_processing PARAMS ((void));
3816extern int is_empty_class PARAMS ((tree));
3817extern void pushclass PARAMS ((tree, int));
3818extern void popclass PARAMS ((void));
3819extern void push_nested_class PARAMS ((tree, int));
3820extern void pop_nested_class PARAMS ((void));
3821extern void push_lang_context PARAMS ((tree));
3822extern void pop_lang_context PARAMS ((void));
3823extern tree instantiate_type PARAMS ((tree, tree, int));
3824extern void print_class_statistics PARAMS ((void));
da3d4dfa 3825extern int first_vfun_index PARAMS ((tree));
158991b7
KG
3826extern void build_self_reference PARAMS ((void));
3827extern void warn_hidden PARAMS ((tree));
3828extern tree get_enclosing_class PARAMS ((tree));
3829int is_base_of_enclosing_class PARAMS ((tree, tree));
3830extern void unreverse_member_declarations PARAMS ((tree));
3831extern void invalidate_class_lookup_cache PARAMS ((void));
3832extern void maybe_note_name_used_in_class PARAMS ((tree, tree));
3833extern void note_name_declared_in_class PARAMS ((tree, tree));
298d6f60
MM
3834extern tree get_vtbl_decl_for_binfo PARAMS ((tree));
3835extern tree in_charge_arg_for_name PARAMS ((tree));
669ec2b4 3836extern tree get_vtt_name PARAMS ((tree));
911a71a7 3837extern tree get_primary_binfo PARAMS ((tree));
8d08fdba 3838
51c184be 3839/* in cvt.c */
158991b7
KG
3840extern tree convert_to_reference PARAMS ((tree, tree, int, int, tree));
3841extern tree convert_from_reference PARAMS ((tree));
3842extern tree convert_pointer_to_real PARAMS ((tree, tree));
3843extern tree convert_pointer_to PARAMS ((tree, tree));
3844extern tree ocp_convert PARAMS ((tree, tree, int, int));
3845extern tree cp_convert PARAMS ((tree, tree));
3846extern tree convert_to_void PARAMS ((tree, const char */*implicit context*/));
3847extern tree convert PARAMS ((tree, tree));
3848extern tree convert_force PARAMS ((tree, tree, int));
3849extern tree build_type_conversion PARAMS ((tree, tree, int));
3850extern tree build_expr_type_conversion PARAMS ((int, tree, int));
3851extern tree type_promotes_to PARAMS ((tree));
3852extern tree perform_qualification_conversions PARAMS ((tree, tree));
db9b2174 3853extern void clone_function_decl PARAMS ((tree, int));
8d08fdba 3854
51c184be 3855/* decl.c */
824b9a4c 3856/* resume_binding_level */
158991b7
KG
3857extern void set_identifier_local_value PARAMS ((tree, tree));
3858extern int global_bindings_p PARAMS ((void));
3859extern int toplevel_bindings_p PARAMS ((void));
3860extern int namespace_bindings_p PARAMS ((void));
3861extern void keep_next_level PARAMS ((int));
3862extern int kept_level_p PARAMS ((void));
74b846e0 3863extern int template_parm_scope_p PARAMS ((void));
158991b7 3864extern void set_class_shadows PARAMS ((tree));
74b846e0
MM
3865extern void begin_scope PARAMS ((scope_kind));
3866extern void finish_scope PARAMS ((void));
158991b7 3867extern void note_level_for_for PARAMS ((void));
6625cdb5 3868extern void note_level_for_eh PARAMS ((void));
158991b7
KG
3869extern void resume_level PARAMS ((struct binding_level *));
3870extern void delete_block PARAMS ((tree));
3871extern void insert_block PARAMS ((tree));
3872extern void add_block_current_level PARAMS ((tree));
3873extern void set_block PARAMS ((tree));
3874extern void pushlevel_class PARAMS ((void));
3875extern void poplevel_class PARAMS ((void));
3876extern void print_binding_stack PARAMS ((void));
3877extern void print_binding_level PARAMS ((struct binding_level *));
3878extern void push_namespace PARAMS ((tree));
3879extern void pop_namespace PARAMS ((void));
3880extern void push_nested_namespace PARAMS ((tree));
3881extern void pop_nested_namespace PARAMS ((tree));
3882extern void maybe_push_to_top_level PARAMS ((int));
3883extern void push_to_top_level PARAMS ((void));
3884extern void pop_from_top_level PARAMS ((void));
f2c5f623
BC
3885extern void push_switch PARAMS ((void));
3886extern void pop_switch PARAMS ((void));
158991b7
KG
3887extern tree identifier_type_value PARAMS ((tree));
3888extern void set_identifier_type_value PARAMS ((tree, tree));
3889extern void pop_everything PARAMS ((void));
3890extern void pushtag PARAMS ((tree, tree, int));
3891extern tree make_anon_name PARAMS ((void));
3892extern void clear_anon_tags PARAMS ((void));
3893extern int decls_match PARAMS ((tree, tree));
3894extern int duplicate_decls PARAMS ((tree, tree));
3895extern tree pushdecl PARAMS ((tree));
3896extern tree pushdecl_top_level PARAMS ((tree));
3897extern void pushdecl_class_level PARAMS ((tree));
bd6dd845 3898#if 0
158991b7 3899extern void pushdecl_nonclass_level PARAMS ((tree));
bd6dd845 3900#endif
158991b7
KG
3901extern tree pushdecl_namespace_level PARAMS ((tree));
3902extern tree push_using_decl PARAMS ((tree, tree));
3903extern tree push_using_directive PARAMS ((tree));
3904extern void push_class_level_binding PARAMS ((tree, tree));
3905extern tree implicitly_declare PARAMS ((tree));
3906extern tree lookup_label PARAMS ((tree));
3907extern tree declare_local_label PARAMS ((tree));
3b304f5b 3908extern tree define_label PARAMS ((const char *, int, tree));
6625cdb5 3909extern void check_goto PARAMS ((tree));
158991b7
KG
3910extern void define_case_label PARAMS ((void));
3911extern tree getdecls PARAMS ((void));
3912extern tree gettags PARAMS ((void));
bd6dd845 3913#if 0
158991b7 3914extern void set_current_level_tags_transparency PARAMS ((int));
bd6dd845 3915#endif
158991b7
KG
3916extern tree binding_for_name PARAMS ((tree, tree));
3917extern tree namespace_binding PARAMS ((tree, tree));
3918extern void set_namespace_binding PARAMS ((tree, tree, tree));
3919extern tree lookup_namespace_name PARAMS ((tree, tree));
3920extern tree build_typename_type PARAMS ((tree, tree, tree, tree));
3921extern tree make_typename_type PARAMS ((tree, tree, int));
3922extern tree lookup_name_nonclass PARAMS ((tree));
3923extern tree lookup_function_nonclass PARAMS ((tree, tree));
3924extern tree lookup_name PARAMS ((tree, int));
3925extern tree lookup_name_current_level PARAMS ((tree));
3926extern tree lookup_type_current_level PARAMS ((tree));
3927extern tree lookup_name_namespace_only PARAMS ((tree));
3928extern void begin_only_namespace_names PARAMS ((void));
3929extern void end_only_namespace_names PARAMS ((void));
3930extern tree namespace_ancestor PARAMS ((tree, tree));
3931extern tree unqualified_namespace_lookup PARAMS ((tree, int, tree *));
3932extern int lookup_using_namespace PARAMS ((tree, tree, tree, tree, int, tree *));
3933extern int qualified_lookup_using_namespace PARAMS ((tree, tree, tree, int));
0c11ada6 3934extern tree build_library_fn PARAMS ((tree, tree));
0c11ada6
JM
3935extern tree build_library_fn_ptr PARAMS ((const char *, tree));
3936extern tree build_cp_library_fn_ptr PARAMS ((const char *, tree));
3937extern tree push_library_fn PARAMS ((tree, tree));
0c11ada6
JM
3938extern tree push_void_library_fn PARAMS ((tree, tree));
3939extern tree push_throw_library_fn PARAMS ((tree, tree));
158991b7
KG
3940extern void init_decl_processing PARAMS ((void));
3941extern int init_type_desc PARAMS ((void));
158991b7
KG
3942extern tree check_tag_decl PARAMS ((tree));
3943extern void shadow_tag PARAMS ((tree));
3944extern tree groktypename PARAMS ((tree));
3945extern tree start_decl PARAMS ((tree, tree, int, tree, tree));
3946extern void start_decl_1 PARAMS ((tree));
3947extern void cp_finish_decl PARAMS ((tree, tree, tree, int));
3948extern void finish_decl PARAMS ((tree, tree, tree));
3949extern void maybe_inject_for_scope_var PARAMS ((tree));
3950extern void initialize_local_var PARAMS ((tree, tree, int));
3951extern void expand_static_init PARAMS ((tree, tree));
3952extern tree start_handler_parms PARAMS ((tree, tree));
3953extern int complete_array_type PARAMS ((tree, tree, int));
3954extern tree build_ptrmemfunc_type PARAMS ((tree));
f30432d7 3955/* the grokdeclarator prototype is in decl.h */
158991b7
KG
3956extern int parmlist_is_exprlist PARAMS ((tree));
3957extern int copy_args_p PARAMS ((tree));
3958extern int grok_ctor_properties PARAMS ((tree, tree));
3959extern void grok_op_properties PARAMS ((tree, int, int));
3960extern tree xref_tag PARAMS ((tree, tree, int));
3961extern tree xref_tag_from_type PARAMS ((tree, tree, int));
3962extern void xref_basetypes PARAMS ((tree, tree, tree, tree));
3963extern tree start_enum PARAMS ((tree));
3964extern tree finish_enum PARAMS ((tree));
3965extern void build_enumerator PARAMS ((tree, tree, tree));
3966extern int start_function PARAMS ((tree, tree, tree, int));
3967extern void expand_start_early_try_stmts PARAMS ((void));
3968extern void store_parm_decls PARAMS ((void));
3969extern void store_return_init PARAMS ((tree));
0acf7199 3970extern tree finish_function PARAMS ((int));
158991b7
KG
3971extern tree start_method PARAMS ((tree, tree, tree));
3972extern tree finish_method PARAMS ((tree));
3973extern void hack_incomplete_structures PARAMS ((tree));
158991b7
KG
3974extern tree maybe_build_cleanup PARAMS ((tree));
3975extern void cplus_expand_expr_stmt PARAMS ((tree));
3976extern void finish_stmt PARAMS ((void));
158991b7
KG
3977extern void replace_defarg PARAMS ((tree, tree));
3978extern void print_other_binding_stack PARAMS ((struct binding_level *));
3afb32a4 3979extern void revert_static_member_fn PARAMS ((tree));
158991b7
KG
3980extern void fixup_anonymous_aggr PARAMS ((tree));
3981extern int check_static_variable_definition PARAMS ((tree, tree));
3982extern tree compute_array_index_type PARAMS ((tree, tree));
3983extern void push_local_binding PARAMS ((tree, tree, int));
3984extern int push_class_binding PARAMS ((tree, tree));
3985extern tree check_default_argument PARAMS ((tree, tree));
3986extern tree push_overloaded_decl PARAMS ((tree, int));
3987extern void clear_identifier_class_values PARAMS ((void));
3988extern void storetags PARAMS ((tree));
3989extern int vtable_decl_p PARAMS ((tree, void *));
3990extern int vtype_decl_p PARAMS ((tree, void *));
3991extern int sigtable_decl_p PARAMS ((tree, void *));
3992typedef int (*walk_globals_pred) PARAMS ((tree, void *));
3993typedef int (*walk_globals_fn) PARAMS ((tree *, void *));
3994extern int walk_globals PARAMS ((walk_globals_pred,
0aafb128
MM
3995 walk_globals_fn,
3996 void *));
158991b7
KG
3997typedef int (*walk_namespaces_fn) PARAMS ((tree, void *));
3998extern int walk_namespaces PARAMS ((walk_namespaces_fn,
0aafb128 3999 void *));
158991b7
KG
4000extern int wrapup_globals_for_namespace PARAMS ((tree, void *));
4001extern tree cp_namespace_decls PARAMS ((tree));
4002extern tree create_implicit_typedef PARAMS ((tree, tree));
4003extern tree maybe_push_decl PARAMS ((tree));
158991b7 4004extern tree build_target_expr_with_type PARAMS ((tree, tree));
158991b7
KG
4005extern int local_variable_p PARAMS ((tree));
4006extern int nonstatic_local_decl_p PARAMS ((tree));
4007extern tree declare_global_var PARAMS ((tree, tree));
4008extern void register_dtor_fn PARAMS ((tree));
74b846e0 4009extern tmpl_spec_kind current_tmpl_spec_kind PARAMS ((int));
8d08fdba 4010
51c184be 4011/* in decl2.c */
158991b7
KG
4012extern void init_decl2 PARAMS ((void));
4013extern int check_java_method PARAMS ((tree));
4014extern int lang_decode_option PARAMS ((int, char **));
4015extern int grok_method_quals PARAMS ((tree, tree, tree));
4016extern void warn_if_unknown_interface PARAMS ((tree));
4017extern void grok_x_components PARAMS ((tree));
4018extern void maybe_retrofit_in_chrg PARAMS ((tree));
4019extern void maybe_make_one_only PARAMS ((tree));
4020extern void grokclassfn PARAMS ((tree, tree, enum overload_flags, tree));
4021extern tree grok_alignof PARAMS ((tree));
4022extern tree grok_array_decl PARAMS ((tree, tree));
4023extern tree delete_sanity PARAMS ((tree, tree, int, int));
4024extern tree check_classfn PARAMS ((tree, tree));
4025extern void check_member_template PARAMS ((tree));
4026extern tree grokfield PARAMS ((tree, tree, tree, tree, tree));
4027extern tree grokbitfield PARAMS ((tree, tree, tree));
4028extern tree groktypefield PARAMS ((tree, tree));
4029extern tree grokoptypename PARAMS ((tree, tree));
4030extern int copy_assignment_arg_p PARAMS ((tree, int));
4031extern void cplus_decl_attributes PARAMS ((tree, tree, tree));
4032extern tree constructor_name_full PARAMS ((tree));
4033extern tree constructor_name PARAMS ((tree));
fd74ca0b 4034extern void setup_vtbl_ptr PARAMS ((tree, tree));
56e770bf 4035extern void defer_fn PARAMS ((tree));
c395453c 4036extern tree get_temp_name PARAMS ((tree));
158991b7
KG
4037extern void finish_anon_union PARAMS ((tree));
4038extern tree finish_table PARAMS ((tree, tree, tree, int));
4039extern void finish_builtin_type PARAMS ((tree, const char *,
d8e178a0 4040 tree *, int, tree));
158991b7
KG
4041extern tree coerce_new_type PARAMS ((tree));
4042extern tree coerce_delete_type PARAMS ((tree));
4043extern void comdat_linkage PARAMS ((tree));
158991b7
KG
4044extern void import_export_vtable PARAMS ((tree, tree, int));
4045extern void import_export_decl PARAMS ((tree));
4046extern tree build_cleanup PARAMS ((tree));
4047extern void finish_file PARAMS ((void));
4048extern tree reparse_absdcl_as_expr PARAMS ((tree, tree));
4049extern tree reparse_absdcl_as_casts PARAMS ((tree, tree));
4050extern tree build_expr_from_tree PARAMS ((tree));
4051extern tree reparse_decl_as_expr PARAMS ((tree, tree));
4052extern tree finish_decl_parsing PARAMS ((tree));
4053extern tree check_cp_case_value PARAMS ((tree));
4054extern void set_decl_namespace PARAMS ((tree, tree, int));
4055extern tree current_decl_namespace PARAMS ((void));
4056extern void push_decl_namespace PARAMS ((tree));
4057extern void pop_decl_namespace PARAMS ((void));
4058extern void push_scope PARAMS ((tree));
4059extern void pop_scope PARAMS ((tree));
4060extern void do_namespace_alias PARAMS ((tree, tree));
4061extern void do_toplevel_using_decl PARAMS ((tree));
4062extern void do_local_using_decl PARAMS ((tree));
4063extern tree do_class_using_decl PARAMS ((tree));
4064extern void do_using_directive PARAMS ((tree));
4065extern void check_default_args PARAMS ((tree));
4066extern void mark_used PARAMS ((tree));
4067extern tree handle_class_head PARAMS ((tree, tree, tree));
4068extern tree lookup_arg_dependent PARAMS ((tree, tree, tree));
4069extern void finish_static_data_member_decl PARAMS ((tree, tree, tree, int));
3ec6bad3 4070extern tree build_artificial_parm PARAMS ((tree, tree));
c395453c
MM
4071extern tree get_guard PARAMS ((tree));
4072extern tree get_guard_cond PARAMS ((tree));
4073extern tree set_guard PARAMS ((tree));
8d08fdba 4074
fc6af6e3 4075/* in parse.y */
158991b7 4076extern void cp_parse_init PARAMS ((void));
fc6af6e3 4077
824b9a4c 4078/* in errfn.c */
d8e178a0 4079/* The cp_* functions aren't suitable for ATTRIBUTE_PRINTF. */
158991b7
KG
4080extern void cp_error PARAMS ((const char *, ...));
4081extern void cp_error_at PARAMS ((const char *, ...));
4082extern void cp_warning PARAMS ((const char *, ...));
4083extern void cp_warning_at PARAMS ((const char *, ...));
4084extern void cp_pedwarn PARAMS ((const char *, ...));
4085extern void cp_pedwarn_at PARAMS ((const char *, ...));
4086extern void cp_compiler_error PARAMS ((const char *, ...));
4087extern void cp_sprintf PARAMS ((const char *, ...));
4088extern void cp_deprecated PARAMS ((const char*));
824b9a4c
MS
4089
4090/* in error.c */
158991b7
KG
4091extern void init_error PARAMS ((void));
4092extern const char *type_as_string PARAMS ((tree, enum tree_string_flags));
4093extern const char *decl_as_string PARAMS ((tree, enum tree_string_flags));
4094extern const char *expr_as_string PARAMS ((tree, enum tree_string_flags));
4095extern const char *context_as_string PARAMS ((tree, enum tree_string_flags));
4096extern const char *lang_decl_name PARAMS ((tree, int));
4097extern const char *cp_file_of PARAMS ((tree));
4098extern int cp_line_of PARAMS ((tree));
421844e7 4099extern const char *language_to_string PARAMS ((enum languages, int));
824b9a4c 4100
51c184be 4101/* in except.c */
158991b7
KG
4102extern void init_exception_processing PARAMS ((void));
4103extern tree expand_start_catch_block PARAMS ((tree));
4104extern void expand_end_catch_block PARAMS ((tree));
4105extern void expand_builtin_throw PARAMS ((void));
4106extern tree expand_start_eh_spec PARAMS ((void));
4107extern void expand_end_eh_spec PARAMS ((tree, tree));
4108extern void expand_exception_blocks PARAMS ((void));
4109extern tree build_throw PARAMS ((tree));
4110extern void mark_all_runtime_matches PARAMS ((void));
1660cb3a 4111extern int nothrow_libfn_p PARAMS ((tree));
2bc9f1d1 4112extern void check_handlers PARAMS ((tree));
8d08fdba 4113
51c184be 4114/* in expr.c */
158991b7
KG
4115extern void init_cplus_expand PARAMS ((void));
4116extern void fixup_result_decl PARAMS ((tree, struct rtx_def *));
4117extern int extract_init PARAMS ((tree, tree));
158991b7 4118extern tree cplus_expand_constant PARAMS ((tree));
8d08fdba 4119
bd6dd845 4120/* friend.c */
158991b7
KG
4121extern int is_friend PARAMS ((tree, tree));
4122extern void make_friend_class PARAMS ((tree, tree));
4123extern void add_friend PARAMS ((tree, tree));
158991b7 4124extern tree do_friend PARAMS ((tree, tree, tree, tree, tree, enum overload_flags, tree, int));
bd6dd845 4125
51c184be 4126/* in init.c */
158991b7 4127extern void init_init_processing PARAMS ((void));
fd74ca0b
MM
4128extern void emit_base_init PARAMS ((tree, tree));
4129extern tree expand_member_init PARAMS ((tree, tree, tree));
158991b7 4130extern tree build_aggr_init PARAMS ((tree, tree, int));
158991b7
KG
4131extern int is_aggr_type PARAMS ((tree, int));
4132extern tree get_aggr_from_typedef PARAMS ((tree, int));
4133extern tree get_type_value PARAMS ((tree));
4134extern tree build_member_call PARAMS ((tree, tree, tree));
4135extern tree build_offset_ref PARAMS ((tree, tree));
4136extern tree resolve_offset_ref PARAMS ((tree));
4137extern tree decl_constant_value PARAMS ((tree));
4138extern tree build_new PARAMS ((tree, tree, tree, int));
158991b7
KG
4139extern tree build_vec_init PARAMS ((tree, tree, tree, tree, int));
4140extern tree build_x_delete PARAMS ((tree, int, tree));
86f45d2c 4141extern tree build_delete PARAMS ((tree, tree, special_function_kind, int, int));
158991b7 4142extern tree build_vbase_delete PARAMS ((tree, tree));
86f45d2c 4143extern tree build_vec_delete PARAMS ((tree, tree, special_function_kind, int));
158991b7
KG
4144extern tree create_temporary_var PARAMS ((tree));
4145extern void begin_init_stmts PARAMS ((tree *, tree *));
4146extern tree finish_init_stmts PARAMS ((tree, tree));
cf2e003b 4147extern void initialize_vtbl_ptrs PARAMS ((tree));
e97f22c9 4148extern tree build_java_class_ref PARAMS ((tree));
8d08fdba 4149
51c184be 4150/* in input.c */
8d08fdba 4151
51c184be 4152/* in lex.c */
158991b7
KG
4153extern char *file_name_nondirectory PARAMS ((const char *));
4154extern tree make_pointer_declarator PARAMS ((tree, tree));
4155extern tree make_reference_declarator PARAMS ((tree, tree));
4156extern tree make_call_declarator PARAMS ((tree, tree, tree, tree));
4157extern void set_quals_and_spec PARAMS ((tree, tree, tree));
158991b7
KG
4158extern void lang_init PARAMS ((void));
4159extern void lang_finish PARAMS ((void));
bd6dd845 4160#if 0
158991b7 4161extern void reinit_lang_specific PARAMS ((void));
bd6dd845 4162#endif
158991b7
KG
4163extern void print_parse_statistics PARAMS ((void));
4164extern void extract_interface_info PARAMS ((void));
4165extern void do_pending_inlines PARAMS ((void));
4166extern void process_next_inline PARAMS ((struct pending_inline *));
4167extern struct pending_input *save_pending_input PARAMS ((void));
4168extern void restore_pending_input PARAMS ((struct pending_input *));
4169extern void yyungetc PARAMS ((int, int));
4170extern void reinit_parse_for_method PARAMS ((int, tree));
4171extern void reinit_parse_for_block PARAMS ((int, struct obstack *));
158991b7
KG
4172extern void check_for_missing_semicolon PARAMS ((tree));
4173extern void note_got_semicolon PARAMS ((tree));
4174extern void note_list_got_semicolon PARAMS ((tree));
4175extern void do_pending_lang_change PARAMS ((void));
4176extern int identifier_type PARAMS ((tree));
4177extern void see_typename PARAMS ((void));
4178extern tree do_identifier PARAMS ((tree, int, tree));
4179extern tree do_scoped_id PARAMS ((tree, int));
4180extern tree identifier_typedecl_value PARAMS ((tree));
4181extern int real_yylex PARAMS ((void));
4182extern int is_rid PARAMS ((tree));
4183extern tree build_lang_decl PARAMS ((enum tree_code, tree, tree));
4184extern void retrofit_lang_decl PARAMS ((tree));
0acf7199 4185extern tree copy_decl PARAMS ((tree));
158991b7
KG
4186extern void copy_lang_decl PARAMS ((tree));
4187extern tree cp_make_lang_type PARAMS ((enum tree_code));
4188extern tree make_aggr_type PARAMS ((enum tree_code));
4189extern void dump_time_statistics PARAMS ((void));
4190extern void compiler_error PARAMS ((const char *, ...))
d8e178a0 4191 ATTRIBUTE_PRINTF_1;
158991b7
KG
4192extern void yyerror PARAMS ((const char *));
4193extern void clear_inline_text_obstack PARAMS ((void));
4194extern void maybe_snarf_defarg PARAMS ((void));
4195extern tree snarf_defarg PARAMS ((void));
4196extern void add_defarg_fn PARAMS ((tree));
4197extern void do_pending_defargs PARAMS ((void));
4198extern int identifier_type PARAMS ((tree));
4199extern void yyhook PARAMS ((int));
4200extern int cp_type_qual_from_rid PARAMS ((tree));
8d08fdba 4201
51c184be 4202/* in method.c */
669ec2b4
JM
4203extern void init_method PARAMS ((void));
4204extern char *build_overload_name PARAMS ((tree, int, int));
4205extern tree build_static_name PARAMS ((tree, tree));
4206extern tree build_decl_overload_real PARAMS ((tree, tree, tree, tree,
4207 tree, int));
158991b7
KG
4208extern void set_mangled_name_for_decl PARAMS ((tree));
4209extern tree build_typename_overload PARAMS ((tree));
669ec2b4
JM
4210extern tree build_overload_with_type PARAMS ((tree, tree));
4211extern tree build_destructor_name PARAMS ((tree));
158991b7
KG
4212extern tree build_opfncall PARAMS ((enum tree_code, int, tree, tree, tree));
4213extern tree hack_identifier PARAMS ((tree, tree));
31f8e4f3
MM
4214extern tree make_thunk PARAMS ((tree, tree, tree, int));
4215extern void use_thunk PARAMS ((tree, int));
158991b7 4216extern void synthesize_method PARAMS ((tree));
669ec2b4 4217extern tree get_id_2 PARAMS ((const char *, tree));
9eb71d8c 4218extern tree implicitly_declare_fn PARAMS ((special_function_kind, tree, int));
669ec2b4 4219extern tree get_ctor_vtbl_name PARAMS ((tree, tree));
8d08fdba 4220
46e8c075 4221/* In optimize.c */
158991b7
KG
4222extern void optimize_function PARAMS ((tree));
4223extern int calls_setjmp_p PARAMS ((tree));
db9b2174 4224extern int maybe_clone_body PARAMS ((tree));
46e8c075 4225
51c184be 4226/* in pt.c */
158991b7
KG
4227extern void init_pt PARAMS ((void));
4228extern void check_template_shadow PARAMS ((tree));
f9a7ae04 4229extern tree get_innermost_template_args PARAMS ((tree, int));
158991b7
KG
4230extern tree tsubst PARAMS ((tree, tree, int, tree));
4231extern tree tsubst_expr PARAMS ((tree, tree, int, tree));
4232extern tree tsubst_copy PARAMS ((tree, tree, int, tree));
4233extern void maybe_begin_member_template_processing PARAMS ((tree));
4234extern void maybe_end_member_template_processing PARAMS ((void));
4235extern tree finish_member_template_decl PARAMS ((tree));
4236extern void begin_template_parm_list PARAMS ((void));
4237extern void begin_specialization PARAMS ((void));
4238extern void reset_specialization PARAMS ((void));
4239extern void end_specialization PARAMS ((void));
4240extern void begin_explicit_instantiation PARAMS ((void));
4241extern void end_explicit_instantiation PARAMS ((void));
4242extern tree check_explicit_specialization PARAMS ((tree, tree, int, int));
4243extern tree process_template_parm PARAMS ((tree, tree));
4244extern tree end_template_parm_list PARAMS ((tree));
4245extern void end_template_decl PARAMS ((void));
4246extern tree current_template_args PARAMS ((void));
4247extern tree push_template_decl PARAMS ((tree));
4248extern tree push_template_decl_real PARAMS ((tree, int));
4249extern void redeclare_class_template PARAMS ((tree, tree));
4250extern tree lookup_template_class PARAMS ((tree, tree, tree, tree, int));
4251extern tree lookup_template_function PARAMS ((tree, tree));
4252extern int uses_template_parms PARAMS ((tree));
4253extern tree instantiate_class_template PARAMS ((tree));
4254extern tree instantiate_template PARAMS ((tree, tree));
4255extern void overload_template_name PARAMS ((tree));
4256extern int fn_type_unification PARAMS ((tree, tree, tree, tree, tree, unification_kind_t));
3ae18eaf 4257extern tree tinst_for_decl PARAMS ((void));
158991b7
KG
4258extern void mark_decl_instantiated PARAMS ((tree, int));
4259extern int more_specialized PARAMS ((tree, tree, tree));
4260extern void mark_class_instantiated PARAMS ((tree, int));
4261extern void do_decl_instantiation PARAMS ((tree, tree, tree));
a1bcc528 4262extern void do_type_instantiation PARAMS ((tree, tree, int));
16d53b64 4263extern tree instantiate_decl PARAMS ((tree, int));
158991b7
KG
4264extern tree get_bindings PARAMS ((tree, tree, tree));
4265extern void add_tree PARAMS ((tree));
4266extern void add_maybe_template PARAMS ((tree, tree));
4267extern void pop_tinst_level PARAMS ((void));
4268extern int more_specialized_class PARAMS ((tree, tree));
4269extern int is_member_template PARAMS ((tree));
4270extern int template_parms_equal PARAMS ((tree, tree));
4271extern int comp_template_parms PARAMS ((tree, tree));
4272extern int template_class_depth PARAMS ((tree));
4273extern int is_specialization_of PARAMS ((tree, tree));
4274extern int comp_template_args PARAMS ((tree, tree));
4275extern void maybe_process_partial_specialization PARAMS ((tree));
4276extern void maybe_check_template_type PARAMS ((tree));
4277extern tree most_specialized_instantiation PARAMS ((tree, tree));
4278extern void print_candidates PARAMS ((tree));
4279extern int instantiate_pending_templates PARAMS ((void));
4280extern tree tsubst_default_argument PARAMS ((tree, tree, tree));
4281extern tree most_general_template PARAMS ((tree));
1f6e1acc 4282extern tree get_mostly_instantiated_function_type PARAMS ((tree, tree *, tree *));
67ffc812 4283extern int processing_template_parmlist;
824b9a4c
MS
4284
4285/* in repo.c */
158991b7
KG
4286extern void repo_template_used PARAMS ((tree));
4287extern void repo_template_instantiated PARAMS ((tree, int));
4288extern void init_repo PARAMS ((const char *));
4289extern void finish_repo PARAMS ((void));
824b9a4c
MS
4290
4291/* in rtti.c */
7267d692
NS
4292extern void init_rtti_processing PARAMS((void));
4293extern tree build_typeid PARAMS((tree));
4294extern tree get_tinfo_decl PARAMS((tree));
4295extern tree get_typeid PARAMS((tree));
4296extern tree get_typeid_1 PARAMS((tree));
4297extern tree build_dynamic_cast PARAMS((tree, tree));
4298extern void synthesize_tinfo_fn PARAMS((tree));
4299extern void emit_support_tinfos PARAMS((void));
4300extern int tinfo_decl_p PARAMS((tree, void *));
4301extern int emit_tinfo_decl PARAMS((tree *, void *));
8d08fdba 4302
51c184be 4303/* in search.c */
158991b7
KG
4304extern int types_overlap_p PARAMS ((tree, tree));
4305extern tree get_vbase PARAMS ((tree, tree));
4306extern tree get_binfo PARAMS ((tree, tree, int));
4307extern int get_base_distance PARAMS ((tree, tree, int, tree *));
4308extern tree get_dynamic_cast_base_type PARAMS ((tree, tree));
70adf8a9 4309extern void type_access_control PARAMS ((tree, tree));
158991b7
KG
4310extern int accessible_p PARAMS ((tree, tree));
4311extern tree lookup_field PARAMS ((tree, tree, int, int));
4312extern int lookup_fnfields_1 PARAMS ((tree, tree));
4313extern tree lookup_fnfields PARAMS ((tree, tree, int));
4314extern tree lookup_member PARAMS ((tree, tree, int, int));
158991b7
KG
4315extern tree get_matching_virtual PARAMS ((tree, tree, int));
4316extern void get_pure_virtuals PARAMS ((tree));
4317extern tree init_vbase_pointers PARAMS ((tree, tree));
158991b7
KG
4318extern void get_vbase_types PARAMS ((tree));
4319extern void maybe_suppress_debug_info PARAMS ((tree));
4320extern void note_debug_info_needed PARAMS ((tree));
4321extern void push_class_decls PARAMS ((tree));
4322extern void pop_class_decls PARAMS ((void));
4323extern void unuse_fields PARAMS ((tree));
4324extern void print_search_statistics PARAMS ((void));
4325extern void init_search_processing PARAMS ((void));
4326extern void reinit_search_statistics PARAMS ((void));
4327extern tree current_scope PARAMS ((void));
4328extern int at_function_scope_p PARAMS ((void));
4329extern tree lookup_conversions PARAMS ((tree));
4330extern tree binfo_for_vtable PARAMS ((tree));
4331extern int binfo_from_vbase PARAMS ((tree));
4332extern tree dfs_walk PARAMS ((tree,
d6479fe7
MM
4333 tree (*)(tree, void *),
4334 tree (*) (tree, void *),
4335 void *));
158991b7 4336extern tree dfs_walk_real PARAMS ((tree,
bbd15aac
MM
4337 tree (*) (tree, void *),
4338 tree (*) (tree, void *),
4339 tree (*) (tree, void *),
4340 void *));
158991b7 4341extern tree dfs_unmark PARAMS ((tree, void *));
158991b7
KG
4342extern tree markedp PARAMS ((tree, void *));
4343extern tree unmarkedp PARAMS ((tree, void *));
4344extern tree dfs_skip_nonprimary_vbases_unmarkedp PARAMS ((tree, void *));
4345extern tree dfs_skip_nonprimary_vbases_markedp PARAMS ((tree, void *));
4346extern tree dfs_unmarked_real_bases_queue_p PARAMS ((tree, void *));
4347extern tree dfs_marked_real_bases_queue_p PARAMS ((tree, void *));
158991b7 4348extern tree dfs_skip_vbases PARAMS ((tree, void *));
da3d4dfa
MM
4349extern tree marked_vtable_pathp PARAMS ((tree, void *));
4350extern tree unmarked_vtable_pathp PARAMS ((tree, void *));
158991b7
KG
4351extern tree convert_pointer_to_vbase PARAMS ((tree, tree));
4352extern tree find_vbase_instance PARAMS ((tree, tree));
a55583e9 4353extern tree binfo_for_vbase PARAMS ((tree, tree));
3ec6bad3 4354extern void fixup_all_virtual_upcast_offsets PARAMS ((tree));
8d08fdba 4355
ad321293 4356/* in semantics.c */
158991b7
KG
4357extern void finish_expr_stmt PARAMS ((tree));
4358extern tree begin_if_stmt PARAMS ((void));
4359extern void finish_if_stmt_cond PARAMS ((tree, tree));
4360extern tree finish_then_clause PARAMS ((tree));
4361extern void begin_else_clause PARAMS ((void));
4362extern void finish_else_clause PARAMS ((tree));
4363extern void finish_if_stmt PARAMS ((void));
4364extern tree begin_while_stmt PARAMS ((void));
4365extern void finish_while_stmt_cond PARAMS ((tree, tree));
4366extern void finish_while_stmt PARAMS ((tree));
4367extern tree begin_do_stmt PARAMS ((void));
4368extern void finish_do_body PARAMS ((tree));
4369extern void finish_do_stmt PARAMS ((tree, tree));
4370extern void finish_return_stmt PARAMS ((tree));
4371extern tree begin_for_stmt PARAMS ((void));
4372extern void finish_for_init_stmt PARAMS ((tree));
4373extern void finish_for_cond PARAMS ((tree, tree));
4374extern void finish_for_expr PARAMS ((tree, tree));
35b1567d 4375extern void finish_for_stmt PARAMS ((tree));
158991b7
KG
4376extern void finish_break_stmt PARAMS ((void));
4377extern void finish_continue_stmt PARAMS ((void));
4378extern tree begin_switch_stmt PARAMS ((void));
4379extern void finish_switch_cond PARAMS ((tree, tree));
35b1567d 4380extern void finish_switch_stmt PARAMS ((tree));
158991b7
KG
4381extern void finish_case_label PARAMS ((tree, tree));
4382extern void finish_goto_stmt PARAMS ((tree));
4383extern tree begin_try_block PARAMS ((void));
4384extern void finish_try_block PARAMS ((tree));
4385extern void finish_handler_sequence PARAMS ((tree));
4386extern tree begin_function_try_block PARAMS ((void));
4387extern void finish_function_try_block PARAMS ((tree));
4388extern void finish_function_handler_sequence PARAMS ((tree));
4389extern void finish_cleanup_try_block PARAMS ((tree));
4390extern tree begin_handler PARAMS ((void));
4391extern tree finish_handler_parms PARAMS ((tree, tree));
4392extern void begin_catch_block PARAMS ((tree));
4393extern void finish_handler PARAMS ((tree, tree));
4394extern void finish_cleanup PARAMS ((tree, tree));
4395extern tree begin_compound_stmt PARAMS ((int));
4396extern tree finish_compound_stmt PARAMS ((int, tree));
4397extern void finish_asm_stmt PARAMS ((tree, tree, tree, tree, tree));
4398extern void finish_label_stmt PARAMS ((tree));
4399extern void finish_label_decl PARAMS ((tree));
4400extern void finish_subobject PARAMS ((tree));
4401extern tree finish_parenthesized_expr PARAMS ((tree));
4402extern tree begin_stmt_expr PARAMS ((void));
4403extern tree finish_stmt_expr PARAMS ((tree));
4404extern tree finish_call_expr PARAMS ((tree, tree, int));
4405extern tree finish_increment_expr PARAMS ((tree, enum tree_code));
4406extern tree finish_this_expr PARAMS ((void));
4407extern tree finish_object_call_expr PARAMS ((tree, tree, tree));
4408extern tree finish_qualified_object_call_expr PARAMS ((tree, tree, tree));
4409extern tree finish_pseudo_destructor_call_expr PARAMS ((tree, tree, tree));
4410extern tree finish_qualified_call_expr PARAMS ((tree, tree));
4411extern tree finish_label_address_expr PARAMS ((tree));
4412extern tree finish_unary_op_expr PARAMS ((enum tree_code, tree));
4413extern tree finish_id_expr PARAMS ((tree));
1f51a992
JM
4414extern void save_type_access_control PARAMS ((tree));
4415extern void decl_type_access_control PARAMS ((tree));
4416extern int begin_function_definition PARAMS ((tree, tree));
158991b7
KG
4417extern tree begin_constructor_declarator PARAMS ((tree, tree));
4418extern tree finish_declarator PARAMS ((tree, tree, tree, tree, int));
4419extern void finish_translation_unit PARAMS ((void));
4420extern tree finish_template_type_parm PARAMS ((tree, tree));
4421extern tree finish_template_template_parm PARAMS ((tree, tree));
4422extern tree finish_parmlist PARAMS ((tree, int));
4423extern tree begin_class_definition PARAMS ((tree));
4424extern tree finish_class_definition PARAMS ((tree, tree, int, int));
4425extern void finish_default_args PARAMS ((void));
4426extern void begin_inline_definitions PARAMS ((void));
4427extern void finish_inline_definitions PARAMS ((void));
4428extern tree finish_member_class_template PARAMS ((tree));
4429extern void finish_template_decl PARAMS ((tree));
4430extern tree finish_template_type PARAMS ((tree, tree, int));
4431extern void enter_scope_of PARAMS ((tree));
4432extern tree finish_base_specifier PARAMS ((tree, tree));
4433extern void finish_member_declaration PARAMS ((tree));
4434extern void check_multiple_declarators PARAMS ((void));
4435extern tree finish_typeof PARAMS ((tree));
4436extern void add_decl_stmt PARAMS ((tree));
4437extern void finish_decl_cleanup PARAMS ((tree, tree));
4438extern void finish_named_return_value PARAMS ((tree, tree));
158991b7
KG
4439extern void expand_body PARAMS ((tree));
4440extern void begin_stmt_tree PARAMS ((tree *));
4441extern void finish_stmt_tree PARAMS ((tree *));
4442extern void prep_stmt PARAMS ((tree));
4443extern tree add_scope_stmt PARAMS ((int, int));
4444extern void do_pushlevel PARAMS ((void));
4445extern tree do_poplevel PARAMS ((void));
bf3428d0 4446extern void finish_mem_initializers PARAMS ((tree));
b4c4a9ec 4447
35b1567d
BC
4448extern void genrtl_try_block PARAMS ((tree));
4449extern void genrtl_handler PARAMS ((tree));
4450extern void genrtl_catch_block PARAMS ((tree));
4451extern void genrtl_ctor_stmt PARAMS ((tree));
4452extern void genrtl_subobject PARAMS ((tree));
35b1567d 4453extern tree genrtl_do_poplevel PARAMS ((void));
f2c5f623 4454extern void clear_out_block PARAMS ((void));
35b1567d
BC
4455extern void genrtl_named_return_value PARAMS ((tree,
4456 tree));
596fd31c
MM
4457extern tree begin_global_stmt_expr PARAMS ((void));
4458extern tree finish_global_stmt_expr PARAMS ((tree));
35b1567d
BC
4459
4460
51c184be 4461/* in spew.c */
158991b7
KG
4462extern void init_spew PARAMS ((void));
4463extern int peekyylex PARAMS ((void));
4464extern int yylex PARAMS ((void));
4465extern tree arbitrate_lookup PARAMS ((tree, tree, tree));
8d08fdba 4466
51c184be 4467/* in tree.c */
158991b7
KG
4468extern void init_tree PARAMS ((void));
4469extern int pod_type_p PARAMS ((tree));
4470extern void unshare_base_binfos PARAMS ((tree));
4471extern int member_p PARAMS ((tree));
4472extern cp_lvalue_kind real_lvalue_p PARAMS ((tree));
4473extern tree build_min PARAMS ((enum tree_code, tree, ...));
4474extern tree build_min_nt PARAMS ((enum tree_code, ...));
4475extern int lvalue_p PARAMS ((tree));
4476extern int lvalue_or_else PARAMS ((tree, const char *));
4477extern tree build_cplus_new PARAMS ((tree, tree));
4478extern tree get_target_expr PARAMS ((tree));
4479extern tree break_out_cleanups PARAMS ((tree));
4480extern tree break_out_calls PARAMS ((tree));
4481extern tree build_cplus_method_type PARAMS ((tree, tree, tree));
4482extern tree build_cplus_staticfn_type PARAMS ((tree, tree, tree));
4483extern tree build_cplus_array_type PARAMS ((tree, tree));
4484extern tree hash_tree_cons PARAMS ((tree, tree, tree));
4485extern tree hash_tree_chain PARAMS ((tree, tree));
4486extern tree hash_chainon PARAMS ((tree, tree));
4487extern tree make_binfo PARAMS ((tree, tree, tree, tree));
4488extern tree binfo_value PARAMS ((tree, tree));
4489extern tree reverse_path PARAMS ((tree));
4490extern int count_functions PARAMS ((tree));
4491extern int is_overloaded_fn PARAMS ((tree));
4492extern tree get_first_fn PARAMS ((tree));
4493extern int bound_pmf_p PARAMS ((tree));
4494extern tree ovl_cons PARAMS ((tree, tree));
4495extern int ovl_member PARAMS ((tree, tree));
4496extern tree build_overload PARAMS ((tree, tree));
4497extern tree fnaddr_from_vtable_entry PARAMS ((tree));
4498extern tree function_arg_chain PARAMS ((tree));
4499extern int promotes_to_aggr_type PARAMS ((tree, enum tree_code));
4500extern int is_aggr_type_2 PARAMS ((tree, tree));
4501extern const char *lang_printable_name PARAMS ((tree, int));
4502extern tree build_exception_variant PARAMS ((tree, tree));
1899c3a4 4503extern tree copy_template_template_parm PARAMS ((tree, tree));
158991b7
KG
4504extern void print_lang_statistics PARAMS ((void));
4505extern tree array_type_nelts_total PARAMS ((tree));
4506extern tree array_type_nelts_top PARAMS ((tree));
4507extern tree break_out_target_exprs PARAMS ((tree));
4508extern tree get_type_decl PARAMS ((tree));
4509extern tree vec_binfo_member PARAMS ((tree, tree));
158991b7
KG
4510extern tree decl_namespace_context PARAMS ((tree));
4511extern tree lvalue_type PARAMS ((tree));
4512extern tree error_type PARAMS ((tree));
4513extern tree build_ptr_wrapper PARAMS ((void *));
4514extern tree build_expr_ptr_wrapper PARAMS ((void *));
4515extern tree build_int_wrapper PARAMS ((int));
4516extern tree build_srcloc_here PARAMS ((void));
4517extern int varargs_function_p PARAMS ((tree));
4518extern int really_overloaded_fn PARAMS ((tree));
4519extern int cp_tree_equal PARAMS ((tree, tree));
4520extern int can_free PARAMS ((struct obstack *, tree));
4521extern tree no_linkage_check PARAMS ((tree));
4522extern void debug_binfo PARAMS ((tree));
4523extern tree build_dummy_object PARAMS ((tree));
4524extern tree maybe_dummy_object PARAMS ((tree, tree *));
4525extern int is_dummy_object PARAMS ((tree));
4526typedef tree (*walk_tree_fn) PARAMS ((tree *, int *, void *));
4527extern tree walk_tree PARAMS ((tree *, walk_tree_fn, void *));
4528extern tree copy_tree_r PARAMS ((tree *, int *, void *));
4529extern int cp_valid_lang_attribute PARAMS ((tree, tree, tree, tree));
4530extern tree make_ptrmem_cst PARAMS ((tree, tree));
4531extern tree cp_build_qualified_type_real PARAMS ((tree, int, int));
4532extern void remap_save_expr PARAMS ((tree *, splay_tree, tree, int *));
adecb3f4
MM
4533#define cp_build_qualified_type(TYPE, QUALS) \
4534 cp_build_qualified_type_real ((TYPE), (QUALS), /*complain=*/1)
158991b7 4535extern tree build_shared_int_cst PARAMS ((int));
872f37f9 4536extern special_function_kind special_function_p PARAMS ((tree));
bf3428d0 4537extern int count_trees PARAMS ((tree));
7b019c19 4538extern int char_type_p PARAMS ((tree));
b2244c65
MM
4539extern void verify_stmt_tree PARAMS ((tree));
4540extern tree find_tree PARAMS ((tree, tree));
7b019c19 4541
51c184be 4542/* in typeck.c */
158991b7
KG
4543extern int string_conv_p PARAMS ((tree, tree, int));
4544extern tree condition_conversion PARAMS ((tree));
4545extern tree target_type PARAMS ((tree));
4546extern tree require_complete_type PARAMS ((tree));
4547extern tree complete_type PARAMS ((tree));
4548extern tree complete_type_or_else PARAMS ((tree, tree));
4549extern int type_unknown_p PARAMS ((tree));
158991b7
KG
4550extern tree commonparms PARAMS ((tree, tree));
4551extern tree original_type PARAMS ((tree));
158991b7
KG
4552extern int comp_except_specs PARAMS ((tree, tree, int));
4553extern int comptypes PARAMS ((tree, tree, int));
4554extern int comp_target_types PARAMS ((tree, tree, int));
4555extern int compparms PARAMS ((tree, tree));
4556extern int comp_target_types PARAMS ((tree, tree, int));
4557extern int comp_cv_qualification PARAMS ((tree, tree));
4558extern int comp_cv_qual_signature PARAMS ((tree, tree));
4559extern tree unsigned_type PARAMS ((tree));
4560extern tree signed_type PARAMS ((tree));
4561extern tree signed_or_unsigned_type PARAMS ((int, tree));
4562extern tree expr_sizeof PARAMS ((tree));
4563extern tree c_sizeof PARAMS ((tree));
4564extern tree c_sizeof_nowarn PARAMS ((tree));
4565extern tree c_alignof PARAMS ((tree));
4566extern tree inline_conversion PARAMS ((tree));
4567extern tree decay_conversion PARAMS ((tree));
158991b7
KG
4568extern tree build_object_ref PARAMS ((tree, tree, tree));
4569extern tree build_component_ref_1 PARAMS ((tree, tree, int));
4570extern tree build_component_ref PARAMS ((tree, tree, tree, int));
4571extern tree build_x_component_ref PARAMS ((tree, tree, tree, int));
4572extern tree build_x_indirect_ref PARAMS ((tree, const char *));
4573extern tree build_indirect_ref PARAMS ((tree, const char *));
4574extern tree build_array_ref PARAMS ((tree, tree));
4575extern tree build_x_function_call PARAMS ((tree, tree, tree));
4576extern tree get_member_function_from_ptrfunc PARAMS ((tree *, tree));
4577extern tree build_function_call_real PARAMS ((tree, tree, int, int));
4578extern tree build_function_call PARAMS ((tree, tree));
4579extern tree build_function_call_maybe PARAMS ((tree, tree));
4580extern tree convert_arguments PARAMS ((tree, tree, tree, int));
4581extern tree build_x_binary_op PARAMS ((enum tree_code, tree, tree));
158991b7 4582extern tree build_x_unary_op PARAMS ((enum tree_code, tree));
158991b7
KG
4583extern tree unary_complex_lvalue PARAMS ((enum tree_code, tree));
4584extern int mark_addressable PARAMS ((tree));
4585extern tree build_x_conditional_expr PARAMS ((tree, tree, tree));
4586extern tree build_conditional_expr PARAMS ((tree, tree, tree));
4587extern tree build_x_compound_expr PARAMS ((tree));
4588extern tree build_compound_expr PARAMS ((tree));
4589extern tree build_static_cast PARAMS ((tree, tree));
4590extern tree build_reinterpret_cast PARAMS ((tree, tree));
4591extern tree build_const_cast PARAMS ((tree, tree));
4592extern tree build_c_cast PARAMS ((tree, tree));
4593extern tree build_x_modify_expr PARAMS ((tree, enum tree_code, tree));
4594extern tree build_modify_expr PARAMS ((tree, enum tree_code, tree));
c3f08228 4595extern tree dubious_conversion_warnings PARAMS ((tree, tree, const char *, tree, int));
158991b7 4596extern tree convert_for_initialization PARAMS ((tree, tree, tree, int, const char *, tree, int));
158991b7
KG
4597extern int comp_ptr_ttypes PARAMS ((tree, tree));
4598extern int ptr_reasonably_similar PARAMS ((tree, tree));
4599extern tree build_ptrmemfunc PARAMS ((tree, tree, int));
4600extern tree strip_array_types PARAMS ((tree));
4601extern int cp_type_quals PARAMS ((tree));
4602extern int cp_has_mutable_p PARAMS ((tree));
4603extern int at_least_as_qualified_p PARAMS ((tree, tree));
4604extern int more_qualified_p PARAMS ((tree, tree));
4605extern tree build_ptrmemfunc1 PARAMS ((tree, tree, tree, tree, tree));
4606extern void expand_ptrmemfunc_cst PARAMS ((tree, tree *, tree *, tree *, tree *));
4607extern tree delta2_from_ptrmemfunc PARAMS ((tree));
4608extern tree pfn_from_ptrmemfunc PARAMS ((tree));
4609extern tree type_after_usual_arithmetic_conversions PARAMS ((tree, tree));
4610extern tree composite_pointer_type PARAMS ((tree, tree, tree, tree,
9c0758dd 4611 const char*));
158991b7 4612extern tree check_return_expr PARAMS ((tree));
ab76ca54
MM
4613#define cp_build_binary_op(code, arg1, arg2) \
4614 build_binary_op(code, arg1, arg2, 1)
8d08fdba 4615
51c184be 4616/* in typeck2.c */
158991b7
KG
4617extern tree error_not_base_type PARAMS ((tree, tree));
4618extern tree binfo_or_else PARAMS ((tree, tree));
4619extern void readonly_error PARAMS ((tree, const char *, int));
4620extern int abstract_virtuals_error PARAMS ((tree, tree));
4621extern void incomplete_type_error PARAMS ((tree, tree));
1b493b81
ZW
4622extern void friendly_abort PARAMS ((int, const char *,
4623 int, const char *))
b370501f 4624 ATTRIBUTE_NORETURN;
1b493b81
ZW
4625
4626#define my_friendly_abort(N) \
4627 friendly_abort (N, __FILE__, __LINE__, __FUNCTION__)
50e60bc3 4628#define my_friendly_assert(EXP, N) (void) \
1b493b81
ZW
4629 (((EXP) == 0) ? (friendly_abort (N, __FILE__, __LINE__, __FUNCTION__), 0) : 0)
4630
158991b7
KG
4631extern tree store_init_value PARAMS ((tree, tree));
4632extern tree digest_init PARAMS ((tree, tree, tree *));
4633extern tree build_scoped_ref PARAMS ((tree, tree));
4634extern tree build_x_arrow PARAMS ((tree));
4635extern tree build_m_component_ref PARAMS ((tree, tree));
4636extern tree build_functional_cast PARAMS ((tree, tree));
4637extern char *enum_name_string PARAMS ((tree, tree));
4638extern void report_case_error PARAMS ((int, tree, tree, tree));
4639extern void check_for_new_type PARAMS ((const char *, flagged_type_tree));
4640extern tree add_exception_specifier PARAMS ((tree, tree, int));
8d08fdba 4641
51c184be 4642/* in xref.c */
158991b7
KG
4643extern void GNU_xref_begin PARAMS ((const char *));
4644extern void GNU_xref_end PARAMS ((int));
4645extern void GNU_xref_file PARAMS ((const char *));
4646extern void GNU_xref_start_scope PARAMS ((HOST_WIDE_INT));
4647extern void GNU_xref_end_scope PARAMS ((HOST_WIDE_INT, HOST_WIDE_INT, int, int));
4648extern void GNU_xref_ref PARAMS ((tree, const char *));
4649extern void GNU_xref_decl PARAMS ((tree, tree));
4650extern void GNU_xref_call PARAMS ((tree, const char *));
4651extern void GNU_xref_function PARAMS ((tree, tree));
4652extern void GNU_xref_assign PARAMS ((tree));
4653extern void GNU_xref_hier PARAMS ((tree, tree, int, int, int));
4654extern void GNU_xref_member PARAMS ((tree, tree));
8d08fdba 4655
f71f87f9 4656/* in dump.c */
158991b7 4657extern void dump_node_to_file PARAMS ((tree, const char *));
f71f87f9 4658
1f6e1acc
AS
4659/* in mangle.c */
4660extern void init_mangle PARAMS ((void));
4661extern tree mangle_decl PARAMS ((tree));
4662extern const char *mangle_type_string PARAMS ((tree));
4663extern tree mangle_type PARAMS ((tree));
4664extern tree mangle_typeinfo_for_type PARAMS ((tree));
4665extern tree mangle_typeinfo_string_for_type PARAMS ((tree));
4666extern tree mangle_vtbl_for_type PARAMS ((tree));
4667extern tree mangle_vtt_for_type PARAMS ((tree));
4668extern tree mangle_ctor_vtbl_for_type PARAMS ((tree, tree));
31f8e4f3 4669extern tree mangle_thunk PARAMS ((tree, tree, tree));
1f6e1acc
AS
4670extern tree mangle_conv_op_name_for_type PARAMS ((tree));
4671extern tree mangle_guard_variable PARAMS ((tree));
4672
8d08fdba
MS
4673/* -- end of C++ */
4674
4675#endif /* not _CP_TREE_H */
This page took 1.482508 seconds and 5 git commands to generate.