]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/cp/tree.c
ChangeLog: Fix typos.
[thirdparty/gcc.git] / gcc / cp / tree.c
CommitLineData
8d08fdba 1/* Language-dependent node constructors for parse phase of GNU compiler.
06ceef4e 2 Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
dbbf88d1 3 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
8d08fdba
MS
4 Hacked by Michael Tiemann (tiemann@cygnus.com)
5
f5adbb8d 6This file is part of GCC.
8d08fdba 7
f5adbb8d 8GCC is free software; you can redistribute it and/or modify
8d08fdba
MS
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
f5adbb8d 13GCC is distributed in the hope that it will be useful,
8d08fdba
MS
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
f5adbb8d 19along with GCC; 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
MS
22
23#include "config.h"
8d052bc7 24#include "system.h"
4977bab6
ZW
25#include "coretypes.h"
26#include "tm.h"
8d08fdba
MS
27#include "tree.h"
28#include "cp-tree.h"
29#include "flags.h"
11ad4784 30#include "real.h"
28cbf42c 31#include "rtl.h"
12027a89 32#include "toplev.h"
46e8c075
MM
33#include "insn-config.h"
34#include "integrate.h"
25af8512 35#include "tree-inline.h"
8a3c9180 36#include "target.h"
12027a89 37
b57b79f7
NN
38static tree bot_manip (tree *, int *, void *);
39static tree bot_replace (tree *, int *, void *);
40static tree build_cplus_array_type_1 (tree, tree);
41static int list_hash_eq (const void *, const void *);
42static hashval_t list_hash_pieces (tree, tree, tree);
43static hashval_t list_hash (const void *);
d18a8251 44static cp_lvalue_kind lvalue_p_1 (tree, int);
b57b79f7
NN
45static tree no_linkage_helper (tree *, int *, void *);
46static tree mark_local_for_remap_r (tree *, int *, void *);
47static tree cp_unsave_r (tree *, int *, void *);
48static tree build_target_expr (tree, tree);
49static tree count_trees_r (tree *, int *, void *);
50static tree verify_stmt_tree_r (tree *, int *, void *);
51static tree find_tree_r (tree *, int *, void *);
52
53static tree handle_java_interface_attribute (tree *, tree, tree, int, bool *);
54static tree handle_com_interface_attribute (tree *, tree, tree, int, bool *);
55static tree handle_init_priority_attribute (tree *, tree, tree, int, bool *);
91d231cb 56
27b8d0cd
MM
57/* If REF is an lvalue, returns the kind of lvalue that REF is.
58 Otherwise, returns clk_none. If TREAT_CLASS_RVALUES_AS_LVALUES is
838dfd8a 59 nonzero, rvalues of class type are considered lvalues. */
8d08fdba 60
27b8d0cd 61static cp_lvalue_kind
b57b79f7 62lvalue_p_1 (tree ref,
d18a8251 63 int treat_class_rvalues_as_lvalues)
8ccc31eb 64{
27b8d0cd
MM
65 cp_lvalue_kind op1_lvalue_kind = clk_none;
66 cp_lvalue_kind op2_lvalue_kind = clk_none;
67
8ccc31eb 68 if (TREE_CODE (TREE_TYPE (ref)) == REFERENCE_TYPE)
27b8d0cd 69 return clk_ordinary;
8ccc31eb 70
394fd776 71 if (ref == current_class_ptr)
27b8d0cd 72 return clk_none;
8ccc31eb
MS
73
74 switch (TREE_CODE (ref))
75 {
76 /* preincrements and predecrements are valid lvals, provided
e92cc029 77 what they refer to are valid lvals. */
8ccc31eb
MS
78 case PREINCREMENT_EXPR:
79 case PREDECREMENT_EXPR:
8ccc31eb 80 case SAVE_EXPR:
c7ae64f2
JM
81 case UNSAVE_EXPR:
82 case TRY_CATCH_EXPR:
83 case WITH_CLEANUP_EXPR:
69851283
MM
84 case REALPART_EXPR:
85 case IMAGPART_EXPR:
86 return lvalue_p_1 (TREE_OPERAND (ref, 0),
d18a8251 87 treat_class_rvalues_as_lvalues);
8ccc31eb 88
27b8d0cd
MM
89 case COMPONENT_REF:
90 op1_lvalue_kind = lvalue_p_1 (TREE_OPERAND (ref, 0),
d18a8251 91 treat_class_rvalues_as_lvalues);
e0d1297c
NS
92 if (!op1_lvalue_kind
93 /* The "field" can be a FUNCTION_DECL or an OVERLOAD in some
94 situations. */
95 || TREE_CODE (TREE_OPERAND (ref, 1)) != FIELD_DECL)
96 ;
97 else if (DECL_C_BIT_FIELD (TREE_OPERAND (ref, 1)))
27b8d0cd
MM
98 {
99 /* Clear the ordinary bit. If this object was a class
100 rvalue we want to preserve that information. */
101 op1_lvalue_kind &= ~clk_ordinary;
cd0be382 102 /* The lvalue is for a bitfield. */
27b8d0cd
MM
103 op1_lvalue_kind |= clk_bitfield;
104 }
e0d1297c
NS
105 else if (DECL_PACKED (TREE_OPERAND (ref, 1)))
106 op1_lvalue_kind |= clk_packed;
107
27b8d0cd
MM
108 return op1_lvalue_kind;
109
8ccc31eb 110 case STRING_CST:
27b8d0cd 111 return clk_ordinary;
8ccc31eb
MS
112
113 case VAR_DECL:
114 if (TREE_READONLY (ref) && ! TREE_STATIC (ref)
115 && DECL_LANG_SPECIFIC (ref)
116 && DECL_IN_AGGR_P (ref))
27b8d0cd 117 return clk_none;
8ccc31eb
MS
118 case INDIRECT_REF:
119 case ARRAY_REF:
120 case PARM_DECL:
121 case RESULT_DECL:
59e76fc6 122 if (TREE_CODE (TREE_TYPE (ref)) != METHOD_TYPE)
27b8d0cd 123 return clk_ordinary;
8ccc31eb
MS
124 break;
125
8ccc31eb
MS
126 /* A currently unresolved scope ref. */
127 case SCOPE_REF:
a98facb0 128 abort ();
27b8d0cd
MM
129 case MAX_EXPR:
130 case MIN_EXPR:
131 op1_lvalue_kind = lvalue_p_1 (TREE_OPERAND (ref, 0),
d18a8251 132 treat_class_rvalues_as_lvalues);
27b8d0cd 133 op2_lvalue_kind = lvalue_p_1 (TREE_OPERAND (ref, 1),
d18a8251 134 treat_class_rvalues_as_lvalues);
8ccc31eb
MS
135 break;
136
137 case COND_EXPR:
27b8d0cd 138 op1_lvalue_kind = lvalue_p_1 (TREE_OPERAND (ref, 1),
d18a8251 139 treat_class_rvalues_as_lvalues);
27b8d0cd 140 op2_lvalue_kind = lvalue_p_1 (TREE_OPERAND (ref, 2),
d18a8251 141 treat_class_rvalues_as_lvalues);
27b8d0cd 142 break;
8ccc31eb
MS
143
144 case MODIFY_EXPR:
27b8d0cd 145 return clk_ordinary;
8ccc31eb
MS
146
147 case COMPOUND_EXPR:
69851283 148 return lvalue_p_1 (TREE_OPERAND (ref, 1),
d18a8251 149 treat_class_rvalues_as_lvalues);
69851283
MM
150
151 case TARGET_EXPR:
27b8d0cd 152 return treat_class_rvalues_as_lvalues ? clk_class : clk_none;
69851283
MM
153
154 case CALL_EXPR:
356955cf 155 case VA_ARG_EXPR:
4e8dca1c
JM
156 /* Any class-valued call would be wrapped in a TARGET_EXPR. */
157 return clk_none;
69851283
MM
158
159 case FUNCTION_DECL:
160 /* All functions (except non-static-member functions) are
161 lvalues. */
27b8d0cd
MM
162 return (DECL_NONSTATIC_MEMBER_FUNCTION_P (ref)
163 ? clk_none : clk_ordinary);
7f85441b 164
d17811fd
MM
165 case NON_DEPENDENT_EXPR:
166 /* We must consider NON_DEPENDENT_EXPRs to be lvalues so that
167 things like "&E" where "E" is an expression with a
168 non-dependent type work. It is safe to be lenient because an
169 error will be issued when the template is instantiated if "E"
170 is not an lvalue. */
171 return clk_ordinary;
172
7f85441b
KG
173 default:
174 break;
8ccc31eb
MS
175 }
176
27b8d0cd
MM
177 /* If one operand is not an lvalue at all, then this expression is
178 not an lvalue. */
179 if (!op1_lvalue_kind || !op2_lvalue_kind)
180 return clk_none;
181
182 /* Otherwise, it's an lvalue, and it has all the odd properties
183 contributed by either operand. */
184 op1_lvalue_kind = op1_lvalue_kind | op2_lvalue_kind;
185 /* It's not an ordinary lvalue if it involves either a bit-field or
186 a class rvalue. */
187 if ((op1_lvalue_kind & ~clk_ordinary) != clk_none)
188 op1_lvalue_kind &= ~clk_ordinary;
189 return op1_lvalue_kind;
8ccc31eb
MS
190}
191
aa6e8ed3
MM
192/* Returns the kind of lvalue that REF is, in the sense of
193 [basic.lval]. This function should really be named lvalue_p; it
194 computes the C++ definition of lvalue. */
195
196cp_lvalue_kind
d18a8251 197real_lvalue_p (tree ref)
aa6e8ed3
MM
198{
199 return lvalue_p_1 (ref,
d18a8251 200 /*treat_class_rvalues_as_lvalues=*/0);
aa6e8ed3
MM
201}
202
27b8d0cd
MM
203/* This differs from real_lvalue_p in that class rvalues are
204 considered lvalues. */
69851283 205
8d08fdba 206int
b57b79f7 207lvalue_p (tree ref)
8d08fdba 208{
27b8d0cd 209 return
d18a8251 210 (lvalue_p_1 (ref, /*class rvalue ok*/ 1) != clk_none);
6c6e776d
MA
211}
212
8d08fdba
MS
213/* Return nonzero if REF is an lvalue valid for this language;
214 otherwise, print an error message and return zero. */
215
216int
b57b79f7 217lvalue_or_else (tree ref, const char* string)
8d08fdba 218{
d18a8251
MM
219 if (!lvalue_p (ref))
220 {
221 error ("non-lvalue in %s", string);
222 return 0;
223 }
224 return 1;
8d08fdba
MS
225}
226
c506ca22
MM
227/* Build a TARGET_EXPR, initializing the DECL with the VALUE. */
228
229static tree
b57b79f7 230build_target_expr (tree decl, tree value)
c506ca22
MM
231{
232 tree t;
233
234 t = build (TARGET_EXPR, TREE_TYPE (decl), decl, value,
c88770e9 235 cxx_maybe_build_cleanup (decl), NULL_TREE);
c506ca22
MM
236 /* We always set TREE_SIDE_EFFECTS so that expand_expr does not
237 ignore the TARGET_EXPR. If there really turn out to be no
238 side-effects, then the optimizer should be able to get rid of
239 whatever code is generated anyhow. */
240 TREE_SIDE_EFFECTS (t) = 1;
241
242 return t;
243}
244
8d08fdba
MS
245/* INIT is a CALL_EXPR which needs info about its target.
246 TYPE is the type that this initialization should appear to have.
247
248 Build an encapsulation of the initialization to perform
249 and return it so that it can be processed by language-independent
2ee887f2 250 and language-specific expression expanders. */
e92cc029 251
8d08fdba 252tree
b57b79f7 253build_cplus_new (tree type, tree init)
8d08fdba 254{
e1376b00 255 tree fn;
e8abc66f
MS
256 tree slot;
257 tree rval;
4977bab6 258 int is_ctor;
e8abc66f 259
27b8d0cd
MM
260 /* Make sure that we're not trying to create an instance of an
261 abstract class. */
5bb2f1e7 262 abstract_virtuals_error (NULL_TREE, type);
27b8d0cd 263
02531345 264 if (TREE_CODE (init) != CALL_EXPR && TREE_CODE (init) != AGGR_INIT_EXPR)
06126ca2 265 return convert (type, init);
c11b6f21 266
4977bab6
ZW
267 fn = TREE_OPERAND (init, 0);
268 is_ctor = (TREE_CODE (fn) == ADDR_EXPR
269 && TREE_CODE (TREE_OPERAND (fn, 0)) == FUNCTION_DECL
270 && DECL_CONSTRUCTOR_P (TREE_OPERAND (fn, 0)));
271
1456deaf 272 slot = build_decl (VAR_DECL, NULL_TREE, type);
aa36c081 273 DECL_ARTIFICIAL (slot) = 1;
46e8c075 274 DECL_CONTEXT (slot) = current_function_decl;
e8abc66f 275 layout_decl (slot, 0);
e1376b00
MM
276
277 /* We split the CALL_EXPR into its function and its arguments here.
278 Then, in expand_expr, we put them back together. The reason for
279 this is that this expression might be a default argument
280 expression. In that case, we need a new temporary every time the
281 expression is used. That's what break_out_target_exprs does; it
282 replaces every AGGR_INIT_EXPR with a copy that uses a fresh
283 temporary slot. Then, expand_expr builds up a call-expression
284 using the new slot. */
4977bab6
ZW
285
286 /* If we don't need to use a constructor to create an object of this
287 type, don't mess with AGGR_INIT_EXPR. */
288 if (is_ctor || TREE_ADDRESSABLE (type))
289 {
290 rval = build (AGGR_INIT_EXPR, type, fn, TREE_OPERAND (init, 1), slot);
291 TREE_SIDE_EFFECTS (rval) = 1;
292 AGGR_INIT_VIA_CTOR_P (rval) = is_ctor;
293 }
294 else
295 rval = init;
296
9d85d30c 297 rval = build_target_expr (slot, rval);
8d08fdba 298
8d08fdba
MS
299 return rval;
300}
301
ab93b543 302/* Build a TARGET_EXPR using INIT to initialize a new temporary of the
c506ca22 303 indicated TYPE. */
aa36c081
JM
304
305tree
b57b79f7 306build_target_expr_with_type (tree init, tree type)
aa36c081
JM
307{
308 tree slot;
309 tree rval;
310
5062dbd5
JM
311 if (TREE_CODE (init) == TARGET_EXPR)
312 return init;
182609b5
JM
313 else if (CLASS_TYPE_P (type) && !TYPE_HAS_TRIVIAL_INIT_REF (type)
314 && TREE_CODE (init) != COND_EXPR)
315 /* We need to build up a copy constructor call. COND_EXPR is a special
316 case because we already have copies on the arms and we don't want
317 another one here. */
318 return force_rvalue (init);
5062dbd5 319
1456deaf 320 slot = build_decl (VAR_DECL, NULL_TREE, type);
aa36c081 321 DECL_ARTIFICIAL (slot) = 1;
c506ca22 322 DECL_CONTEXT (slot) = current_function_decl;
aa36c081 323 layout_decl (slot, 0);
9d85d30c 324 rval = build_target_expr (slot, init);
aa36c081
JM
325
326 return rval;
327}
328
c506ca22
MM
329/* Like build_target_expr_with_type, but use the type of INIT. */
330
331tree
b57b79f7 332get_target_expr (tree init)
c506ca22
MM
333{
334 return build_target_expr_with_type (init, TREE_TYPE (init));
335}
336
8d08fdba 337\f
bd6dd845 338static tree
b57b79f7 339build_cplus_array_type_1 (tree elt_type, tree index_type)
8d08fdba 340{
8d08fdba
MS
341 tree t;
342
adecb3f4
MM
343 if (elt_type == error_mark_node || index_type == error_mark_node)
344 return error_mark_node;
345
a49cfba8
JM
346 /* Don't do the minimal thing just because processing_template_decl is
347 set; we want to give string constants the right type immediately, so
348 we don't have to fix them up at instantiation time. */
349 if ((processing_template_decl
350 && index_type && TYPE_MAX_VALUE (index_type)
351 && TREE_CODE (TYPE_MAX_VALUE (index_type)) != INTEGER_CST)
7bdbfa05 352 || uses_template_parms (elt_type)
e6237031 353 || (index_type && uses_template_parms (index_type)))
5566b478
MS
354 {
355 t = make_node (ARRAY_TYPE);
356 TREE_TYPE (t) = elt_type;
357 TYPE_DOMAIN (t) = index_type;
358 }
359 else
80661759 360 t = build_array_type (elt_type, index_type);
8d08fdba
MS
361
362 /* Push these needs up so that initialization takes place
363 more easily. */
db3626d1
MM
364 TYPE_NEEDS_CONSTRUCTING (t)
365 = TYPE_NEEDS_CONSTRUCTING (TYPE_MAIN_VARIANT (elt_type));
834c6dff
MM
366 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t)
367 = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TYPE_MAIN_VARIANT (elt_type));
8d08fdba
MS
368 return t;
369}
e349ee73
MS
370
371tree
b57b79f7 372build_cplus_array_type (tree elt_type, tree index_type)
e349ee73
MS
373{
374 tree t;
89d684bb 375 int type_quals = cp_type_quals (elt_type);
91063b51 376
4b011bbf
JM
377 if (type_quals != TYPE_UNQUALIFIED)
378 elt_type = cp_build_qualified_type (elt_type, TYPE_UNQUALIFIED);
e349ee73
MS
379
380 t = build_cplus_array_type_1 (elt_type, index_type);
381
4b011bbf
JM
382 if (type_quals != TYPE_UNQUALIFIED)
383 t = cp_build_qualified_type (t, type_quals);
e349ee73
MS
384
385 return t;
386}
8d08fdba 387\f
adecb3f4
MM
388/* Make a variant of TYPE, qualified with the TYPE_QUALS. Handles
389 arrays correctly. In particular, if TYPE is an array of T's, and
c2ea3a40 390 TYPE_QUALS is non-empty, returns an array of qualified T's.
4f2b0fb2
NS
391
392 FLAGS determines how to deal with illformed qualifications. If
393 tf_ignore_bad_quals is set, then bad qualifications are dropped
394 (this is permitted if TYPE was introduced via a typedef or template
395 type parameter). If bad qualifications are dropped and tf_warning
396 is set, then a warning is issued for non-const qualifications. If
397 tf_ignore_bad_quals is not set and tf_error is not set, we
398 return error_mark_node. Otherwise, we issue an error, and ignore
399 the qualifications.
400
401 Qualification of a reference type is valid when the reference came
402 via a typedef or template type argument. [dcl.ref] No such
403 dispensation is provided for qualifying a function type. [dcl.fct]
404 DR 295 queries this and the proposed resolution brings it into line
34cd5ae7 405 with qualifying a reference. We implement the DR. We also behave
4f2b0fb2
NS
406 in a similar manner for restricting non-pointer types. */
407
f376e137 408tree
b57b79f7
NN
409cp_build_qualified_type_real (tree type,
410 int type_quals,
411 tsubst_flags_t complain)
f376e137 412{
2adeacc9 413 tree result;
4f2b0fb2 414 int bad_quals = TYPE_UNQUALIFIED;
171d2f50
NS
415 /* We keep bad function qualifiers separate, so that we can decide
416 whether to implement DR 295 or not. DR 295 break existing code,
417 unfortunately. Remove this variable to implement the defect
418 report. */
419 int bad_func_quals = TYPE_UNQUALIFIED;
2adeacc9 420
e76a2646
MS
421 if (type == error_mark_node)
422 return type;
e271912d 423
89d684bb 424 if (type_quals == cp_type_quals (type))
e271912d
JM
425 return type;
426
4f2b0fb2 427 if (TREE_CODE (type) == ARRAY_TYPE)
f376e137 428 {
db3626d1
MM
429 /* In C++, the qualification really applies to the array element
430 type. Obtain the appropriately qualified element type. */
431 tree t;
432 tree element_type
433 = cp_build_qualified_type_real (TREE_TYPE (type),
434 type_quals,
435 complain);
436
437 if (element_type == error_mark_node)
adecb3f4 438 return error_mark_node;
f376e137 439
29fae15c
MM
440 /* See if we already have an identically qualified type. */
441 for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
442 if (cp_type_quals (t) == type_quals
443 && TYPE_NAME (t) == TYPE_NAME (type)
444 && TYPE_CONTEXT (t) == TYPE_CONTEXT (type))
445 break;
446
447 if (!t)
448 {
449 /* Make a new array type, just like the old one, but with the
450 appropriately qualified element type. */
451 t = build_type_copy (type);
452 TREE_TYPE (t) = element_type;
453 }
f376e137 454
db3626d1 455 /* Even if we already had this variant, we update
834c6dff 456 TYPE_NEEDS_CONSTRUCTING and TYPE_HAS_NONTRIVIAL_DESTRUCTOR in case
db3626d1
MM
457 they changed since the variant was originally created.
458
459 This seems hokey; if there is some way to use a previous
460 variant *without* coming through here,
461 TYPE_NEEDS_CONSTRUCTING will never be updated. */
462 TYPE_NEEDS_CONSTRUCTING (t)
463 = TYPE_NEEDS_CONSTRUCTING (TYPE_MAIN_VARIANT (element_type));
834c6dff
MM
464 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t)
465 = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TYPE_MAIN_VARIANT (element_type));
db3626d1 466 return t;
f376e137 467 }
2adeacc9
MM
468 else if (TYPE_PTRMEMFUNC_P (type))
469 {
470 /* For a pointer-to-member type, we can't just return a
471 cv-qualified version of the RECORD_TYPE. If we do, we
4f2b0fb2 472 haven't changed the field that contains the actual pointer to
2adeacc9
MM
473 a method, and so TYPE_PTRMEMFUNC_FN_TYPE will be wrong. */
474 tree t;
475
476 t = TYPE_PTRMEMFUNC_FN_TYPE (type);
477 t = cp_build_qualified_type_real (t, type_quals, complain);
46cbda4a 478 return build_ptrmemfunc_type (t);
2adeacc9 479 }
4f2b0fb2 480
4b011bbf
JM
481 /* A reference, function or method type shall not be cv qualified.
482 [dcl.ref], [dct.fct] */
483 if (type_quals & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE)
484 && (TREE_CODE (type) == REFERENCE_TYPE
485 || TREE_CODE (type) == FUNCTION_TYPE
486 || TREE_CODE (type) == METHOD_TYPE))
487 {
488 bad_quals |= type_quals & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE);
489 if (TREE_CODE (type) != REFERENCE_TYPE)
490 bad_func_quals |= type_quals & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE);
491 type_quals &= ~(TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE);
492 }
493
494 /* A restrict-qualified type must be a pointer (or reference)
495 to object or incomplete type. */
496 if ((type_quals & TYPE_QUAL_RESTRICT)
497 && TREE_CODE (type) != TEMPLATE_TYPE_PARM
498 && TREE_CODE (type) != TYPENAME_TYPE
499 && !POINTER_TYPE_P (type))
500 {
501 bad_quals |= TYPE_QUAL_RESTRICT;
502 type_quals &= ~TYPE_QUAL_RESTRICT;
503 }
504
505 if (bad_quals == TYPE_UNQUALIFIED)
506 /*OK*/;
507 else if (!(complain & (tf_error | tf_ignore_bad_quals)))
508 return error_mark_node;
509 else if (bad_func_quals && !(complain & tf_error))
510 return error_mark_node;
511 else
512 {
513 if (complain & tf_ignore_bad_quals)
514 /* We're not going to warn about constifying things that can't
515 be constified. */
516 bad_quals &= ~TYPE_QUAL_CONST;
517 bad_quals |= bad_func_quals;
518 if (bad_quals)
519 {
520 tree bad_type = build_qualified_type (ptr_type_node, bad_quals);
521
522 if (!(complain & tf_ignore_bad_quals)
523 || bad_func_quals)
524 error ("`%V' qualifiers cannot be applied to `%T'",
525 bad_type, type);
526 }
527 }
528
2adeacc9
MM
529 /* Retrieve (or create) the appropriately qualified variant. */
530 result = build_qualified_type (type, type_quals);
531
532 /* If this was a pointer-to-method type, and we just made a copy,
3cfab7ec
GK
533 then we need to unshare the record that holds the cached
534 pointer-to-member-function type, because these will be distinct
535 between the unqualified and qualified types. */
2adeacc9
MM
536 if (result != type
537 && TREE_CODE (type) == POINTER_TYPE
538 && TREE_CODE (TREE_TYPE (type)) == METHOD_TYPE)
3cfab7ec 539 TYPE_LANG_SPECIFIC (result) = NULL;
2adeacc9
MM
540
541 return result;
f376e137 542}
53929c47
JM
543
544/* Returns the canonical version of TYPE. In other words, if TYPE is
545 a typedef, returns the underlying type. The cv-qualification of
546 the type returned matches the type input; they will always be
547 compatible types. */
548
549tree
b57b79f7 550canonical_type_variant (tree t)
53929c47 551{
89d684bb 552 return cp_build_qualified_type (TYPE_MAIN_VARIANT (t), cp_type_quals (t));
53929c47 553}
f376e137 554\f
dbbf88d1
NS
555/* Makes new binfos for the indirect bases under BINFO. T is the most
556 derived TYPE. PREV is the previous binfo, whose TREE_CHAIN we make
557 point to this binfo. We return the last BINFO created.
9a71c18b 558
dbbf88d1
NS
559 The CLASSTYPE_VBASECLASSES list of T is constructed in reverse
560 order (pre-order, depth-first, right-to-left). You must nreverse it.
561
562 The BINFO_INHERITANCE of a virtual base class points to the binfo
563 og the most derived type.
564
565 The binfo's TREE_CHAIN is set to inheritance graph order, but bases
566 for non-class types are not included (i.e. those which are
567 dependent bases in non-instantiated templates). */
568
569tree
b57b79f7 570copy_base_binfos (tree binfo, tree t, tree prev)
9a71c18b 571{
dfbcd65a 572 tree binfos = BINFO_BASETYPES (binfo);
dbbf88d1 573 int n, ix;
9a71c18b 574
dbbf88d1
NS
575 if (prev)
576 TREE_CHAIN (prev) = binfo;
577 prev = binfo;
578
dfbcd65a 579 if (binfos == NULL_TREE)
dbbf88d1 580 return prev;
9a71c18b 581
dbbf88d1
NS
582 n = TREE_VEC_LENGTH (binfos);
583
584 /* Now copy the structure beneath BINFO. */
585 for (ix = 0; ix != n; ix++)
dfbcd65a 586 {
dbbf88d1
NS
587 tree base_binfo = TREE_VEC_ELT (binfos, ix);
588 tree new_binfo = NULL_TREE;
589
590 if (!CLASS_TYPE_P (BINFO_TYPE (base_binfo)))
591 {
592 my_friendly_assert (binfo == TYPE_BINFO (t), 20030204);
593
594 new_binfo = base_binfo;
595 TREE_CHAIN (prev) = new_binfo;
596 prev = new_binfo;
597 BINFO_INHERITANCE_CHAIN (new_binfo) = binfo;
598 BINFO_DEPENDENT_BASE_P (new_binfo) = 1;
599 }
600 else if (TREE_VIA_VIRTUAL (base_binfo))
601 {
602 new_binfo = purpose_member (BINFO_TYPE (base_binfo),
603 CLASSTYPE_VBASECLASSES (t));
604 if (new_binfo)
605 new_binfo = TREE_VALUE (new_binfo);
606 }
607
608 if (!new_binfo)
609 {
610 new_binfo = make_binfo (BINFO_OFFSET (base_binfo),
611 base_binfo, NULL_TREE,
612 BINFO_VIRTUALS (base_binfo));
613 prev = copy_base_binfos (new_binfo, t, prev);
614 if (TREE_VIA_VIRTUAL (base_binfo))
615 {
616 CLASSTYPE_VBASECLASSES (t)
617 = tree_cons (BINFO_TYPE (new_binfo), new_binfo,
618 CLASSTYPE_VBASECLASSES (t));
619 TREE_VIA_VIRTUAL (new_binfo) = 1;
620 BINFO_INHERITANCE_CHAIN (new_binfo) = TYPE_BINFO (t);
621 }
622 else
623 BINFO_INHERITANCE_CHAIN (new_binfo) = binfo;
624 }
625 TREE_VEC_ELT (binfos, ix) = new_binfo;
9a71c18b 626 }
dbbf88d1
NS
627
628 return prev;
9a71c18b
JM
629}
630
8d08fdba
MS
631\f
632/* Hashing of lists so that we don't make duplicates.
633 The entry point is `list_hash_canon'. */
634
8d08fdba
MS
635/* Now here is the hash table. When recording a list, it is added
636 to the slot whose index is the hash code mod the table size.
637 Note that the hash table is used for several kinds of lists.
638 While all these live in the same table, they are completely independent,
639 and the hash code is computed differently for each of these. */
640
e2500fed 641static GTY ((param_is (union tree_node))) htab_t list_hash_table;
9ccb25d5
MM
642
643struct list_proxy
644{
645 tree purpose;
646 tree value;
647 tree chain;
648};
649
650/* Compare ENTRY (an entry in the hash table) with DATA (a list_proxy
651 for a node we are thinking about adding). */
652
653static int
b57b79f7 654list_hash_eq (const void* entry, const void* data)
9ccb25d5
MM
655{
656 tree t = (tree) entry;
657 struct list_proxy *proxy = (struct list_proxy *) data;
658
659 return (TREE_VALUE (t) == proxy->value
660 && TREE_PURPOSE (t) == proxy->purpose
661 && TREE_CHAIN (t) == proxy->chain);
662}
8d08fdba
MS
663
664/* Compute a hash code for a list (chain of TREE_LIST nodes
665 with goodies in the TREE_PURPOSE, TREE_VALUE, and bits of the
666 TREE_COMMON slots), by adding the hash codes of the individual entries. */
667
9ccb25d5 668static hashval_t
b57b79f7 669list_hash_pieces (tree purpose, tree value, tree chain)
8d08fdba 670{
9ccb25d5
MM
671 hashval_t hashcode = 0;
672
37c46b43
MS
673 if (chain)
674 hashcode += TYPE_HASH (chain);
9ccb25d5 675
37c46b43
MS
676 if (value)
677 hashcode += TYPE_HASH (value);
8d08fdba
MS
678 else
679 hashcode += 1007;
37c46b43
MS
680 if (purpose)
681 hashcode += TYPE_HASH (purpose);
8d08fdba
MS
682 else
683 hashcode += 1009;
684 return hashcode;
685}
686
9ccb25d5 687/* Hash an already existing TREE_LIST. */
8d08fdba 688
9ccb25d5 689static hashval_t
b57b79f7 690list_hash (const void* p)
8d08fdba 691{
9ccb25d5
MM
692 tree t = (tree) p;
693 return list_hash_pieces (TREE_PURPOSE (t),
694 TREE_VALUE (t),
695 TREE_CHAIN (t));
8d08fdba
MS
696}
697
51632249
JM
698/* Given list components PURPOSE, VALUE, AND CHAIN, return the canonical
699 object for an identical list if one already exists. Otherwise, build a
700 new one, and record it as the canonical object. */
8d08fdba 701
8d08fdba 702tree
b57b79f7 703hash_tree_cons (tree purpose, tree value, tree chain)
8d08fdba 704{
a703fb38 705 int hashcode = 0;
fad205ff 706 void **slot;
9ccb25d5
MM
707 struct list_proxy proxy;
708
709 /* Hash the list node. */
710 hashcode = list_hash_pieces (purpose, value, chain);
711 /* Create a proxy for the TREE_LIST we would like to create. We
712 don't actually create it so as to avoid creating garbage. */
713 proxy.purpose = purpose;
714 proxy.value = value;
715 proxy.chain = chain;
716 /* See if it is already in the table. */
717 slot = htab_find_slot_with_hash (list_hash_table, &proxy, hashcode,
718 INSERT);
719 /* If not, create a new node. */
720 if (!*slot)
fad205ff 721 *slot = tree_cons (purpose, value, chain);
9ccb25d5 722 return *slot;
8d08fdba
MS
723}
724
725/* Constructor for hashed lists. */
e92cc029 726
8d08fdba 727tree
b57b79f7 728hash_tree_chain (tree value, tree chain)
8d08fdba 729{
51632249 730 return hash_tree_cons (NULL_TREE, value, chain);
8d08fdba
MS
731}
732
733/* Similar, but used for concatenating two lists. */
e92cc029 734
8d08fdba 735tree
b57b79f7 736hash_chainon (tree list1, tree list2)
8d08fdba
MS
737{
738 if (list2 == 0)
739 return list1;
740 if (list1 == 0)
741 return list2;
742 if (TREE_CHAIN (list1) == NULL_TREE)
743 return hash_tree_chain (TREE_VALUE (list1), list2);
744 return hash_tree_chain (TREE_VALUE (list1),
745 hash_chainon (TREE_CHAIN (list1), list2));
746}
8d08fdba
MS
747\f
748/* Build an association between TYPE and some parameters:
749
750 OFFSET is the offset added to `this' to convert it to a pointer
751 of type `TYPE *'
752
8926095f
MS
753 BINFO is the base binfo to use, if we are deriving from one. This
754 is necessary, as we want specialized parent binfos from base
755 classes, so that the VTABLE_NAMEs of bases are for the most derived
38e01259 756 type, instead of the simple type.
8926095f 757
8d08fdba
MS
758 VTABLE is the virtual function table with which to initialize
759 sub-objects of type TYPE.
760
ca107ded 761 VIRTUALS are the virtual functions sitting in VTABLE. */
8d08fdba
MS
762
763tree
b57b79f7 764make_binfo (tree offset, tree binfo, tree vtable, tree virtuals)
8d08fdba 765{
1824b90d 766 tree new_binfo = make_tree_vec (BINFO_LANG_ELTS);
8926095f 767 tree type;
8d08fdba 768
8926095f 769 if (TREE_CODE (binfo) == TREE_VEC)
dbbf88d1
NS
770 {
771 type = BINFO_TYPE (binfo);
772 BINFO_DEPENDENT_BASE_P (new_binfo) = BINFO_DEPENDENT_BASE_P (binfo);
773 }
8926095f
MS
774 else
775 {
776 type = binfo;
dbbf88d1
NS
777 binfo = NULL_TREE;
778 BINFO_DEPENDENT_BASE_P (new_binfo) = 1;
8926095f 779 }
8d08fdba 780
8926095f
MS
781 TREE_TYPE (new_binfo) = TYPE_MAIN_VARIANT (type);
782 BINFO_OFFSET (new_binfo) = offset;
783 BINFO_VTABLE (new_binfo) = vtable;
784 BINFO_VIRTUALS (new_binfo) = virtuals;
8d08fdba 785
dbbf88d1
NS
786 if (binfo && !BINFO_DEPENDENT_BASE_P (binfo)
787 && BINFO_BASETYPES (binfo) != NULL_TREE)
8d08fdba 788 {
dbbf88d1
NS
789 BINFO_BASETYPES (new_binfo) = copy_node (BINFO_BASETYPES (binfo));
790 /* We do not need to copy the accesses, as they are read only. */
791 BINFO_BASEACCESSES (new_binfo) = BINFO_BASEACCESSES (binfo);
8d08fdba 792 }
dbbf88d1 793 return new_binfo;
8d08fdba
MS
794}
795
8d08fdba 796void
b57b79f7 797debug_binfo (tree elem)
8d08fdba 798{
fed3cef0 799 HOST_WIDE_INT n;
8d08fdba
MS
800 tree virtuals;
801
90ff44cf
KG
802 fprintf (stderr, "type \"%s\", offset = " HOST_WIDE_INT_PRINT_DEC
803 "\nvtable type:\n",
804 TYPE_NAME_STRING (BINFO_TYPE (elem)),
fed3cef0 805 TREE_INT_CST_LOW (BINFO_OFFSET (elem)));
8d08fdba
MS
806 debug_tree (BINFO_TYPE (elem));
807 if (BINFO_VTABLE (elem))
fed3cef0 808 fprintf (stderr, "vtable decl \"%s\"\n",
c35cce41 809 IDENTIFIER_POINTER (DECL_NAME (get_vtbl_decl_for_binfo (elem))));
8d08fdba
MS
810 else
811 fprintf (stderr, "no vtable decl yet\n");
812 fprintf (stderr, "virtuals:\n");
da3d4dfa 813 virtuals = BINFO_VIRTUALS (elem);
1f84ec23 814 n = 0;
f30432d7 815
8d08fdba
MS
816 while (virtuals)
817 {
83f2ccf4 818 tree fndecl = TREE_VALUE (virtuals);
71e89f27 819 fprintf (stderr, "%s [%ld =? %ld]\n",
8d08fdba 820 IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (fndecl)),
71e89f27 821 (long) n, (long) TREE_INT_CST_LOW (DECL_VINDEX (fndecl)));
f30432d7 822 ++n;
8d08fdba 823 virtuals = TREE_CHAIN (virtuals);
8d08fdba
MS
824 }
825}
826
8d08fdba 827int
b57b79f7 828count_functions (tree t)
8d08fdba 829{
2c73f9f5 830 int i;
8d08fdba
MS
831 if (TREE_CODE (t) == FUNCTION_DECL)
832 return 1;
2c73f9f5
ML
833 else if (TREE_CODE (t) == OVERLOAD)
834 {
6a87d634 835 for (i = 0; t; t = OVL_CHAIN (t))
2c73f9f5
ML
836 i++;
837 return i;
838 }
8d08fdba 839
a98facb0 840 abort ();
0d16d68e 841 return 0;
8d08fdba
MS
842}
843
8d08fdba 844int
b57b79f7 845is_overloaded_fn (tree x)
8d08fdba 846{
4bb0968f 847 /* A baselink is also considered an overloaded function. */
05e0b2f4
JM
848 if (TREE_CODE (x) == OFFSET_REF)
849 x = TREE_OPERAND (x, 1);
4bb0968f 850 if (BASELINK_P (x))
da15dae6 851 x = BASELINK_FUNCTIONS (x);
06ab59df
MM
852 return (TREE_CODE (x) == FUNCTION_DECL
853 || TREE_CODE (x) == TEMPLATE_ID_EXPR
854 || DECL_FUNCTION_TEMPLATE_P (x)
2c73f9f5 855 || TREE_CODE (x) == OVERLOAD);
8d08fdba
MS
856}
857
8926095f 858int
b57b79f7 859really_overloaded_fn (tree x)
8926095f 860{
4bb0968f 861 /* A baselink is also considered an overloaded function. */
05e0b2f4
JM
862 if (TREE_CODE (x) == OFFSET_REF)
863 x = TREE_OPERAND (x, 1);
4bb0968f 864 if (BASELINK_P (x))
da15dae6 865 x = BASELINK_FUNCTIONS (x);
5a9a1961
NS
866
867 return ((TREE_CODE (x) == OVERLOAD && OVL_CHAIN (x))
868 || DECL_FUNCTION_TEMPLATE_P (OVL_CURRENT (x))
869 || TREE_CODE (x) == TEMPLATE_ID_EXPR);
8926095f
MS
870}
871
8d08fdba 872tree
b57b79f7 873get_first_fn (tree from)
8d08fdba 874{
06ab59df 875 my_friendly_assert (is_overloaded_fn (from), 9);
c6002625 876 /* A baselink is also considered an overloaded function. */
4bb0968f 877 if (BASELINK_P (from))
da15dae6 878 from = BASELINK_FUNCTIONS (from);
2c73f9f5
ML
879 return OVL_CURRENT (from);
880}
8d08fdba 881
8d7f862c
JM
882/* Returns nonzero if T is a ->* or .* expression that refers to a
883 member function. */
884
885int
b57b79f7 886bound_pmf_p (tree t)
8d7f862c
JM
887{
888 return (TREE_CODE (t) == OFFSET_REF
889 && TYPE_PTRMEMFUNC_P (TREE_TYPE (TREE_OPERAND (t, 1))));
890}
891
c6002625 892/* Return a new OVL node, concatenating it with the old one. */
2c73f9f5
ML
893
894tree
b57b79f7 895ovl_cons (tree decl, tree chain)
2c73f9f5
ML
896{
897 tree result = make_node (OVERLOAD);
898 TREE_TYPE (result) = unknown_type_node;
899 OVL_FUNCTION (result) = decl;
900 TREE_CHAIN (result) = chain;
901
902 return result;
903}
904
2c73f9f5
ML
905/* Build a new overloaded function. If this is the first one,
906 just return it; otherwise, ovl_cons the _DECLs */
907
908tree
b57b79f7 909build_overload (tree decl, tree chain)
2c73f9f5 910{
161c12b0 911 if (! chain && TREE_CODE (decl) != TEMPLATE_DECL)
2c73f9f5 912 return decl;
161c12b0 913 if (chain && TREE_CODE (chain) != OVERLOAD)
2c73f9f5
ML
914 chain = ovl_cons (chain, NULL_TREE);
915 return ovl_cons (decl, chain);
916}
917
8d08fdba
MS
918\f
919#define PRINT_RING_SIZE 4
920
e1def31b 921const char *
b57b79f7 922cxx_printable_name (tree decl, int v)
8d08fdba
MS
923{
924 static tree decl_ring[PRINT_RING_SIZE];
925 static char *print_ring[PRINT_RING_SIZE];
926 static int ring_counter;
927 int i;
928
929 /* Only cache functions. */
2ba25f50
MS
930 if (v < 2
931 || TREE_CODE (decl) != FUNCTION_DECL
8d08fdba 932 || DECL_LANG_SPECIFIC (decl) == 0)
2ba25f50 933 return lang_decl_name (decl, v);
8d08fdba
MS
934
935 /* See if this print name is lying around. */
936 for (i = 0; i < PRINT_RING_SIZE; i++)
937 if (decl_ring[i] == decl)
938 /* yes, so return it. */
939 return print_ring[i];
940
941 if (++ring_counter == PRINT_RING_SIZE)
942 ring_counter = 0;
943
944 if (current_function_decl != NULL_TREE)
945 {
946 if (decl_ring[ring_counter] == current_function_decl)
947 ring_counter += 1;
948 if (ring_counter == PRINT_RING_SIZE)
949 ring_counter = 0;
950 if (decl_ring[ring_counter] == current_function_decl)
a98facb0 951 abort ();
8d08fdba
MS
952 }
953
954 if (print_ring[ring_counter])
955 free (print_ring[ring_counter]);
956
2ba25f50
MS
957 print_ring[ring_counter] = xstrdup (lang_decl_name (decl, v));
958 decl_ring[ring_counter] = decl;
8d08fdba
MS
959 return print_ring[ring_counter];
960}
961\f
f30432d7 962/* Build the FUNCTION_TYPE or METHOD_TYPE which may throw exceptions
8d08fdba 963 listed in RAISES. */
e92cc029 964
8d08fdba 965tree
b57b79f7 966build_exception_variant (tree type, tree raises)
8d08fdba 967{
8d08fdba 968 tree v = TYPE_MAIN_VARIANT (type);
91063b51 969 int type_quals = TYPE_QUALS (type);
8d08fdba 970
45537677 971 for (; v; v = TYPE_NEXT_VARIANT (v))
4cc1d462
NS
972 if (TYPE_QUALS (v) == type_quals
973 && comp_except_specs (raises, TYPE_RAISES_EXCEPTIONS (v), 1))
974 return v;
8d08fdba
MS
975
976 /* Need to build a new variant. */
45537677 977 v = build_type_copy (type);
8d08fdba
MS
978 TYPE_RAISES_EXCEPTIONS (v) = raises;
979 return v;
980}
981
dac65501
KL
982/* Given a TEMPLATE_TEMPLATE_PARM node T, create a new
983 BOUND_TEMPLATE_TEMPLATE_PARM bound with NEWARGS as its template
1899c3a4 984 arguments. */
73b0fce8
KL
985
986tree
b57b79f7 987bind_template_template_parm (tree t, tree newargs)
73b0fce8 988{
1899c3a4 989 tree decl = TYPE_NAME (t);
6b9b6b15
JM
990 tree t2;
991
dac65501
KL
992 t2 = make_aggr_type (BOUND_TEMPLATE_TEMPLATE_PARM);
993 decl = build_decl (TYPE_DECL, DECL_NAME (decl), NULL_TREE);
1899c3a4 994
dac65501
KL
995 /* These nodes have to be created to reflect new TYPE_DECL and template
996 arguments. */
997 TEMPLATE_TYPE_PARM_INDEX (t2) = copy_node (TEMPLATE_TYPE_PARM_INDEX (t));
998 TEMPLATE_PARM_DECL (TEMPLATE_TYPE_PARM_INDEX (t2)) = decl;
999 TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (t2)
1000 = tree_cons (TEMPLATE_TEMPLATE_PARM_TEMPLATE_DECL (t),
1001 newargs, NULL_TREE);
6b9b6b15 1002
1899c3a4
KL
1003 TREE_TYPE (decl) = t2;
1004 TYPE_NAME (t2) = decl;
1005 TYPE_STUB_DECL (t2) = decl;
dac65501 1006 TYPE_SIZE (t2) = 0;
73b0fce8 1007
73b0fce8
KL
1008 return t2;
1009}
1010
bf3428d0 1011/* Called from count_trees via walk_tree. */
297a5329
JM
1012
1013static tree
b57b79f7
NN
1014count_trees_r (tree* tp ATTRIBUTE_UNUSED ,
1015 int* walk_subtrees ATTRIBUTE_UNUSED ,
1016 void* data)
297a5329 1017{
bf3428d0 1018 ++ *((int*) data);
297a5329
JM
1019 return NULL_TREE;
1020}
1021
1022/* Debugging function for measuring the rough complexity of a tree
1023 representation. */
1024
1025int
b57b79f7 1026count_trees (tree t)
297a5329 1027{
bf3428d0 1028 int n_trees = 0;
ee94fce6 1029 walk_tree_without_duplicates (&t, count_trees_r, &n_trees);
297a5329
JM
1030 return n_trees;
1031}
1032
b2244c65
MM
1033/* Called from verify_stmt_tree via walk_tree. */
1034
1035static tree
b57b79f7
NN
1036verify_stmt_tree_r (tree* tp,
1037 int* walk_subtrees ATTRIBUTE_UNUSED ,
1038 void* data)
b2244c65
MM
1039{
1040 tree t = *tp;
1041 htab_t *statements = (htab_t *) data;
1042 void **slot;
1043
009ed910 1044 if (!STATEMENT_CODE_P (TREE_CODE (t)))
b2244c65
MM
1045 return NULL_TREE;
1046
1047 /* If this statement is already present in the hash table, then
1048 there is a circularity in the statement tree. */
1049 if (htab_find (*statements, t))
a98facb0 1050 abort ();
b2244c65
MM
1051
1052 slot = htab_find_slot (*statements, t, INSERT);
1053 *slot = t;
1054
1055 return NULL_TREE;
1056}
1057
1058/* Debugging function to check that the statement T has not been
1059 corrupted. For now, this function simply checks that T contains no
1060 circularities. */
1061
1062void
b57b79f7 1063verify_stmt_tree (tree t)
b2244c65
MM
1064{
1065 htab_t statements;
1066 statements = htab_create (37, htab_hash_pointer, htab_eq_pointer, NULL);
ee94fce6 1067 walk_tree (&t, verify_stmt_tree_r, &statements, NULL);
b2244c65
MM
1068 htab_delete (statements);
1069}
1070
1071/* Called from find_tree via walk_tree. */
1072
1073static tree
b57b79f7
NN
1074find_tree_r (tree* tp,
1075 int* walk_subtrees ATTRIBUTE_UNUSED ,
1076 void* data)
b2244c65
MM
1077{
1078 if (*tp == (tree) data)
1079 return (tree) data;
1080
1081 return NULL_TREE;
1082}
1083
1084/* Returns X if X appears in the tree structure rooted at T. */
1085
1086tree
b57b79f7 1087find_tree (tree t, tree x)
b2244c65 1088{
ee94fce6 1089 return walk_tree_without_duplicates (&t, find_tree_r, x);
b2244c65
MM
1090}
1091
8dfaeb63 1092/* Passed to walk_tree. Checks for the use of types with no linkage. */
50a6dbd7
JM
1093
1094static tree
b57b79f7
NN
1095no_linkage_helper (tree* tp,
1096 int* walk_subtrees ATTRIBUTE_UNUSED ,
1097 void* data ATTRIBUTE_UNUSED )
50a6dbd7 1098{
b3ab27f3
MM
1099 tree t = *tp;
1100
50a6dbd7 1101 if (TYPE_P (t)
221c7a7f 1102 && (CLASS_TYPE_P (t) || TREE_CODE (t) == ENUMERAL_TYPE)
50a6dbd7 1103 && (decl_function_context (TYPE_MAIN_DECL (t))
1951a1b6 1104 || TYPE_ANONYMOUS_P (t)))
50a6dbd7
JM
1105 return t;
1106 return NULL_TREE;
1107}
1108
1109/* Check if the type T depends on a type with no linkage and if so, return
1110 it. */
1111
1112tree
b57b79f7 1113no_linkage_check (tree t)
50a6dbd7 1114{
2adeacc9
MM
1115 /* There's no point in checking linkage on template functions; we
1116 can't know their complete types. */
1117 if (processing_template_decl)
1118 return NULL_TREE;
1119
ee94fce6 1120 t = walk_tree_without_duplicates (&t, no_linkage_helper, NULL);
50a6dbd7
JM
1121 if (t != error_mark_node)
1122 return t;
1123 return NULL_TREE;
1124}
1125
5566b478
MS
1126#ifdef GATHER_STATISTICS
1127extern int depth_reached;
1128#endif
1129
8d08fdba 1130void
b57b79f7 1131cxx_print_statistics (void)
8d08fdba 1132{
8d08fdba
MS
1133 print_search_statistics ();
1134 print_class_statistics ();
5566b478
MS
1135#ifdef GATHER_STATISTICS
1136 fprintf (stderr, "maximum template instantiation depth reached: %d\n",
1137 depth_reached);
1138#endif
8d08fdba
MS
1139}
1140
e92cc029
MS
1141/* Return, as an INTEGER_CST node, the number of elements for TYPE
1142 (which is an ARRAY_TYPE). This counts only elements of the top
1143 array. */
8d08fdba
MS
1144
1145tree
b57b79f7 1146array_type_nelts_top (tree type)
8d08fdba 1147{
eae89e04 1148 return fold (build (PLUS_EXPR, sizetype,
8d08fdba
MS
1149 array_type_nelts (type),
1150 integer_one_node));
1151}
1152
e92cc029
MS
1153/* Return, as an INTEGER_CST node, the number of elements for TYPE
1154 (which is an ARRAY_TYPE). This one is a recursive count of all
1155 ARRAY_TYPEs that are clumped together. */
8d08fdba
MS
1156
1157tree
b57b79f7 1158array_type_nelts_total (tree type)
8d08fdba
MS
1159{
1160 tree sz = array_type_nelts_top (type);
1161 type = TREE_TYPE (type);
1162 while (TREE_CODE (type) == ARRAY_TYPE)
1163 {
1164 tree n = array_type_nelts_top (type);
eae89e04 1165 sz = fold (build (MULT_EXPR, sizetype, sz, n));
8d08fdba
MS
1166 type = TREE_TYPE (type);
1167 }
1168 return sz;
1169}
878cd289 1170
b3ab27f3
MM
1171/* Called from break_out_target_exprs via mapcar. */
1172
1173static tree
b57b79f7 1174bot_manip (tree* tp, int* walk_subtrees, void* data)
878cd289 1175{
8dfaeb63
MM
1176 splay_tree target_remap = ((splay_tree) data);
1177 tree t = *tp;
1178
495d26d6 1179 if (TREE_CONSTANT (t))
8dfaeb63 1180 {
495d26d6
JM
1181 /* There can't be any TARGET_EXPRs or their slot variables below
1182 this point. We used to check !TREE_SIDE_EFFECTS, but then we
1183 failed to copy an ADDR_EXPR of the slot VAR_DECL. */
8dfaeb63
MM
1184 *walk_subtrees = 0;
1185 return NULL_TREE;
1186 }
495d26d6 1187 if (TREE_CODE (t) == TARGET_EXPR)
73aad9b9 1188 {
b3ab27f3
MM
1189 tree u;
1190
02531345 1191 if (TREE_CODE (TREE_OPERAND (t, 1)) == AGGR_INIT_EXPR)
73aad9b9
JM
1192 {
1193 mark_used (TREE_OPERAND (TREE_OPERAND (TREE_OPERAND (t, 1), 0), 0));
b3ab27f3 1194 u = build_cplus_new
73aad9b9
JM
1195 (TREE_TYPE (t), break_out_target_exprs (TREE_OPERAND (t, 1)));
1196 }
b3ab27f3
MM
1197 else
1198 {
495d26d6
JM
1199 u = build_target_expr_with_type
1200 (break_out_target_exprs (TREE_OPERAND (t, 1)), TREE_TYPE (t));
b3ab27f3
MM
1201 }
1202
1203 /* Map the old variable to the new one. */
1204 splay_tree_insert (target_remap,
1205 (splay_tree_key) TREE_OPERAND (t, 0),
1206 (splay_tree_value) TREE_OPERAND (u, 0));
8dfaeb63
MM
1207
1208 /* Replace the old expression with the new version. */
1209 *tp = u;
1210 /* We don't have to go below this point; the recursive call to
1211 break_out_target_exprs will have handled anything below this
1212 point. */
1213 *walk_subtrees = 0;
1214 return NULL_TREE;
73aad9b9
JM
1215 }
1216 else if (TREE_CODE (t) == CALL_EXPR)
1217 mark_used (TREE_OPERAND (TREE_OPERAND (t, 0), 0));
1218
8dfaeb63
MM
1219 /* Make a copy of this node. */
1220 return copy_tree_r (tp, walk_subtrees, NULL);
878cd289
MS
1221}
1222
8dfaeb63
MM
1223/* Replace all remapped VAR_DECLs in T with their new equivalents.
1224 DATA is really a splay-tree mapping old variables to new
1225 variables. */
b3ab27f3
MM
1226
1227static tree
b57b79f7
NN
1228bot_replace (tree* t,
1229 int* walk_subtrees ATTRIBUTE_UNUSED ,
1230 void* data)
b3ab27f3 1231{
8dfaeb63
MM
1232 splay_tree target_remap = ((splay_tree) data);
1233
b3ab27f3
MM
1234 if (TREE_CODE (*t) == VAR_DECL)
1235 {
1236 splay_tree_node n = splay_tree_lookup (target_remap,
1237 (splay_tree_key) *t);
1238 if (n)
1239 *t = (tree) n->value;
1240 }
1241
1242 return NULL_TREE;
1243}
1244
8dfaeb63
MM
1245/* When we parse a default argument expression, we may create
1246 temporary variables via TARGET_EXPRs. When we actually use the
1247 default-argument expression, we make a copy of the expression, but
1248 we must replace the temporaries with appropriate local versions. */
e92cc029 1249
878cd289 1250tree
b57b79f7 1251break_out_target_exprs (tree t)
878cd289 1252{
8dfaeb63
MM
1253 static int target_remap_count;
1254 static splay_tree target_remap;
1255
b3ab27f3
MM
1256 if (!target_remap_count++)
1257 target_remap = splay_tree_new (splay_tree_compare_pointers,
1258 /*splay_tree_delete_key_fn=*/NULL,
1259 /*splay_tree_delete_value_fn=*/NULL);
ee94fce6
MM
1260 walk_tree (&t, bot_manip, target_remap, NULL);
1261 walk_tree (&t, bot_replace, target_remap, NULL);
b3ab27f3
MM
1262
1263 if (!--target_remap_count)
1264 {
1265 splay_tree_delete (target_remap);
1266 target_remap = NULL;
1267 }
1268
1269 return t;
878cd289 1270}
f30432d7 1271
8e1daa34
NS
1272/* Similar to `build_nt', but for template definitions of dependent
1273 expressions */
5566b478
MS
1274
1275tree
e34d07f2 1276build_min_nt (enum tree_code code, ...)
5566b478 1277{
5566b478
MS
1278 register tree t;
1279 register int length;
1280 register int i;
e34d07f2 1281 va_list p;
5566b478 1282
e34d07f2 1283 va_start (p, code);
5566b478 1284
5566b478 1285 t = make_node (code);
8d5e6e25 1286 length = TREE_CODE_LENGTH (code);
d479d37f 1287 TREE_COMPLEXITY (t) = input_line;
5566b478
MS
1288
1289 for (i = 0; i < length; i++)
1290 {
1291 tree x = va_arg (p, tree);
2a1e9fdd 1292 TREE_OPERAND (t, i) = x;
5566b478
MS
1293 }
1294
e34d07f2 1295 va_end (p);
5566b478
MS
1296 return t;
1297}
1298
8e1daa34 1299/* Similar to `build', but for template definitions. */
5566b478
MS
1300
1301tree
e34d07f2 1302build_min (enum tree_code code, tree tt, ...)
5566b478 1303{
5566b478
MS
1304 register tree t;
1305 register int length;
1306 register int i;
e34d07f2 1307 va_list p;
5566b478 1308
e34d07f2 1309 va_start (p, tt);
5566b478 1310
5566b478 1311 t = make_node (code);
8d5e6e25 1312 length = TREE_CODE_LENGTH (code);
2a1e9fdd 1313 TREE_TYPE (t) = tt;
d479d37f 1314 TREE_COMPLEXITY (t) = input_line;
5566b478
MS
1315
1316 for (i = 0; i < length; i++)
1317 {
1318 tree x = va_arg (p, tree);
2a1e9fdd 1319 TREE_OPERAND (t, i) = x;
8e1daa34
NS
1320 if (x && TREE_SIDE_EFFECTS (x))
1321 TREE_SIDE_EFFECTS (t) = 1;
5566b478
MS
1322 }
1323
e34d07f2 1324 va_end (p);
5566b478
MS
1325 return t;
1326}
1327
8e1daa34
NS
1328/* Similar to `build', but for template definitions of non-dependent
1329 expressions. NON_DEP is the non-dependent expression that has been
1330 built. */
1331
1332tree
1333build_min_non_dep (enum tree_code code, tree non_dep, ...)
1334{
1335 register tree t;
1336 register int length;
1337 register int i;
1338 va_list p;
1339
1340 va_start (p, non_dep);
1341
1342 t = make_node (code);
1343 length = TREE_CODE_LENGTH (code);
1344 TREE_TYPE (t) = TREE_TYPE (non_dep);
1345 TREE_COMPLEXITY (t) = input_line;
1346 TREE_SIDE_EFFECTS (t) = TREE_SIDE_EFFECTS (non_dep);
1347
1348 for (i = 0; i < length; i++)
1349 {
1350 tree x = va_arg (p, tree);
1351 TREE_OPERAND (t, i) = x;
1352 }
1353
1354 if (code == COMPOUND_EXPR && TREE_CODE (non_dep) != COMPOUND_EXPR)
1355 /* This should not be considered a COMPOUND_EXPR, because it
1356 resolves to an overload. */
1357 COMPOUND_EXPR_OVERLOADED (t) = 1;
1358
1359 va_end (p);
1360 return t;
1361}
1362
a68ad5bd
MM
1363/* Returns an INTEGER_CST (of type `int') corresponding to I.
1364 Multiple calls with the same value of I may or may not yield the
1365 same node; therefore, callers should never modify the node
1366 returned. */
1367
41ab2ae2
NS
1368static GTY(()) tree shared_int_cache[256];
1369
a68ad5bd 1370tree
b57b79f7 1371build_shared_int_cst (int i)
a68ad5bd 1372{
a68ad5bd
MM
1373 if (i >= 256)
1374 return build_int_2 (i, 0);
1375
41ab2ae2
NS
1376 if (!shared_int_cache[i])
1377 shared_int_cache[i] = build_int_2 (i, 0);
a68ad5bd 1378
41ab2ae2 1379 return shared_int_cache[i];
a68ad5bd
MM
1380}
1381
5566b478 1382tree
b57b79f7 1383get_type_decl (tree t)
5566b478 1384{
5566b478
MS
1385 if (TREE_CODE (t) == TYPE_DECL)
1386 return t;
2f939d94 1387 if (TYPE_P (t))
5566b478 1388 return TYPE_STUB_DECL (t);
1bc0793e
NS
1389 if (t == error_mark_node)
1390 return t;
5566b478 1391
a98facb0 1392 abort ();
4e1e2064
MH
1393
1394 /* Stop compiler from complaining control reaches end of non-void function. */
1395 return 0;
5566b478
MS
1396}
1397
5566b478 1398/* Return first vector element whose BINFO_TYPE is ELEM.
934c6b13 1399 Return 0 if ELEM is not in VEC. VEC may be NULL_TREE. */
5566b478
MS
1400
1401tree
b57b79f7 1402vec_binfo_member (tree elem, tree vec)
5566b478
MS
1403{
1404 int i;
934c6b13
MS
1405
1406 if (vec)
1407 for (i = 0; i < TREE_VEC_LENGTH (vec); ++i)
3bfdc719 1408 if (same_type_p (elem, BINFO_TYPE (TREE_VEC_ELT (vec, i))))
934c6b13
MS
1409 return TREE_VEC_ELT (vec, i);
1410
5566b478
MS
1411 return NULL_TREE;
1412}
e76a2646 1413
700466c2
JM
1414/* Returns the namespace that contains DECL, whether directly or
1415 indirectly. */
1416
1417tree
b57b79f7 1418decl_namespace_context (tree decl)
700466c2
JM
1419{
1420 while (1)
1421 {
1422 if (TREE_CODE (decl) == NAMESPACE_DECL)
1423 return decl;
1424 else if (TYPE_P (decl))
1425 decl = CP_DECL_CONTEXT (TYPE_MAIN_DECL (decl));
1426 else
1427 decl = CP_DECL_CONTEXT (decl);
1428 }
1429}
1430
67d743fe 1431/* Return truthvalue of whether T1 is the same tree structure as T2.
c8a209ca 1432 Return 1 if they are the same. Return 0 if they are different. */
67d743fe 1433
c8a209ca 1434bool
b57b79f7 1435cp_tree_equal (tree t1, tree t2)
67d743fe
MS
1436{
1437 register enum tree_code code1, code2;
67d743fe
MS
1438
1439 if (t1 == t2)
c8a209ca
NS
1440 return true;
1441 if (!t1 || !t2)
1442 return false;
1443
1444 for (code1 = TREE_CODE (t1);
1445 code1 == NOP_EXPR || code1 == CONVERT_EXPR
1446 || code1 == NON_LVALUE_EXPR;
1447 code1 = TREE_CODE (t1))
1448 t1 = TREE_OPERAND (t1, 0);
1449 for (code2 = TREE_CODE (t2);
1450 code2 == NOP_EXPR || code2 == CONVERT_EXPR
1451 || code1 == NON_LVALUE_EXPR;
1452 code2 = TREE_CODE (t2))
1453 t2 = TREE_OPERAND (t2, 0);
1454
1455 /* They might have become equal now. */
1456 if (t1 == t2)
1457 return true;
1458
67d743fe 1459 if (code1 != code2)
c8a209ca 1460 return false;
67d743fe
MS
1461
1462 switch (code1)
1463 {
1464 case INTEGER_CST:
1465 return TREE_INT_CST_LOW (t1) == TREE_INT_CST_LOW (t2)
1466 && TREE_INT_CST_HIGH (t1) == TREE_INT_CST_HIGH (t2);
1467
1468 case REAL_CST:
1469 return REAL_VALUES_EQUAL (TREE_REAL_CST (t1), TREE_REAL_CST (t2));
1470
1471 case STRING_CST:
1472 return TREE_STRING_LENGTH (t1) == TREE_STRING_LENGTH (t2)
da61dec9 1473 && !memcmp (TREE_STRING_POINTER (t1), TREE_STRING_POINTER (t2),
c8a209ca 1474 TREE_STRING_LENGTH (t1));
67d743fe
MS
1475
1476 case CONSTRUCTOR:
7dd4bdf5
MM
1477 /* We need to do this when determining whether or not two
1478 non-type pointer to member function template arguments
1479 are the same. */
3bfdc719 1480 if (!(same_type_p (TREE_TYPE (t1), TREE_TYPE (t2))
7dd4bdf5
MM
1481 /* The first operand is RTL. */
1482 && TREE_OPERAND (t1, 0) == TREE_OPERAND (t2, 0)))
c8a209ca 1483 return false;
7dd4bdf5
MM
1484 return cp_tree_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
1485
1486 case TREE_LIST:
c8a209ca
NS
1487 if (!cp_tree_equal (TREE_PURPOSE (t1), TREE_PURPOSE (t2)))
1488 return false;
1489 if (!cp_tree_equal (TREE_VALUE (t1), TREE_VALUE (t2)))
1490 return false;
7dd4bdf5 1491 return cp_tree_equal (TREE_CHAIN (t1), TREE_CHAIN (t2));
67d743fe
MS
1492
1493 case SAVE_EXPR:
1494 return cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
1495
1496 case CALL_EXPR:
c8a209ca
NS
1497 if (!cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0)))
1498 return false;
67d743fe
MS
1499 return cp_tree_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
1500
c8a209ca
NS
1501 case TARGET_EXPR:
1502 {
1503 tree o1 = TREE_OPERAND (t1, 0);
1504 tree o2 = TREE_OPERAND (t2, 0);
1505
1506 /* Special case: if either target is an unallocated VAR_DECL,
1507 it means that it's going to be unified with whatever the
1508 TARGET_EXPR is really supposed to initialize, so treat it
1509 as being equivalent to anything. */
1510 if (TREE_CODE (o1) == VAR_DECL && DECL_NAME (o1) == NULL_TREE
1511 && !DECL_RTL_SET_P (o1))
1512 /*Nop*/;
1513 else if (TREE_CODE (o2) == VAR_DECL && DECL_NAME (o2) == NULL_TREE
1514 && !DECL_RTL_SET_P (o2))
1515 /*Nop*/;
1516 else if (!cp_tree_equal (o1, o2))
1517 return false;
1518
1519 return cp_tree_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
1520 }
1521
67d743fe 1522 case WITH_CLEANUP_EXPR:
c8a209ca
NS
1523 if (!cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0)))
1524 return false;
6ad7895a 1525 return cp_tree_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t1, 1));
67d743fe
MS
1526
1527 case COMPONENT_REF:
c8a209ca
NS
1528 if (TREE_OPERAND (t1, 1) != TREE_OPERAND (t2, 1))
1529 return false;
1530 return cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
67d743fe
MS
1531
1532 case VAR_DECL:
1533 case PARM_DECL:
1534 case CONST_DECL:
1535 case FUNCTION_DECL:
c8a209ca
NS
1536 case TEMPLATE_DECL:
1537 case IDENTIFIER_NODE:
1538 return false;
67d743fe 1539
f84b4be9 1540 case TEMPLATE_PARM_INDEX:
31758337
NS
1541 return (TEMPLATE_PARM_IDX (t1) == TEMPLATE_PARM_IDX (t2)
1542 && TEMPLATE_PARM_LEVEL (t1) == TEMPLATE_PARM_LEVEL (t2)
1543 && same_type_p (TREE_TYPE (TEMPLATE_PARM_DECL (t1)),
1544 TREE_TYPE (TEMPLATE_PARM_DECL (t2))));
67d743fe 1545
bf12d54d
NS
1546 case TEMPLATE_ID_EXPR:
1547 {
1548 unsigned ix;
1549 tree vec1, vec2;
1550
1551 if (!cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0)))
1552 return false;
1553 vec1 = TREE_OPERAND (t1, 1);
1554 vec2 = TREE_OPERAND (t2, 1);
1555
1556 if (!vec1 || !vec2)
1557 return !vec1 && !vec2;
1558
1559 if (TREE_VEC_LENGTH (vec1) != TREE_VEC_LENGTH (vec2))
1560 return false;
1561
1562 for (ix = TREE_VEC_LENGTH (vec1); ix--;)
1563 if (!cp_tree_equal (TREE_VEC_ELT (vec1, ix),
1564 TREE_VEC_ELT (vec2, ix)))
1565 return false;
1566
1567 return true;
1568 }
1569
67d743fe 1570 case SIZEOF_EXPR:
abff8e06 1571 case ALIGNOF_EXPR:
c8a209ca
NS
1572 {
1573 tree o1 = TREE_OPERAND (t1, 0);
1574 tree o2 = TREE_OPERAND (t2, 0);
1575
1576 if (TREE_CODE (o1) != TREE_CODE (o2))
1577 return false;
1578 if (TYPE_P (o1))
1579 return same_type_p (o1, o2);
1580 else
1581 return cp_tree_equal (o1, o2);
1582 }
1583
61a127b3
MM
1584 case PTRMEM_CST:
1585 /* Two pointer-to-members are the same if they point to the same
1586 field or function in the same class. */
c8a209ca
NS
1587 if (PTRMEM_CST_MEMBER (t1) != PTRMEM_CST_MEMBER (t2))
1588 return false;
1589
1590 return same_type_p (PTRMEM_CST_CLASS (t1), PTRMEM_CST_CLASS (t2));
61a127b3 1591
7f85441b
KG
1592 default:
1593 break;
67d743fe
MS
1594 }
1595
1596 switch (TREE_CODE_CLASS (code1))
1597 {
67d743fe
MS
1598 case '1':
1599 case '2':
1600 case '<':
1601 case 'e':
1602 case 'r':
1603 case 's':
aa1826e2
NS
1604 {
1605 int i;
1606
aa1826e2 1607 for (i = 0; i < TREE_CODE_LENGTH (code1); ++i)
c8a209ca
NS
1608 if (!cp_tree_equal (TREE_OPERAND (t1, i), TREE_OPERAND (t2, i)))
1609 return false;
1610
1611 return true;
aa1826e2
NS
1612 }
1613
c8a209ca
NS
1614 case 't':
1615 return same_type_p (t1, t2);
67d743fe
MS
1616 }
1617
c8a209ca
NS
1618 my_friendly_assert (0, 20030617);
1619 return false;
67d743fe 1620}
73aad9b9 1621
e2500fed
GK
1622/* Build a wrapper around a 'struct z_candidate' so we can use it as a
1623 tree. */
5ffe581d
JM
1624
1625tree
b57b79f7 1626build_zc_wrapper (struct z_candidate* ptr)
5ffe581d
JM
1627{
1628 tree t = make_node (WRAPPER);
e2500fed 1629 WRAPPER_ZC (t) = ptr;
5ffe581d
JM
1630 return t;
1631}
1632
d11ad92e
MS
1633/* The type of ARG when used as an lvalue. */
1634
1635tree
b57b79f7 1636lvalue_type (tree arg)
d11ad92e 1637{
2c73f9f5
ML
1638 tree type = TREE_TYPE (arg);
1639 if (TREE_CODE (arg) == OVERLOAD)
1640 type = unknown_type_node;
8cd4c175 1641 return type;
d11ad92e
MS
1642}
1643
1644/* The type of ARG for printing error messages; denote lvalues with
1645 reference types. */
1646
1647tree
b57b79f7 1648error_type (tree arg)
d11ad92e
MS
1649{
1650 tree type = TREE_TYPE (arg);
08476342 1651
d11ad92e
MS
1652 if (TREE_CODE (type) == ARRAY_TYPE)
1653 ;
08476342
NS
1654 else if (TREE_CODE (type) == ERROR_MARK)
1655 ;
d11ad92e
MS
1656 else if (real_lvalue_p (arg))
1657 type = build_reference_type (lvalue_type (arg));
1658 else if (IS_AGGR_TYPE (type))
1659 type = lvalue_type (arg);
1660
1661 return type;
1662}
eb66be0e
MS
1663
1664/* Does FUNCTION use a variable-length argument list? */
1665
1666int
b57b79f7 1667varargs_function_p (tree function)
eb66be0e
MS
1668{
1669 tree parm = TYPE_ARG_TYPES (TREE_TYPE (function));
1670 for (; parm; parm = TREE_CHAIN (parm))
1671 if (TREE_VALUE (parm) == void_type_node)
1672 return 0;
1673 return 1;
1674}
f94ae2f5
JM
1675
1676/* Returns 1 if decl is a member of a class. */
1677
1678int
b57b79f7 1679member_p (tree decl)
f94ae2f5 1680{
2f939d94
TP
1681 const tree ctx = DECL_CONTEXT (decl);
1682 return (ctx && TYPE_P (ctx));
f94ae2f5 1683}
51924768
JM
1684
1685/* Create a placeholder for member access where we don't actually have an
1686 object that the access is against. */
1687
1688tree
b57b79f7 1689build_dummy_object (tree type)
51924768 1690{
44689c12 1691 tree decl = build1 (NOP_EXPR, build_pointer_type (type), void_zero_node);
3e411c3f 1692 return build_indirect_ref (decl, NULL);
51924768
JM
1693}
1694
1695/* We've gotten a reference to a member of TYPE. Return *this if appropriate,
1696 or a dummy object otherwise. If BINFOP is non-0, it is filled with the
1697 binfo path from current_class_type to TYPE, or 0. */
1698
1699tree
b57b79f7 1700maybe_dummy_object (tree type, tree* binfop)
51924768
JM
1701{
1702 tree decl, context;
2db1ab2d
NS
1703 tree binfo;
1704
51924768 1705 if (current_class_type
2db1ab2d
NS
1706 && (binfo = lookup_base (current_class_type, type,
1707 ba_ignore | ba_quiet, NULL)))
51924768
JM
1708 context = current_class_type;
1709 else
1710 {
1711 /* Reference from a nested class member function. */
1712 context = type;
2db1ab2d 1713 binfo = TYPE_BINFO (type);
51924768
JM
1714 }
1715
2db1ab2d
NS
1716 if (binfop)
1717 *binfop = binfo;
1718
a29e1034 1719 if (current_class_ref && context == current_class_type
3ebf5204
NS
1720 /* Kludge: Make sure that current_class_type is actually
1721 correct. It might not be if we're in the middle of
c6002625 1722 tsubst_default_argument. */
a29e1034
JM
1723 && same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (current_class_ref)),
1724 current_class_type))
51924768
JM
1725 decl = current_class_ref;
1726 else
1727 decl = build_dummy_object (context);
1728
1729 return decl;
1730}
1731
1732/* Returns 1 if OB is a placeholder object, or a pointer to one. */
1733
1734int
b57b79f7 1735is_dummy_object (tree ob)
51924768
JM
1736{
1737 if (TREE_CODE (ob) == INDIRECT_REF)
1738 ob = TREE_OPERAND (ob, 0);
1739 return (TREE_CODE (ob) == NOP_EXPR
44689c12 1740 && TREE_OPERAND (ob, 0) == void_zero_node);
51924768 1741}
5524676d
JM
1742
1743/* Returns 1 iff type T is a POD type, as defined in [basic.types]. */
1744
1745int
b57b79f7 1746pod_type_p (tree t)
5524676d 1747{
38da6039 1748 t = strip_array_types (t);
5524676d 1749
17bbb839
MM
1750 if (t == error_mark_node)
1751 return 1;
52fb2769
NS
1752 if (INTEGRAL_TYPE_P (t))
1753 return 1; /* integral, character or enumeral type */
1754 if (FLOAT_TYPE_P (t))
5524676d 1755 return 1;
52fb2769
NS
1756 if (TYPE_PTR_P (t))
1757 return 1; /* pointer to non-member */
a5ac359a
MM
1758 if (TYPE_PTR_TO_MEMBER_P (t))
1759 return 1; /* pointer to member */
52fb2769
NS
1760
1761 if (! CLASS_TYPE_P (t))
1762 return 0; /* other non-class type (reference or function) */
1763 if (CLASSTYPE_NON_POD_P (t))
5524676d 1764 return 0;
5524676d
JM
1765 return 1;
1766}
e5dc5fb2 1767
94e6e4c4
AO
1768/* Returns 1 iff zero initialization of type T means actually storing
1769 zeros in it. */
1770
1771int
b57b79f7 1772zero_init_p (tree t)
94e6e4c4
AO
1773{
1774 t = strip_array_types (t);
1775
17bbb839
MM
1776 if (t == error_mark_node)
1777 return 1;
1778
94e6e4c4
AO
1779 /* NULL pointers to data members are initialized with -1. */
1780 if (TYPE_PTRMEM_P (t))
1781 return 0;
1782
1783 /* Classes that contain types that can't be zero-initialized, cannot
1784 be zero-initialized themselves. */
1785 if (CLASS_TYPE_P (t) && CLASSTYPE_NON_ZERO_INIT_P (t))
1786 return 0;
1787
1788 return 1;
1789}
1790
91d231cb 1791/* Table of valid C++ attributes. */
349ae713 1792const struct attribute_spec cxx_attribute_table[] =
e5dc5fb2 1793{
91d231cb
JM
1794 /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */
1795 { "java_interface", 0, 0, false, false, false, handle_java_interface_attribute },
1796 { "com_interface", 0, 0, false, false, false, handle_com_interface_attribute },
1797 { "init_priority", 1, 1, true, false, false, handle_init_priority_attribute },
1798 { NULL, 0, 0, false, false, false, NULL }
1799};
1800
1801/* Handle a "java_interface" attribute; arguments as in
1802 struct attribute_spec.handler. */
1803static tree
b57b79f7
NN
1804handle_java_interface_attribute (tree* node,
1805 tree name,
1806 tree args ATTRIBUTE_UNUSED ,
1807 int flags,
1808 bool* no_add_attrs)
91d231cb
JM
1809{
1810 if (DECL_P (*node)
1811 || !CLASS_TYPE_P (*node)
1812 || !TYPE_FOR_JAVA (*node))
60c87482 1813 {
91d231cb
JM
1814 error ("`%s' attribute can only be applied to Java class definitions",
1815 IDENTIFIER_POINTER (name));
1816 *no_add_attrs = true;
1817 return NULL_TREE;
60c87482 1818 }
91d231cb
JM
1819 if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
1820 *node = build_type_copy (*node);
1821 TYPE_JAVA_INTERFACE (*node) = 1;
e5dc5fb2 1822
91d231cb
JM
1823 return NULL_TREE;
1824}
1825
1826/* Handle a "com_interface" attribute; arguments as in
1827 struct attribute_spec.handler. */
1828static tree
b57b79f7
NN
1829handle_com_interface_attribute (tree* node,
1830 tree name,
1831 tree args ATTRIBUTE_UNUSED ,
1832 int flags ATTRIBUTE_UNUSED ,
1833 bool* no_add_attrs)
91d231cb
JM
1834{
1835 static int warned;
1836
1837 *no_add_attrs = true;
1838
1839 if (DECL_P (*node)
1840 || !CLASS_TYPE_P (*node)
1841 || *node != TYPE_MAIN_VARIANT (*node))
e5dc5fb2 1842 {
91d231cb
JM
1843 warning ("`%s' attribute can only be applied to class definitions",
1844 IDENTIFIER_POINTER (name));
1845 return NULL_TREE;
1846 }
e5dc5fb2 1847
91d231cb
JM
1848 if (!warned++)
1849 warning ("`%s' is obsolete; g++ vtables are now COM-compatible by default",
1850 IDENTIFIER_POINTER (name));
1851
1852 return NULL_TREE;
1853}
1854
1855/* Handle an "init_priority" attribute; arguments as in
1856 struct attribute_spec.handler. */
1857static tree
b57b79f7
NN
1858handle_init_priority_attribute (tree* node,
1859 tree name,
1860 tree args,
1861 int flags ATTRIBUTE_UNUSED ,
1862 bool* no_add_attrs)
91d231cb
JM
1863{
1864 tree initp_expr = TREE_VALUE (args);
1865 tree decl = *node;
1866 tree type = TREE_TYPE (decl);
1867 int pri;
1868
1869 STRIP_NOPS (initp_expr);
e5dc5fb2 1870
91d231cb
JM
1871 if (!initp_expr || TREE_CODE (initp_expr) != INTEGER_CST)
1872 {
1873 error ("requested init_priority is not an integer constant");
1874 *no_add_attrs = true;
1875 return NULL_TREE;
1876 }
e5dc5fb2 1877
91d231cb 1878 pri = TREE_INT_CST_LOW (initp_expr);
e5dc5fb2 1879
91d231cb
JM
1880 type = strip_array_types (type);
1881
1882 if (decl == NULL_TREE
1883 || TREE_CODE (decl) != VAR_DECL
1884 || !TREE_STATIC (decl)
1885 || DECL_EXTERNAL (decl)
1886 || (TREE_CODE (type) != RECORD_TYPE
1887 && TREE_CODE (type) != UNION_TYPE)
1888 /* Static objects in functions are initialized the
1889 first time control passes through that
1890 function. This is not precise enough to pin down an
c6002625 1891 init_priority value, so don't allow it. */
91d231cb
JM
1892 || current_function_decl)
1893 {
1894 error ("can only use `%s' attribute on file-scope definitions of objects of class type",
1895 IDENTIFIER_POINTER (name));
1896 *no_add_attrs = true;
1897 return NULL_TREE;
1898 }
e5dc5fb2 1899
91d231cb
JM
1900 if (pri > MAX_INIT_PRIORITY || pri <= 0)
1901 {
1902 error ("requested init_priority is out of range");
1903 *no_add_attrs = true;
1904 return NULL_TREE;
1905 }
e5dc5fb2 1906
91d231cb
JM
1907 /* Check for init_priorities that are reserved for
1908 language and runtime support implementations.*/
1909 if (pri <= MAX_RESERVED_INIT_PRIORITY)
1910 {
1911 warning
1912 ("requested init_priority is reserved for internal use");
e5dc5fb2
JM
1913 }
1914
91d231cb
JM
1915 if (SUPPORTS_INIT_PRIORITY)
1916 {
1917 DECL_INIT_PRIORITY (decl) = pri;
1918 return NULL_TREE;
1919 }
1920 else
1921 {
1922 error ("`%s' attribute is not supported on this platform",
1923 IDENTIFIER_POINTER (name));
1924 *no_add_attrs = true;
1925 return NULL_TREE;
1926 }
e5dc5fb2 1927}
87533b37
MM
1928
1929/* Return a new PTRMEM_CST of the indicated TYPE. The MEMBER is the
1930 thing pointed to by the constant. */
1931
1932tree
b57b79f7 1933make_ptrmem_cst (tree type, tree member)
87533b37
MM
1934{
1935 tree ptrmem_cst = make_node (PTRMEM_CST);
1936 /* If would seem a great convenience if make_node would set
1937 TREE_CONSTANT for things of class `c', but it does not. */
1938 TREE_CONSTANT (ptrmem_cst) = 1;
1939 TREE_TYPE (ptrmem_cst) = type;
1940 PTRMEM_CST_MEMBER (ptrmem_cst) = member;
1941 return ptrmem_cst;
1942}
1943
25af8512
AO
1944/* Apply FUNC to all language-specific sub-trees of TP in a pre-order
1945 traversal. Called from walk_tree(). */
1946
19551f29 1947tree
b57b79f7
NN
1948cp_walk_subtrees (tree* tp,
1949 int* walk_subtrees_p,
1950 walk_tree_fn func,
1951 void* data,
1952 void* htab)
25af8512
AO
1953{
1954 enum tree_code code = TREE_CODE (*tp);
1955 tree result;
1956
1957#define WALK_SUBTREE(NODE) \
1958 do \
1959 { \
1960 result = walk_tree (&(NODE), func, data, htab); \
1961 if (result) \
1962 return result; \
1963 } \
1964 while (0)
1965
1966 /* Not one of the easy cases. We must explicitly go through the
1967 children. */
1968 switch (code)
1969 {
1970 case DEFAULT_ARG:
1971 case TEMPLATE_TEMPLATE_PARM:
1972 case BOUND_TEMPLATE_TEMPLATE_PARM:
b8c6534b 1973 case UNBOUND_CLASS_TEMPLATE:
25af8512
AO
1974 case TEMPLATE_PARM_INDEX:
1975 case TEMPLATE_TYPE_PARM:
1976 case TYPENAME_TYPE:
1977 case TYPEOF_TYPE:
5dae1114 1978 case BASELINK:
25af8512
AO
1979 /* None of thse have subtrees other than those already walked
1980 above. */
1981 *walk_subtrees_p = 0;
1982 break;
1983
1984 case PTRMEM_CST:
1985 WALK_SUBTREE (TREE_TYPE (*tp));
1986 *walk_subtrees_p = 0;
1987 break;
1988
1989 case TREE_LIST:
5dae1114 1990 WALK_SUBTREE (TREE_PURPOSE (*tp));
25af8512
AO
1991 break;
1992
1993 case OVERLOAD:
1994 WALK_SUBTREE (OVL_FUNCTION (*tp));
1995 WALK_SUBTREE (OVL_CHAIN (*tp));
1996 *walk_subtrees_p = 0;
1997 break;
1998
1999 case RECORD_TYPE:
2000 if (TYPE_PTRMEMFUNC_P (*tp))
2001 WALK_SUBTREE (TYPE_PTRMEMFUNC_FN_TYPE (*tp));
2002 break;
2003
2004 default:
2005 break;
2006 }
2007
2008 /* We didn't find what we were looking for. */
2009 return NULL_TREE;
2010
2011#undef WALK_SUBTREE
2012}
2013
2014/* Decide whether there are language-specific reasons to not inline a
2015 function as a tree. */
2016
19551f29 2017int
b57b79f7 2018cp_cannot_inline_tree_fn (tree* fnp)
25af8512
AO
2019{
2020 tree fn = *fnp;
2021
2022 /* We can inline a template instantiation only if it's fully
2023 instantiated. */
2024 if (DECL_TEMPLATE_INFO (fn)
2025 && TI_PENDING_TEMPLATE_FLAG (DECL_TEMPLATE_INFO (fn)))
2026 {
a5512a2f
MM
2027 /* Don't instantiate functions that are not going to be
2028 inlined. */
2029 if (!DECL_INLINE (DECL_TEMPLATE_RESULT
2030 (template_for_substitution (fn))))
2031 return 1;
1a9861e6 2032
25af8512 2033 fn = *fnp = instantiate_decl (fn, /*defer_ok=*/0);
1a9861e6 2034
fd852454
RH
2035 if (TI_PENDING_TEMPLATE_FLAG (DECL_TEMPLATE_INFO (fn)))
2036 return 1;
25af8512
AO
2037 }
2038
d58b7c2d
MM
2039 if (flag_really_no_inline
2040 && lookup_attribute ("always_inline", DECL_ATTRIBUTES (fn)) == NULL)
2041 return 1;
2042
8a3c9180
RH
2043 /* Don't auto-inline anything that might not be bound within
2044 this unit of translation. */
2045 if (!DECL_DECLARED_INLINE_P (fn) && !(*targetm.binds_local_p) (fn))
2046 {
2047 DECL_UNINLINABLE (fn) = 1;
2048 return 1;
2049 }
2050
25af8512
AO
2051 if (varargs_function_p (fn))
2052 {
2053 DECL_UNINLINABLE (fn) = 1;
2054 return 1;
2055 }
2056
2057 if (! function_attribute_inlinable_p (fn))
2058 {
2059 DECL_UNINLINABLE (fn) = 1;
2060 return 1;
2061 }
2062
2063 return 0;
2064}
2065
2066/* Add any pending functions other than the current function (already
2067 handled by the caller), that thus cannot be inlined, to FNS_P, then
2068 return the latest function added to the array, PREV_FN. */
2069
19551f29 2070tree
b57b79f7 2071cp_add_pending_fn_decls (void* fns_p, tree prev_fn)
25af8512
AO
2072{
2073 varray_type *fnsp = (varray_type *)fns_p;
2074 struct saved_scope *s;
2075
2076 for (s = scope_chain; s; s = s->prev)
2077 if (s->function_decl && s->function_decl != prev_fn)
2078 {
2079 VARRAY_PUSH_TREE (*fnsp, s->function_decl);
2080 prev_fn = s->function_decl;
2081 }
2082
2083 return prev_fn;
2084}
2085
2086/* Determine whether a tree node is an OVERLOAD node. Used to decide
2087 whether to copy a node or to preserve its chain when inlining a
2088 function. */
2089
19551f29 2090int
b57b79f7 2091cp_is_overload_p (tree t)
25af8512
AO
2092{
2093 return TREE_CODE (t) == OVERLOAD;
2094}
2095
2096/* Determine whether VAR is a declaration of an automatic variable in
2097 function FN. */
2098
19551f29 2099int
b57b79f7 2100cp_auto_var_in_fn_p (tree var, tree fn)
25af8512
AO
2101{
2102 return (DECL_P (var) && DECL_CONTEXT (var) == fn
2103 && nonstatic_local_decl_p (var));
2104}
2105
2106/* Tell whether a declaration is needed for the RESULT of a function
2107 FN being inlined into CALLER or if the top node of target_exprs is
2108 to be used. */
2109
19551f29 2110tree
b57b79f7
NN
2111cp_copy_res_decl_for_inlining (tree result,
2112 tree fn,
2113 tree caller,
2114 void* decl_map_,
2115 int* need_decl,
2116 tree return_slot_addr)
25af8512
AO
2117{
2118 splay_tree decl_map = (splay_tree)decl_map_;
25af8512 2119 tree var;
25af8512 2120
4977bab6
ZW
2121 /* If FN returns an aggregate then the caller will always pass the
2122 address of the return slot explicitly. If we were just to
25af8512
AO
2123 create a new VAR_DECL here, then the result of this function
2124 would be copied (bitwise) into the variable initialized by the
2125 TARGET_EXPR. That's incorrect, so we must transform any
2126 references to the RESULT into references to the target. */
4977bab6
ZW
2127
2128 /* We should have an explicit return slot iff the return type is
2129 TREE_ADDRESSABLE. See simplify_aggr_init_expr. */
2130 if (TREE_ADDRESSABLE (TREE_TYPE (result))
2131 != (return_slot_addr != NULL_TREE))
2132 abort ();
2133
2134 *need_decl = !return_slot_addr;
2135 if (return_slot_addr)
25af8512 2136 {
4977bab6 2137 var = build_indirect_ref (return_slot_addr, "");
25af8512
AO
2138 if (! same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (var),
2139 TREE_TYPE (result)))
2140 abort ();
2141 }
2142 /* Otherwise, make an appropriate copy. */
2143 else
2144 var = copy_decl_for_inlining (result, fn, caller);
2145
2146 if (DECL_SAVED_FUNCTION_DATA (fn))
2147 {
2148 tree nrv = DECL_SAVED_FUNCTION_DATA (fn)->x_return_value;
2149 if (nrv)
2150 {
2151 /* We have a named return value; copy the name and source
2152 position so we can get reasonable debugging information, and
2153 register the return variable as its equivalent. */
9eeb200f
JM
2154 if (TREE_CODE (var) == VAR_DECL
2155 /* But not if we're initializing a variable from the
2156 enclosing function which already has its own name. */
2157 && DECL_NAME (var) == NULL_TREE)
4e8dca1c
JM
2158 {
2159 DECL_NAME (var) = DECL_NAME (nrv);
f31686a3 2160 DECL_SOURCE_LOCATION (var) = DECL_SOURCE_LOCATION (nrv);
4e8dca1c
JM
2161 DECL_ABSTRACT_ORIGIN (var) = DECL_ORIGIN (nrv);
2162 /* Don't lose initialization info. */
2163 DECL_INITIAL (var) = DECL_INITIAL (nrv);
2164 /* Don't forget that it needs to go in the stack. */
2165 TREE_ADDRESSABLE (var) = TREE_ADDRESSABLE (nrv);
2166 }
34902e16 2167
25af8512
AO
2168 splay_tree_insert (decl_map,
2169 (splay_tree_key) nrv,
2170 (splay_tree_value) var);
2171 }
2172 }
2173
2174 return var;
2175}
2176
838dfd8a 2177/* Record that we're about to start inlining FN, and return nonzero if
742a37d5
JM
2178 that's OK. Used for lang_hooks.tree_inlining.start_inlining. */
2179
2180int
b57b79f7 2181cp_start_inlining (tree fn)
742a37d5
JM
2182{
2183 if (DECL_TEMPLATE_INSTANTIATION (fn))
2184 return push_tinst_level (fn);
2185 else
2186 return 1;
2187}
2188
2189/* Record that we're done inlining FN. Used for
2190 lang_hooks.tree_inlining.end_inlining. */
2191
2192void
b57b79f7 2193cp_end_inlining (tree fn ATTRIBUTE_UNUSED )
742a37d5
JM
2194{
2195 if (DECL_TEMPLATE_INSTANTIATION (fn))
2196 pop_tinst_level ();
2197}
2198
87e3dbc9
MM
2199/* Initialize tree.c. */
2200
0a818f84 2201void
b57b79f7 2202init_tree (void)
0a818f84 2203{
e2500fed 2204 list_hash_table = htab_create_ggc (31, list_hash, list_hash_eq, NULL);
0a818f84
GRK
2205}
2206
46e8c075
MM
2207/* Called via walk_tree. If *TP points to a DECL_STMT for a local
2208 declaration, copies the declaration and enters it in the splay_tree
2209 pointed to by DATA (which is really a `splay_tree *'). */
2210
2211static tree
b57b79f7
NN
2212mark_local_for_remap_r (tree* tp,
2213 int* walk_subtrees ATTRIBUTE_UNUSED ,
2214 void* data)
46e8c075
MM
2215{
2216 tree t = *tp;
2217 splay_tree st = (splay_tree) data;
ec47ccca 2218 tree decl;
46e8c075 2219
ec47ccca
MM
2220
2221 if (TREE_CODE (t) == DECL_STMT
2222 && nonstatic_local_decl_p (DECL_STMT_DECL (t)))
2223 decl = DECL_STMT_DECL (t);
2224 else if (TREE_CODE (t) == LABEL_STMT)
2225 decl = LABEL_STMT_LABEL (t);
2226 else if (TREE_CODE (t) == TARGET_EXPR
2227 && nonstatic_local_decl_p (TREE_OPERAND (t, 0)))
2228 decl = TREE_OPERAND (t, 0);
fab701da
MM
2229 else if (TREE_CODE (t) == CASE_LABEL)
2230 decl = CASE_LABEL_DECL (t);
ec47ccca
MM
2231 else
2232 decl = NULL_TREE;
2233
2234 if (decl)
46e8c075 2235 {
46e8c075
MM
2236 tree copy;
2237
46e8c075
MM
2238 /* Make a copy. */
2239 copy = copy_decl_for_inlining (decl,
2240 DECL_CONTEXT (decl),
2241 DECL_CONTEXT (decl));
2242
2243 /* Remember the copy. */
2244 splay_tree_insert (st,
2245 (splay_tree_key) decl,
2246 (splay_tree_value) copy);
0a818f84
GRK
2247 }
2248
46e8c075
MM
2249 return NULL_TREE;
2250}
2251
2252/* Called via walk_tree when an expression is unsaved. Using the
ec47ccca 2253 splay_tree pointed to by ST (which is really a `splay_tree'),
46e8c075
MM
2254 remaps all local declarations to appropriate replacements. */
2255
2256static tree
b57b79f7
NN
2257cp_unsave_r (tree* tp,
2258 int* walk_subtrees,
2259 void* data)
46e8c075
MM
2260{
2261 splay_tree st = (splay_tree) data;
2262 splay_tree_node n;
2263
2264 /* Only a local declaration (variable or label). */
2265 if (nonstatic_local_decl_p (*tp))
2266 {
2267 /* Lookup the declaration. */
2268 n = splay_tree_lookup (st, (splay_tree_key) *tp);
2269
2270 /* If it's there, remap it. */
2271 if (n)
2272 *tp = (tree) n->value;
2273 }
2274 else if (TREE_CODE (*tp) == SAVE_EXPR)
d7d5e42f 2275 remap_save_expr (tp, st, current_function_decl, walk_subtrees);
0a818f84 2276 else
46e8c075
MM
2277 {
2278 copy_tree_r (tp, walk_subtrees, NULL);
2279
2280 /* Do whatever unsaving is required. */
2281 unsave_expr_1 (*tp);
2282 }
2283
2284 /* Keep iterating. */
2285 return NULL_TREE;
0a818f84
GRK
2286}
2287
24965e7a 2288/* Called whenever an expression needs to be unsaved. */
46e8c075 2289
24965e7a 2290tree
b57b79f7 2291cxx_unsave_expr_now (tree tp)
46e8c075
MM
2292{
2293 splay_tree st;
2294
2295 /* Create a splay-tree to map old local variable declarations to new
2296 ones. */
2297 st = splay_tree_new (splay_tree_compare_pointers, NULL, NULL);
2298
2299 /* Walk the tree once figuring out what needs to be remapped. */
24965e7a 2300 walk_tree (&tp, mark_local_for_remap_r, st, NULL);
46e8c075
MM
2301
2302 /* Walk the tree again, copying, remapping, and unsaving. */
24965e7a 2303 walk_tree (&tp, cp_unsave_r, st, NULL);
46e8c075
MM
2304
2305 /* Clean up. */
2306 splay_tree_delete (st);
24965e7a
NB
2307
2308 return tp;
46e8c075 2309}
872f37f9
MM
2310
2311/* Returns the kind of special function that DECL (a FUNCTION_DECL)
50ad9642
MM
2312 is. Note that sfk_none is zero, so this function can be used as a
2313 predicate to test whether or not DECL is a special function. */
872f37f9
MM
2314
2315special_function_kind
b57b79f7 2316special_function_p (tree decl)
872f37f9
MM
2317{
2318 /* Rather than doing all this stuff with magic names, we should
2319 probably have a field of type `special_function_kind' in
2320 DECL_LANG_SPECIFIC. */
2321 if (DECL_COPY_CONSTRUCTOR_P (decl))
2322 return sfk_copy_constructor;
2323 if (DECL_CONSTRUCTOR_P (decl))
2324 return sfk_constructor;
596ea4e5 2325 if (DECL_OVERLOADED_OPERATOR_P (decl) == NOP_EXPR)
872f37f9
MM
2326 return sfk_assignment_operator;
2327 if (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (decl))
2328 return sfk_destructor;
2329 if (DECL_COMPLETE_DESTRUCTOR_P (decl))
2330 return sfk_complete_destructor;
2331 if (DECL_BASE_DESTRUCTOR_P (decl))
2332 return sfk_base_destructor;
2333 if (DECL_DELETING_DESTRUCTOR_P (decl))
2334 return sfk_deleting_destructor;
2335 if (DECL_CONV_FN_P (decl))
2336 return sfk_conversion;
2337
2338 return sfk_none;
2339}
7b019c19 2340
50ad9642
MM
2341/* Returns true if and only if NODE is a name, i.e., a node created
2342 by the parser when processing an id-expression. */
2343
2344bool
2345name_p (tree node)
2346{
2347 if (TREE_CODE (node) == TEMPLATE_ID_EXPR)
2348 node = TREE_OPERAND (node, 0);
2349 return (/* An ordinary unqualified name. */
2350 TREE_CODE (node) == IDENTIFIER_NODE
2351 /* A destructor name. */
2352 || TREE_CODE (node) == BIT_NOT_EXPR
2353 /* A qualified name. */
2354 || TREE_CODE (node) == SCOPE_REF);
2355}
2356
838dfd8a 2357/* Returns nonzero if TYPE is a character type, including wchar_t. */
7b019c19
MM
2358
2359int
b57b79f7 2360char_type_p (tree type)
7b019c19
MM
2361{
2362 return (same_type_p (type, char_type_node)
2363 || same_type_p (type, unsigned_char_type_node)
2364 || same_type_p (type, signed_char_type_node)
2365 || same_type_p (type, wchar_type_node));
2366}
ad50e811
MM
2367
2368/* Returns the kind of linkage associated with the indicated DECL. Th
2369 value returned is as specified by the language standard; it is
2370 independent of implementation details regarding template
2371 instantiation, etc. For example, it is possible that a declaration
2372 to which this function assigns external linkage would not show up
2373 as a global symbol when you run `nm' on the resulting object file. */
2374
2375linkage_kind
b57b79f7 2376decl_linkage (tree decl)
ad50e811
MM
2377{
2378 /* This function doesn't attempt to calculate the linkage from first
2379 principles as given in [basic.link]. Instead, it makes use of
2380 the fact that we have already set TREE_PUBLIC appropriately, and
2381 then handles a few special cases. Ideally, we would calculate
2382 linkage first, and then transform that into a concrete
2383 implementation. */
2384
2385 /* Things that don't have names have no linkage. */
2386 if (!DECL_NAME (decl))
2387 return lk_none;
2388
2389 /* Things that are TREE_PUBLIC have external linkage. */
2390 if (TREE_PUBLIC (decl))
2391 return lk_external;
2392
2393 /* Some things that are not TREE_PUBLIC have external linkage, too.
2394 For example, on targets that don't have weak symbols, we make all
2395 template instantiations have internal linkage (in the object
2396 file), but the symbols should still be treated as having external
2397 linkage from the point of view of the language. */
2398 if (DECL_LANG_SPECIFIC (decl) && DECL_COMDAT (decl))
2399 return lk_external;
2400
2401 /* Things in local scope do not have linkage, if they don't have
2402 TREE_PUBLIC set. */
2403 if (decl_function_context (decl))
2404 return lk_none;
2405
2406 /* Everything else has internal linkage. */
2407 return lk_internal;
2408}
6f30f1f1
JM
2409\f
2410/* EXP is an expression that we want to pre-evaluate. Returns via INITP an
2411 expression to perform the pre-evaluation, and returns directly an
2412 expression to use the precalculated result. */
2413
2414tree
b57b79f7 2415stabilize_expr (tree exp, tree* initp)
6f30f1f1
JM
2416{
2417 tree init_expr;
2418
2419 if (!TREE_SIDE_EFFECTS (exp))
2420 {
2421 init_expr = void_zero_node;
2422 }
2423 else if (!real_lvalue_p (exp)
2424 || !TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (exp)))
2425 {
2426 init_expr = get_target_expr (exp);
2427 exp = TARGET_EXPR_SLOT (init_expr);
2428 }
2429 else
2430 {
2431 exp = build_unary_op (ADDR_EXPR, exp, 1);
2432 init_expr = get_target_expr (exp);
2433 exp = TARGET_EXPR_SLOT (init_expr);
2434 exp = build_indirect_ref (exp, 0);
2435 }
2436
2437 *initp = init_expr;
2438 return exp;
2439}
e2500fed
GK
2440\f
2441#if defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 2007)
2442/* Complain that some language-specific thing hanging off a tree
2443 node has been accessed improperly. */
2444
2445void
b57b79f7 2446lang_check_failed (const char* file, int line, const char* function)
e2500fed
GK
2447{
2448 internal_error ("lang_* check: failed in %s, at %s:%d",
2449 function, trim_filename (file), line);
2450}
2451#endif /* ENABLE_TREE_CHECKING */
2452
2453#include "gt-cp-tree.h"