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