]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/cp/tree.c
c-typeck.c (build_function_call): Give name of object we are attempting to call in...
[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,
6615c446 3 1999, 2000, 2001, 2002, 2003, 2004 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 build_target_expr (tree, tree);
46static tree count_trees_r (tree *, int *, void *);
47static tree verify_stmt_tree_r (tree *, int *, void *);
48static tree find_tree_r (tree *, int *, void *);
a6f86b51 49static tree build_local_temp (tree);
b57b79f7
NN
50
51static tree handle_java_interface_attribute (tree *, tree, tree, int, bool *);
52static tree handle_com_interface_attribute (tree *, tree, tree, int, bool *);
53static tree handle_init_priority_attribute (tree *, tree, tree, int, bool *);
91d231cb 54
27b8d0cd
MM
55/* If REF is an lvalue, returns the kind of lvalue that REF is.
56 Otherwise, returns clk_none. If TREAT_CLASS_RVALUES_AS_LVALUES is
838dfd8a 57 nonzero, rvalues of class type are considered lvalues. */
8d08fdba 58
27b8d0cd 59static cp_lvalue_kind
9f63daea 60lvalue_p_1 (tree ref,
d18a8251 61 int treat_class_rvalues_as_lvalues)
8ccc31eb 62{
27b8d0cd
MM
63 cp_lvalue_kind op1_lvalue_kind = clk_none;
64 cp_lvalue_kind op2_lvalue_kind = clk_none;
65
8ccc31eb 66 if (TREE_CODE (TREE_TYPE (ref)) == REFERENCE_TYPE)
27b8d0cd 67 return clk_ordinary;
8ccc31eb 68
394fd776 69 if (ref == current_class_ptr)
27b8d0cd 70 return clk_none;
8ccc31eb
MS
71
72 switch (TREE_CODE (ref))
73 {
74 /* preincrements and predecrements are valid lvals, provided
e92cc029 75 what they refer to are valid lvals. */
8ccc31eb
MS
76 case PREINCREMENT_EXPR:
77 case PREDECREMENT_EXPR:
8ccc31eb 78 case SAVE_EXPR:
c7ae64f2
JM
79 case TRY_CATCH_EXPR:
80 case WITH_CLEANUP_EXPR:
69851283
MM
81 case REALPART_EXPR:
82 case IMAGPART_EXPR:
83 return lvalue_p_1 (TREE_OPERAND (ref, 0),
d18a8251 84 treat_class_rvalues_as_lvalues);
8ccc31eb 85
27b8d0cd
MM
86 case COMPONENT_REF:
87 op1_lvalue_kind = lvalue_p_1 (TREE_OPERAND (ref, 0),
d18a8251 88 treat_class_rvalues_as_lvalues);
c8b2e872
MM
89 /* In an expression of the form "X.Y", the packed-ness of the
90 expression does not depend on "X". */
91 op1_lvalue_kind &= ~clk_packed;
92 /* Look at the member designator. */
9f63daea
EC
93 if (!op1_lvalue_kind
94 /* The "field" can be a FUNCTION_DECL or an OVERLOAD in some
e0d1297c
NS
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;
9f63daea 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:
315fb5db 129 gcc_unreachable ();
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. */
9f63daea 163 return (DECL_NONSTATIC_MEMBER_FUNCTION_P (ref)
27b8d0cd 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 199{
9f63daea 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{
9f63daea 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
f293ce4b
RS
235 t = build4 (TARGET_EXPR, TREE_TYPE (decl), decl, value,
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 {
f293ce4b
RS
301 rval = build3 (AGGR_INIT_EXPR, void_type_node, fn,
302 TREE_OPERAND (init, 1), slot);
4977bab6
ZW
303 TREE_SIDE_EFFECTS (rval) = 1;
304 AGGR_INIT_VIA_CTOR_P (rval) = is_ctor;
305 }
306 else
307 rval = init;
308
9d85d30c 309 rval = build_target_expr (slot, rval);
8d08fdba 310
8d08fdba
MS
311 return rval;
312}
313
ab93b543 314/* Build a TARGET_EXPR using INIT to initialize a new temporary of the
c506ca22 315 indicated TYPE. */
aa36c081
JM
316
317tree
b57b79f7 318build_target_expr_with_type (tree init, tree type)
aa36c081
JM
319{
320 tree slot;
aa36c081 321
50bc768d 322 gcc_assert (!VOID_TYPE_P (type));
59445d74 323
5062dbd5
JM
324 if (TREE_CODE (init) == TARGET_EXPR)
325 return init;
182609b5 326 else if (CLASS_TYPE_P (type) && !TYPE_HAS_TRIVIAL_INIT_REF (type)
4b5aa881 327 && TREE_CODE (init) != COND_EXPR
662eceda
MM
328 && TREE_CODE (init) != CONSTRUCTOR
329 && TREE_CODE (init) != VA_ARG_EXPR)
182609b5
JM
330 /* We need to build up a copy constructor call. COND_EXPR is a special
331 case because we already have copies on the arms and we don't want
4b5aa881 332 another one here. A CONSTRUCTOR is aggregate initialization, which
662eceda
MM
333 is handled separately. A VA_ARG_EXPR is magic creation of an
334 aggregate; there's no additional work to be done. */
182609b5 335 return force_rvalue (init);
5062dbd5 336
a6f86b51
JM
337 slot = build_local_temp (type);
338 return build_target_expr (slot, init);
339}
aa36c081 340
a6f86b51
JM
341/* Like the above function, but without the checking. This function should
342 only be used by code which is deliberately trying to subvert the type
343 system, such as call_builtin_trap. */
344
345tree
346force_target_expr (tree type, tree init)
347{
59445d74
RH
348 tree slot;
349
50bc768d 350 gcc_assert (!VOID_TYPE_P (type));
59445d74
RH
351
352 slot = build_local_temp (type);
a6f86b51 353 return build_target_expr (slot, init);
aa36c081
JM
354}
355
c506ca22
MM
356/* Like build_target_expr_with_type, but use the type of INIT. */
357
358tree
b57b79f7 359get_target_expr (tree init)
c506ca22
MM
360{
361 return build_target_expr_with_type (init, TREE_TYPE (init));
362}
363
8d08fdba 364\f
bd6dd845 365static tree
b57b79f7 366build_cplus_array_type_1 (tree elt_type, tree index_type)
8d08fdba 367{
8d08fdba
MS
368 tree t;
369
adecb3f4
MM
370 if (elt_type == error_mark_node || index_type == error_mark_node)
371 return error_mark_node;
372
58496de1
NS
373 if (dependent_type_p (elt_type)
374 || (index_type
375 && value_dependent_expression_p (TYPE_MAX_VALUE (index_type))))
5566b478
MS
376 {
377 t = make_node (ARRAY_TYPE);
378 TREE_TYPE (t) = elt_type;
379 TYPE_DOMAIN (t) = index_type;
380 }
381 else
80661759 382 t = build_array_type (elt_type, index_type);
8d08fdba
MS
383
384 /* Push these needs up so that initialization takes place
385 more easily. */
9f63daea 386 TYPE_NEEDS_CONSTRUCTING (t)
db3626d1 387 = TYPE_NEEDS_CONSTRUCTING (TYPE_MAIN_VARIANT (elt_type));
9f63daea 388 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t)
834c6dff 389 = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TYPE_MAIN_VARIANT (elt_type));
8d08fdba
MS
390 return t;
391}
e349ee73
MS
392
393tree
b57b79f7 394build_cplus_array_type (tree elt_type, tree index_type)
e349ee73
MS
395{
396 tree t;
89d684bb 397 int type_quals = cp_type_quals (elt_type);
91063b51 398
4b011bbf
JM
399 if (type_quals != TYPE_UNQUALIFIED)
400 elt_type = cp_build_qualified_type (elt_type, TYPE_UNQUALIFIED);
e349ee73
MS
401
402 t = build_cplus_array_type_1 (elt_type, index_type);
403
4b011bbf
JM
404 if (type_quals != TYPE_UNQUALIFIED)
405 t = cp_build_qualified_type (t, type_quals);
e349ee73
MS
406
407 return t;
408}
8d08fdba 409\f
adecb3f4
MM
410/* Make a variant of TYPE, qualified with the TYPE_QUALS. Handles
411 arrays correctly. In particular, if TYPE is an array of T's, and
c2ea3a40 412 TYPE_QUALS is non-empty, returns an array of qualified T's.
9f63daea 413
4f2b0fb2
NS
414 FLAGS determines how to deal with illformed qualifications. If
415 tf_ignore_bad_quals is set, then bad qualifications are dropped
416 (this is permitted if TYPE was introduced via a typedef or template
417 type parameter). If bad qualifications are dropped and tf_warning
418 is set, then a warning is issued for non-const qualifications. If
419 tf_ignore_bad_quals is not set and tf_error is not set, we
420 return error_mark_node. Otherwise, we issue an error, and ignore
421 the qualifications.
422
423 Qualification of a reference type is valid when the reference came
424 via a typedef or template type argument. [dcl.ref] No such
425 dispensation is provided for qualifying a function type. [dcl.fct]
426 DR 295 queries this and the proposed resolution brings it into line
34cd5ae7 427 with qualifying a reference. We implement the DR. We also behave
4f2b0fb2 428 in a similar manner for restricting non-pointer types. */
9f63daea 429
f376e137 430tree
9f63daea
EC
431cp_build_qualified_type_real (tree type,
432 int type_quals,
b57b79f7 433 tsubst_flags_t complain)
f376e137 434{
2adeacc9 435 tree result;
4f2b0fb2 436 int bad_quals = TYPE_UNQUALIFIED;
2adeacc9 437
e76a2646
MS
438 if (type == error_mark_node)
439 return type;
e271912d 440
89d684bb 441 if (type_quals == cp_type_quals (type))
e271912d
JM
442 return type;
443
4f2b0fb2 444 if (TREE_CODE (type) == ARRAY_TYPE)
f376e137 445 {
db3626d1
MM
446 /* In C++, the qualification really applies to the array element
447 type. Obtain the appropriately qualified element type. */
448 tree t;
9f63daea
EC
449 tree element_type
450 = cp_build_qualified_type_real (TREE_TYPE (type),
db3626d1
MM
451 type_quals,
452 complain);
453
454 if (element_type == error_mark_node)
adecb3f4 455 return error_mark_node;
f376e137 456
29fae15c
MM
457 /* See if we already have an identically qualified type. */
458 for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
9f63daea 459 if (cp_type_quals (t) == type_quals
29fae15c
MM
460 && TYPE_NAME (t) == TYPE_NAME (type)
461 && TYPE_CONTEXT (t) == TYPE_CONTEXT (type))
462 break;
9f63daea 463
29fae15c
MM
464 if (!t)
465 {
466 /* Make a new array type, just like the old one, but with the
467 appropriately qualified element type. */
8dd16ecc 468 t = build_variant_type_copy (type);
29fae15c
MM
469 TREE_TYPE (t) = element_type;
470 }
f376e137 471
db3626d1 472 /* Even if we already had this variant, we update
834c6dff 473 TYPE_NEEDS_CONSTRUCTING and TYPE_HAS_NONTRIVIAL_DESTRUCTOR in case
9f63daea
EC
474 they changed since the variant was originally created.
475
db3626d1
MM
476 This seems hokey; if there is some way to use a previous
477 variant *without* coming through here,
478 TYPE_NEEDS_CONSTRUCTING will never be updated. */
9f63daea 479 TYPE_NEEDS_CONSTRUCTING (t)
db3626d1 480 = TYPE_NEEDS_CONSTRUCTING (TYPE_MAIN_VARIANT (element_type));
9f63daea 481 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t)
834c6dff 482 = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TYPE_MAIN_VARIANT (element_type));
db3626d1 483 return t;
f376e137 484 }
2adeacc9
MM
485 else if (TYPE_PTRMEMFUNC_P (type))
486 {
487 /* For a pointer-to-member type, we can't just return a
488 cv-qualified version of the RECORD_TYPE. If we do, we
4f2b0fb2 489 haven't changed the field that contains the actual pointer to
2adeacc9
MM
490 a method, and so TYPE_PTRMEMFUNC_FN_TYPE will be wrong. */
491 tree t;
492
493 t = TYPE_PTRMEMFUNC_FN_TYPE (type);
494 t = cp_build_qualified_type_real (t, type_quals, complain);
46cbda4a 495 return build_ptrmemfunc_type (t);
2adeacc9 496 }
9f63daea 497
4b011bbf
JM
498 /* A reference, function or method type shall not be cv qualified.
499 [dcl.ref], [dct.fct] */
500 if (type_quals & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE)
501 && (TREE_CODE (type) == REFERENCE_TYPE
502 || TREE_CODE (type) == FUNCTION_TYPE
503 || TREE_CODE (type) == METHOD_TYPE))
504 {
505 bad_quals |= type_quals & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE);
4b011bbf
JM
506 type_quals &= ~(TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE);
507 }
9f63daea 508
4b011bbf
JM
509 /* A restrict-qualified type must be a pointer (or reference)
510 to object or incomplete type. */
511 if ((type_quals & TYPE_QUAL_RESTRICT)
512 && TREE_CODE (type) != TEMPLATE_TYPE_PARM
513 && TREE_CODE (type) != TYPENAME_TYPE
514 && !POINTER_TYPE_P (type))
515 {
516 bad_quals |= TYPE_QUAL_RESTRICT;
517 type_quals &= ~TYPE_QUAL_RESTRICT;
518 }
519
520 if (bad_quals == TYPE_UNQUALIFIED)
521 /*OK*/;
522 else if (!(complain & (tf_error | tf_ignore_bad_quals)))
523 return error_mark_node;
4b011bbf
JM
524 else
525 {
526 if (complain & tf_ignore_bad_quals)
527 /* We're not going to warn about constifying things that can't
528 be constified. */
529 bad_quals &= ~TYPE_QUAL_CONST;
4b011bbf
JM
530 if (bad_quals)
531 {
532 tree bad_type = build_qualified_type (ptr_type_node, bad_quals);
9f63daea 533
2e9ceb77 534 if (!(complain & tf_ignore_bad_quals))
4b011bbf
JM
535 error ("`%V' qualifiers cannot be applied to `%T'",
536 bad_type, type);
537 }
538 }
9f63daea 539
2adeacc9
MM
540 /* Retrieve (or create) the appropriately qualified variant. */
541 result = build_qualified_type (type, type_quals);
542
543 /* If this was a pointer-to-method type, and we just made a copy,
3cfab7ec
GK
544 then we need to unshare the record that holds the cached
545 pointer-to-member-function type, because these will be distinct
546 between the unqualified and qualified types. */
9f63daea 547 if (result != type
2adeacc9
MM
548 && TREE_CODE (type) == POINTER_TYPE
549 && TREE_CODE (TREE_TYPE (type)) == METHOD_TYPE)
3cfab7ec 550 TYPE_LANG_SPECIFIC (result) = NULL;
2adeacc9
MM
551
552 return result;
f376e137 553}
53929c47
JM
554
555/* Returns the canonical version of TYPE. In other words, if TYPE is
556 a typedef, returns the underlying type. The cv-qualification of
557 the type returned matches the type input; they will always be
558 compatible types. */
559
560tree
b57b79f7 561canonical_type_variant (tree t)
53929c47 562{
89d684bb 563 return cp_build_qualified_type (TYPE_MAIN_VARIANT (t), cp_type_quals (t));
53929c47 564}
f376e137 565\f
48b45647
NS
566/* Makes a copy of BINFO and TYPE, which is to be inherited into a
567 graph dominated by T. If BINFO is NULL, TYPE is a dependent base,
568 and we do a shallow copy. If BINFO is non-NULL, we do a deep copy.
569 VIRT indicates whether TYPE is inherited virtually or not.
570 IGO_PREV points at the previous binfo of the inheritance graph
571 order chain. The newly copied binfo's TREE_CHAIN forms this
572 ordering.
573
574 The CLASSTYPE_VBASECLASSES vector of T is constructed in the
575 correct order. That is in the order the bases themselves should be
576 constructed in.
dbbf88d1
NS
577
578 The BINFO_INHERITANCE of a virtual base class points to the binfo
48b45647
NS
579 of the most derived type. ??? We could probably change this so that
580 BINFO_INHERITANCE becomes synonymous with BINFO_PRIMARY, and hence
581 remove a field. They currently can only differ for primary virtual
582 virtual bases. */
dbbf88d1
NS
583
584tree
48b45647 585copy_binfo (tree binfo, tree type, tree t, tree *igo_prev, int virt)
9a71c18b 586{
48b45647 587 tree new_binfo;
9a71c18b 588
48b45647
NS
589 if (virt)
590 {
591 /* See if we've already made this virtual base. */
592 new_binfo = binfo_for_vbase (type, t);
593 if (new_binfo)
594 return new_binfo;
595 }
9f63daea 596
fa743e8c 597 new_binfo = make_tree_binfo (binfo ? BINFO_N_BASE_BINFOS (binfo) : 0);
48b45647 598 BINFO_TYPE (new_binfo) = type;
9a71c18b 599
48b45647
NS
600 /* Chain it into the inheritance graph. */
601 TREE_CHAIN (*igo_prev) = new_binfo;
602 *igo_prev = new_binfo;
9f63daea 603
48b45647 604 if (binfo)
dfbcd65a 605 {
fa743e8c
NS
606 int ix;
607 tree base_binfo;
9f63daea 608
50bc768d
NS
609 gcc_assert (!BINFO_DEPENDENT_BASE_P (binfo));
610 gcc_assert (type == BINFO_TYPE (binfo));
9f63daea 611
48b45647
NS
612 BINFO_OFFSET (new_binfo) = BINFO_OFFSET (binfo);
613 BINFO_VIRTUALS (new_binfo) = BINFO_VIRTUALS (binfo);
9f63daea 614
fa743e8c
NS
615 /* We do not need to copy the accesses, as they are read only. */
616 BINFO_BASE_ACCESSES (new_binfo) = BINFO_BASE_ACCESSES (binfo);
9f63daea 617
48b45647 618 /* Recursively copy base binfos of BINFO. */
fa743e8c 619 for (ix = 0; BINFO_BASE_ITERATE (binfo, ix, base_binfo); ix++)
dbbf88d1 620 {
48b45647 621 tree new_base_binfo;
9f63daea 622
50bc768d 623 gcc_assert (!BINFO_DEPENDENT_BASE_P (base_binfo));
48b45647
NS
624 new_base_binfo = copy_binfo (base_binfo, BINFO_TYPE (base_binfo),
625 t, igo_prev,
626 BINFO_VIRTUAL_P (base_binfo));
9f63daea 627
48b45647
NS
628 if (!BINFO_INHERITANCE_CHAIN (new_base_binfo))
629 BINFO_INHERITANCE_CHAIN (new_base_binfo) = new_binfo;
fa743e8c 630 BINFO_BASE_APPEND (new_binfo, new_base_binfo);
dbbf88d1 631 }
9a71c18b 632 }
48b45647
NS
633 else
634 BINFO_DEPENDENT_BASE_P (new_binfo) = 1;
9f63daea 635
48b45647
NS
636 if (virt)
637 {
638 /* Push it onto the list after any virtual bases it contains
639 will have been pushed. */
640 VEC_quick_push (tree, CLASSTYPE_VBASECLASSES (t), new_binfo);
641 BINFO_VIRTUAL_P (new_binfo) = 1;
642 BINFO_INHERITANCE_CHAIN (new_binfo) = TYPE_BINFO (t);
643 }
9f63daea 644
48b45647 645 return new_binfo;
9a71c18b 646}
8d08fdba
MS
647\f
648/* Hashing of lists so that we don't make duplicates.
649 The entry point is `list_hash_canon'. */
650
8d08fdba
MS
651/* Now here is the hash table. When recording a list, it is added
652 to the slot whose index is the hash code mod the table size.
653 Note that the hash table is used for several kinds of lists.
654 While all these live in the same table, they are completely independent,
655 and the hash code is computed differently for each of these. */
656
e2500fed 657static GTY ((param_is (union tree_node))) htab_t list_hash_table;
9ccb25d5 658
9f63daea 659struct list_proxy
9ccb25d5
MM
660{
661 tree purpose;
662 tree value;
663 tree chain;
664};
665
666/* Compare ENTRY (an entry in the hash table) with DATA (a list_proxy
667 for a node we are thinking about adding). */
668
669static int
b57b79f7 670list_hash_eq (const void* entry, const void* data)
9ccb25d5
MM
671{
672 tree t = (tree) entry;
673 struct list_proxy *proxy = (struct list_proxy *) data;
674
675 return (TREE_VALUE (t) == proxy->value
676 && TREE_PURPOSE (t) == proxy->purpose
677 && TREE_CHAIN (t) == proxy->chain);
678}
8d08fdba
MS
679
680/* Compute a hash code for a list (chain of TREE_LIST nodes
681 with goodies in the TREE_PURPOSE, TREE_VALUE, and bits of the
682 TREE_COMMON slots), by adding the hash codes of the individual entries. */
683
9ccb25d5 684static hashval_t
b57b79f7 685list_hash_pieces (tree purpose, tree value, tree chain)
8d08fdba 686{
9ccb25d5 687 hashval_t hashcode = 0;
9f63daea 688
37c46b43 689 if (chain)
fd917e0d 690 hashcode += TREE_HASH (chain);
9f63daea 691
37c46b43 692 if (value)
fd917e0d 693 hashcode += TREE_HASH (value);
8d08fdba
MS
694 else
695 hashcode += 1007;
37c46b43 696 if (purpose)
fd917e0d 697 hashcode += TREE_HASH (purpose);
8d08fdba
MS
698 else
699 hashcode += 1009;
700 return hashcode;
701}
702
9ccb25d5 703/* Hash an already existing TREE_LIST. */
8d08fdba 704
9ccb25d5 705static hashval_t
b57b79f7 706list_hash (const void* p)
8d08fdba 707{
9ccb25d5 708 tree t = (tree) p;
9f63daea
EC
709 return list_hash_pieces (TREE_PURPOSE (t),
710 TREE_VALUE (t),
9ccb25d5 711 TREE_CHAIN (t));
8d08fdba
MS
712}
713
51632249
JM
714/* Given list components PURPOSE, VALUE, AND CHAIN, return the canonical
715 object for an identical list if one already exists. Otherwise, build a
716 new one, and record it as the canonical object. */
8d08fdba 717
8d08fdba 718tree
b57b79f7 719hash_tree_cons (tree purpose, tree value, tree chain)
8d08fdba 720{
a703fb38 721 int hashcode = 0;
fad205ff 722 void **slot;
9ccb25d5
MM
723 struct list_proxy proxy;
724
725 /* Hash the list node. */
726 hashcode = list_hash_pieces (purpose, value, chain);
727 /* Create a proxy for the TREE_LIST we would like to create. We
728 don't actually create it so as to avoid creating garbage. */
729 proxy.purpose = purpose;
730 proxy.value = value;
731 proxy.chain = chain;
732 /* See if it is already in the table. */
733 slot = htab_find_slot_with_hash (list_hash_table, &proxy, hashcode,
734 INSERT);
735 /* If not, create a new node. */
736 if (!*slot)
fad205ff 737 *slot = tree_cons (purpose, value, chain);
9ccb25d5 738 return *slot;
8d08fdba
MS
739}
740
741/* Constructor for hashed lists. */
e92cc029 742
8d08fdba 743tree
b57b79f7 744hash_tree_chain (tree value, tree chain)
8d08fdba 745{
51632249 746 return hash_tree_cons (NULL_TREE, value, chain);
8d08fdba
MS
747}
748
749/* Similar, but used for concatenating two lists. */
e92cc029 750
8d08fdba 751tree
b57b79f7 752hash_chainon (tree list1, tree list2)
8d08fdba
MS
753{
754 if (list2 == 0)
755 return list1;
756 if (list1 == 0)
757 return list2;
758 if (TREE_CHAIN (list1) == NULL_TREE)
759 return hash_tree_chain (TREE_VALUE (list1), list2);
760 return hash_tree_chain (TREE_VALUE (list1),
761 hash_chainon (TREE_CHAIN (list1), list2));
762}
8d08fdba 763\f
8d08fdba 764void
b57b79f7 765debug_binfo (tree elem)
8d08fdba 766{
fed3cef0 767 HOST_WIDE_INT n;
8d08fdba
MS
768 tree virtuals;
769
90ff44cf
KG
770 fprintf (stderr, "type \"%s\", offset = " HOST_WIDE_INT_PRINT_DEC
771 "\nvtable type:\n",
772 TYPE_NAME_STRING (BINFO_TYPE (elem)),
fed3cef0 773 TREE_INT_CST_LOW (BINFO_OFFSET (elem)));
8d08fdba
MS
774 debug_tree (BINFO_TYPE (elem));
775 if (BINFO_VTABLE (elem))
fed3cef0 776 fprintf (stderr, "vtable decl \"%s\"\n",
c35cce41 777 IDENTIFIER_POINTER (DECL_NAME (get_vtbl_decl_for_binfo (elem))));
8d08fdba
MS
778 else
779 fprintf (stderr, "no vtable decl yet\n");
780 fprintf (stderr, "virtuals:\n");
da3d4dfa 781 virtuals = BINFO_VIRTUALS (elem);
1f84ec23 782 n = 0;
f30432d7 783
8d08fdba
MS
784 while (virtuals)
785 {
83f2ccf4 786 tree fndecl = TREE_VALUE (virtuals);
71e89f27 787 fprintf (stderr, "%s [%ld =? %ld]\n",
8d08fdba 788 IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (fndecl)),
71e89f27 789 (long) n, (long) TREE_INT_CST_LOW (DECL_VINDEX (fndecl)));
f30432d7 790 ++n;
8d08fdba 791 virtuals = TREE_CHAIN (virtuals);
8d08fdba
MS
792 }
793}
794
8d08fdba 795int
b57b79f7 796count_functions (tree t)
8d08fdba 797{
2c73f9f5 798 int i;
315fb5db 799
8d08fdba
MS
800 if (TREE_CODE (t) == FUNCTION_DECL)
801 return 1;
315fb5db
NS
802 gcc_assert (TREE_CODE (t) == OVERLOAD);
803
804 for (i = 0; t; t = OVL_CHAIN (t))
805 i++;
806 return i;
8d08fdba
MS
807}
808
8d08fdba 809int
b57b79f7 810is_overloaded_fn (tree x)
8d08fdba 811{
4bb0968f 812 /* A baselink is also considered an overloaded function. */
05e0b2f4
JM
813 if (TREE_CODE (x) == OFFSET_REF)
814 x = TREE_OPERAND (x, 1);
4bb0968f 815 if (BASELINK_P (x))
da15dae6 816 x = BASELINK_FUNCTIONS (x);
06ab59df
MM
817 return (TREE_CODE (x) == FUNCTION_DECL
818 || TREE_CODE (x) == TEMPLATE_ID_EXPR
819 || DECL_FUNCTION_TEMPLATE_P (x)
2c73f9f5 820 || TREE_CODE (x) == OVERLOAD);
8d08fdba
MS
821}
822
8926095f 823int
b57b79f7 824really_overloaded_fn (tree x)
9f63daea 825{
4bb0968f 826 /* A baselink is also considered an overloaded function. */
05e0b2f4
JM
827 if (TREE_CODE (x) == OFFSET_REF)
828 x = TREE_OPERAND (x, 1);
4bb0968f 829 if (BASELINK_P (x))
da15dae6 830 x = BASELINK_FUNCTIONS (x);
9f63daea 831
5a9a1961
NS
832 return ((TREE_CODE (x) == OVERLOAD && OVL_CHAIN (x))
833 || DECL_FUNCTION_TEMPLATE_P (OVL_CURRENT (x))
834 || TREE_CODE (x) == TEMPLATE_ID_EXPR);
8926095f
MS
835}
836
8d08fdba 837tree
b57b79f7 838get_first_fn (tree from)
8d08fdba 839{
50bc768d 840 gcc_assert (is_overloaded_fn (from));
c6002625 841 /* A baselink is also considered an overloaded function. */
4bb0968f 842 if (BASELINK_P (from))
da15dae6 843 from = BASELINK_FUNCTIONS (from);
2c73f9f5
ML
844 return OVL_CURRENT (from);
845}
8d08fdba 846
8d7f862c
JM
847/* Returns nonzero if T is a ->* or .* expression that refers to a
848 member function. */
849
850int
b57b79f7 851bound_pmf_p (tree t)
8d7f862c
JM
852{
853 return (TREE_CODE (t) == OFFSET_REF
854 && TYPE_PTRMEMFUNC_P (TREE_TYPE (TREE_OPERAND (t, 1))));
855}
856
c6002625 857/* Return a new OVL node, concatenating it with the old one. */
2c73f9f5
ML
858
859tree
b57b79f7 860ovl_cons (tree decl, tree chain)
2c73f9f5
ML
861{
862 tree result = make_node (OVERLOAD);
863 TREE_TYPE (result) = unknown_type_node;
864 OVL_FUNCTION (result) = decl;
865 TREE_CHAIN (result) = chain;
9f63daea 866
2c73f9f5
ML
867 return result;
868}
869
2c73f9f5
ML
870/* Build a new overloaded function. If this is the first one,
871 just return it; otherwise, ovl_cons the _DECLs */
872
873tree
b57b79f7 874build_overload (tree decl, tree chain)
2c73f9f5 875{
161c12b0 876 if (! chain && TREE_CODE (decl) != TEMPLATE_DECL)
2c73f9f5 877 return decl;
161c12b0 878 if (chain && TREE_CODE (chain) != OVERLOAD)
2c73f9f5
ML
879 chain = ovl_cons (chain, NULL_TREE);
880 return ovl_cons (decl, chain);
881}
882
8d08fdba
MS
883\f
884#define PRINT_RING_SIZE 4
885
e1def31b 886const char *
b57b79f7 887cxx_printable_name (tree decl, int v)
8d08fdba
MS
888{
889 static tree decl_ring[PRINT_RING_SIZE];
890 static char *print_ring[PRINT_RING_SIZE];
891 static int ring_counter;
892 int i;
893
894 /* Only cache functions. */
2ba25f50
MS
895 if (v < 2
896 || TREE_CODE (decl) != FUNCTION_DECL
8d08fdba 897 || DECL_LANG_SPECIFIC (decl) == 0)
2ba25f50 898 return lang_decl_name (decl, v);
8d08fdba
MS
899
900 /* See if this print name is lying around. */
901 for (i = 0; i < PRINT_RING_SIZE; i++)
902 if (decl_ring[i] == decl)
903 /* yes, so return it. */
904 return print_ring[i];
905
906 if (++ring_counter == PRINT_RING_SIZE)
907 ring_counter = 0;
908
909 if (current_function_decl != NULL_TREE)
910 {
911 if (decl_ring[ring_counter] == current_function_decl)
912 ring_counter += 1;
913 if (ring_counter == PRINT_RING_SIZE)
914 ring_counter = 0;
315fb5db 915 gcc_assert (decl_ring[ring_counter] != current_function_decl);
8d08fdba
MS
916 }
917
918 if (print_ring[ring_counter])
919 free (print_ring[ring_counter]);
920
2ba25f50
MS
921 print_ring[ring_counter] = xstrdup (lang_decl_name (decl, v));
922 decl_ring[ring_counter] = decl;
8d08fdba
MS
923 return print_ring[ring_counter];
924}
925\f
f30432d7 926/* Build the FUNCTION_TYPE or METHOD_TYPE which may throw exceptions
8d08fdba 927 listed in RAISES. */
e92cc029 928
8d08fdba 929tree
b57b79f7 930build_exception_variant (tree type, tree raises)
8d08fdba 931{
8d08fdba 932 tree v = TYPE_MAIN_VARIANT (type);
91063b51 933 int type_quals = TYPE_QUALS (type);
8d08fdba 934
45537677 935 for (; v; v = TYPE_NEXT_VARIANT (v))
896c3aa3
JM
936 if (check_qualified_type (v, type, type_quals)
937 && comp_except_specs (raises, TYPE_RAISES_EXCEPTIONS (v), 1))
4cc1d462 938 return v;
8d08fdba
MS
939
940 /* Need to build a new variant. */
8dd16ecc 941 v = build_variant_type_copy (type);
8d08fdba
MS
942 TYPE_RAISES_EXCEPTIONS (v) = raises;
943 return v;
944}
945
dac65501
KL
946/* Given a TEMPLATE_TEMPLATE_PARM node T, create a new
947 BOUND_TEMPLATE_TEMPLATE_PARM bound with NEWARGS as its template
1899c3a4 948 arguments. */
73b0fce8
KL
949
950tree
b57b79f7 951bind_template_template_parm (tree t, tree newargs)
73b0fce8 952{
1899c3a4 953 tree decl = TYPE_NAME (t);
6b9b6b15
JM
954 tree t2;
955
dac65501
KL
956 t2 = make_aggr_type (BOUND_TEMPLATE_TEMPLATE_PARM);
957 decl = build_decl (TYPE_DECL, DECL_NAME (decl), NULL_TREE);
1899c3a4 958
dac65501
KL
959 /* These nodes have to be created to reflect new TYPE_DECL and template
960 arguments. */
961 TEMPLATE_TYPE_PARM_INDEX (t2) = copy_node (TEMPLATE_TYPE_PARM_INDEX (t));
962 TEMPLATE_PARM_DECL (TEMPLATE_TYPE_PARM_INDEX (t2)) = decl;
963 TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (t2)
9f63daea 964 = tree_cons (TEMPLATE_TEMPLATE_PARM_TEMPLATE_DECL (t),
dac65501 965 newargs, NULL_TREE);
6b9b6b15 966
1899c3a4
KL
967 TREE_TYPE (decl) = t2;
968 TYPE_NAME (t2) = decl;
969 TYPE_STUB_DECL (t2) = decl;
dac65501 970 TYPE_SIZE (t2) = 0;
73b0fce8 971
73b0fce8
KL
972 return t2;
973}
974
bf3428d0 975/* Called from count_trees via walk_tree. */
297a5329
JM
976
977static tree
44de5aeb 978count_trees_r (tree *tp, int *walk_subtrees, void *data)
297a5329 979{
44de5aeb
RK
980 ++*((int *) data);
981
982 if (TYPE_P (*tp))
983 *walk_subtrees = 0;
984
297a5329
JM
985 return NULL_TREE;
986}
987
988/* Debugging function for measuring the rough complexity of a tree
989 representation. */
990
991int
b57b79f7 992count_trees (tree t)
297a5329 993{
bf3428d0 994 int n_trees = 0;
ee94fce6 995 walk_tree_without_duplicates (&t, count_trees_r, &n_trees);
297a5329 996 return n_trees;
9f63daea 997}
297a5329 998
b2244c65
MM
999/* Called from verify_stmt_tree via walk_tree. */
1000
1001static tree
9f63daea
EC
1002verify_stmt_tree_r (tree* tp,
1003 int* walk_subtrees ATTRIBUTE_UNUSED ,
b57b79f7 1004 void* data)
b2244c65
MM
1005{
1006 tree t = *tp;
1007 htab_t *statements = (htab_t *) data;
1008 void **slot;
1009
009ed910 1010 if (!STATEMENT_CODE_P (TREE_CODE (t)))
b2244c65
MM
1011 return NULL_TREE;
1012
1013 /* If this statement is already present in the hash table, then
1014 there is a circularity in the statement tree. */
315fb5db 1015 gcc_assert (!htab_find (*statements, t));
9f63daea 1016
b2244c65
MM
1017 slot = htab_find_slot (*statements, t, INSERT);
1018 *slot = t;
1019
1020 return NULL_TREE;
1021}
1022
1023/* Debugging function to check that the statement T has not been
1024 corrupted. For now, this function simply checks that T contains no
1025 circularities. */
1026
1027void
b57b79f7 1028verify_stmt_tree (tree t)
b2244c65
MM
1029{
1030 htab_t statements;
1031 statements = htab_create (37, htab_hash_pointer, htab_eq_pointer, NULL);
ee94fce6 1032 walk_tree (&t, verify_stmt_tree_r, &statements, NULL);
b2244c65
MM
1033 htab_delete (statements);
1034}
1035
1036/* Called from find_tree via walk_tree. */
1037
1038static tree
9f63daea
EC
1039find_tree_r (tree* tp,
1040 int* walk_subtrees ATTRIBUTE_UNUSED ,
b57b79f7 1041 void* data)
b2244c65
MM
1042{
1043 if (*tp == (tree) data)
1044 return (tree) data;
1045
1046 return NULL_TREE;
1047}
1048
1049/* Returns X if X appears in the tree structure rooted at T. */
1050
1051tree
b57b79f7 1052find_tree (tree t, tree x)
b2244c65 1053{
ee94fce6 1054 return walk_tree_without_duplicates (&t, find_tree_r, x);
b2244c65
MM
1055}
1056
50a6dbd7 1057/* Check if the type T depends on a type with no linkage and if so, return
4684cd27
MM
1058 it. If RELAXED_P then do not consider a class type declared within
1059 a TREE_PUBLIC function to have no linkage. */
50a6dbd7
JM
1060
1061tree
4684cd27 1062no_linkage_check (tree t, bool relaxed_p)
50a6dbd7 1063{
caf43ca4
MM
1064 tree r;
1065
2adeacc9
MM
1066 /* There's no point in checking linkage on template functions; we
1067 can't know their complete types. */
1068 if (processing_template_decl)
1069 return NULL_TREE;
1070
caf43ca4
MM
1071 switch (TREE_CODE (t))
1072 {
4684cd27
MM
1073 tree fn;
1074
caf43ca4
MM
1075 case RECORD_TYPE:
1076 if (TYPE_PTRMEMFUNC_P (t))
1077 goto ptrmem;
1078 /* Fall through. */
1079 case UNION_TYPE:
1080 if (!CLASS_TYPE_P (t))
1081 return NULL_TREE;
1082 /* Fall through. */
1083 case ENUMERAL_TYPE:
4684cd27
MM
1084 if (TYPE_ANONYMOUS_P (t))
1085 return t;
1086 fn = decl_function_context (TYPE_MAIN_DECL (t));
1087 if (fn && (!relaxed_p || !TREE_PUBLIC (fn)))
caf43ca4
MM
1088 return t;
1089 return NULL_TREE;
1090
1091 case ARRAY_TYPE:
1092 case POINTER_TYPE:
1093 case REFERENCE_TYPE:
4684cd27 1094 return no_linkage_check (TREE_TYPE (t), relaxed_p);
caf43ca4
MM
1095
1096 case OFFSET_TYPE:
1097 ptrmem:
4684cd27
MM
1098 r = no_linkage_check (TYPE_PTRMEM_POINTED_TO_TYPE (t),
1099 relaxed_p);
caf43ca4
MM
1100 if (r)
1101 return r;
4684cd27 1102 return no_linkage_check (TYPE_PTRMEM_CLASS_TYPE (t), relaxed_p);
caf43ca4
MM
1103
1104 case METHOD_TYPE:
4684cd27 1105 r = no_linkage_check (TYPE_METHOD_BASETYPE (t), relaxed_p);
caf43ca4
MM
1106 if (r)
1107 return r;
1108 /* Fall through. */
1109 case FUNCTION_TYPE:
1110 {
1111 tree parm;
9f63daea
EC
1112 for (parm = TYPE_ARG_TYPES (t);
1113 parm && parm != void_list_node;
caf43ca4
MM
1114 parm = TREE_CHAIN (parm))
1115 {
4684cd27 1116 r = no_linkage_check (TREE_VALUE (parm), relaxed_p);
caf43ca4
MM
1117 if (r)
1118 return r;
1119 }
4684cd27 1120 return no_linkage_check (TREE_TYPE (t), relaxed_p);
caf43ca4
MM
1121 }
1122
1123 default:
1124 return NULL_TREE;
1125 }
50a6dbd7
JM
1126}
1127
5566b478
MS
1128#ifdef GATHER_STATISTICS
1129extern int depth_reached;
1130#endif
1131
8d08fdba 1132void
b57b79f7 1133cxx_print_statistics (void)
8d08fdba 1134{
8d08fdba
MS
1135 print_search_statistics ();
1136 print_class_statistics ();
5566b478
MS
1137#ifdef GATHER_STATISTICS
1138 fprintf (stderr, "maximum template instantiation depth reached: %d\n",
1139 depth_reached);
1140#endif
8d08fdba
MS
1141}
1142
e92cc029
MS
1143/* Return, as an INTEGER_CST node, the number of elements for TYPE
1144 (which is an ARRAY_TYPE). This counts only elements of the top
1145 array. */
8d08fdba
MS
1146
1147tree
b57b79f7 1148array_type_nelts_top (tree type)
8d08fdba 1149{
f293ce4b
RS
1150 return fold (build2 (PLUS_EXPR, sizetype,
1151 array_type_nelts (type),
1152 integer_one_node));
8d08fdba
MS
1153}
1154
e92cc029
MS
1155/* Return, as an INTEGER_CST node, the number of elements for TYPE
1156 (which is an ARRAY_TYPE). This one is a recursive count of all
1157 ARRAY_TYPEs that are clumped together. */
8d08fdba
MS
1158
1159tree
b57b79f7 1160array_type_nelts_total (tree type)
8d08fdba
MS
1161{
1162 tree sz = array_type_nelts_top (type);
1163 type = TREE_TYPE (type);
1164 while (TREE_CODE (type) == ARRAY_TYPE)
1165 {
1166 tree n = array_type_nelts_top (type);
f293ce4b 1167 sz = fold (build2 (MULT_EXPR, sizetype, sz, n));
8d08fdba
MS
1168 type = TREE_TYPE (type);
1169 }
1170 return sz;
1171}
878cd289 1172
b3ab27f3
MM
1173/* Called from break_out_target_exprs via mapcar. */
1174
1175static tree
b57b79f7 1176bot_manip (tree* tp, int* walk_subtrees, void* data)
878cd289 1177{
8dfaeb63
MM
1178 splay_tree target_remap = ((splay_tree) data);
1179 tree t = *tp;
1180
4f976745 1181 if (!TYPE_P (t) && TREE_CONSTANT (t))
8dfaeb63 1182 {
495d26d6
JM
1183 /* There can't be any TARGET_EXPRs or their slot variables below
1184 this point. We used to check !TREE_SIDE_EFFECTS, but then we
1185 failed to copy an ADDR_EXPR of the slot VAR_DECL. */
8dfaeb63
MM
1186 *walk_subtrees = 0;
1187 return NULL_TREE;
1188 }
495d26d6 1189 if (TREE_CODE (t) == TARGET_EXPR)
73aad9b9 1190 {
b3ab27f3
MM
1191 tree u;
1192
02531345 1193 if (TREE_CODE (TREE_OPERAND (t, 1)) == AGGR_INIT_EXPR)
73aad9b9
JM
1194 {
1195 mark_used (TREE_OPERAND (TREE_OPERAND (TREE_OPERAND (t, 1), 0), 0));
b3ab27f3 1196 u = build_cplus_new
73aad9b9
JM
1197 (TREE_TYPE (t), break_out_target_exprs (TREE_OPERAND (t, 1)));
1198 }
9f63daea 1199 else
b3ab27f3 1200 {
495d26d6
JM
1201 u = build_target_expr_with_type
1202 (break_out_target_exprs (TREE_OPERAND (t, 1)), TREE_TYPE (t));
b3ab27f3
MM
1203 }
1204
1205 /* Map the old variable to the new one. */
9f63daea
EC
1206 splay_tree_insert (target_remap,
1207 (splay_tree_key) TREE_OPERAND (t, 0),
b3ab27f3 1208 (splay_tree_value) TREE_OPERAND (u, 0));
8dfaeb63
MM
1209
1210 /* Replace the old expression with the new version. */
1211 *tp = u;
1212 /* We don't have to go below this point; the recursive call to
1213 break_out_target_exprs will have handled anything below this
1214 point. */
1215 *walk_subtrees = 0;
1216 return NULL_TREE;
73aad9b9
JM
1217 }
1218 else if (TREE_CODE (t) == CALL_EXPR)
1219 mark_used (TREE_OPERAND (TREE_OPERAND (t, 0), 0));
1220
8dfaeb63
MM
1221 /* Make a copy of this node. */
1222 return copy_tree_r (tp, walk_subtrees, NULL);
878cd289 1223}
9f63daea 1224
8dfaeb63
MM
1225/* Replace all remapped VAR_DECLs in T with their new equivalents.
1226 DATA is really a splay-tree mapping old variables to new
1227 variables. */
b3ab27f3
MM
1228
1229static tree
9f63daea
EC
1230bot_replace (tree* t,
1231 int* walk_subtrees ATTRIBUTE_UNUSED ,
b57b79f7 1232 void* data)
b3ab27f3 1233{
8dfaeb63
MM
1234 splay_tree target_remap = ((splay_tree) data);
1235
b3ab27f3
MM
1236 if (TREE_CODE (*t) == VAR_DECL)
1237 {
1238 splay_tree_node n = splay_tree_lookup (target_remap,
1239 (splay_tree_key) *t);
1240 if (n)
1241 *t = (tree) n->value;
1242 }
1243
1244 return NULL_TREE;
1245}
9f63daea 1246
8dfaeb63
MM
1247/* When we parse a default argument expression, we may create
1248 temporary variables via TARGET_EXPRs. When we actually use the
1249 default-argument expression, we make a copy of the expression, but
1250 we must replace the temporaries with appropriate local versions. */
e92cc029 1251
878cd289 1252tree
b57b79f7 1253break_out_target_exprs (tree t)
878cd289 1254{
8dfaeb63
MM
1255 static int target_remap_count;
1256 static splay_tree target_remap;
1257
b3ab27f3 1258 if (!target_remap_count++)
9f63daea
EC
1259 target_remap = splay_tree_new (splay_tree_compare_pointers,
1260 /*splay_tree_delete_key_fn=*/NULL,
b3ab27f3 1261 /*splay_tree_delete_value_fn=*/NULL);
ee94fce6
MM
1262 walk_tree (&t, bot_manip, target_remap, NULL);
1263 walk_tree (&t, bot_replace, target_remap, NULL);
b3ab27f3
MM
1264
1265 if (!--target_remap_count)
1266 {
1267 splay_tree_delete (target_remap);
1268 target_remap = NULL;
1269 }
1270
1271 return t;
878cd289 1272}
f30432d7 1273
8e1daa34
NS
1274/* Similar to `build_nt', but for template definitions of dependent
1275 expressions */
5566b478
MS
1276
1277tree
e34d07f2 1278build_min_nt (enum tree_code code, ...)
5566b478 1279{
926ce8bd
KH
1280 tree t;
1281 int length;
1282 int i;
e34d07f2 1283 va_list p;
5566b478 1284
e34d07f2 1285 va_start (p, code);
5566b478 1286
5566b478 1287 t = make_node (code);
8d5e6e25 1288 length = TREE_CODE_LENGTH (code);
5566b478
MS
1289
1290 for (i = 0; i < length; i++)
1291 {
1292 tree x = va_arg (p, tree);
2a1e9fdd 1293 TREE_OPERAND (t, i) = x;
5566b478
MS
1294 }
1295
e34d07f2 1296 va_end (p);
5566b478
MS
1297 return t;
1298}
1299
8e1daa34 1300/* Similar to `build', but for template definitions. */
5566b478
MS
1301
1302tree
e34d07f2 1303build_min (enum tree_code code, tree tt, ...)
5566b478 1304{
926ce8bd
KH
1305 tree t;
1306 int length;
1307 int i;
e34d07f2 1308 va_list p;
5566b478 1309
e34d07f2 1310 va_start (p, tt);
5566b478 1311
5566b478 1312 t = make_node (code);
8d5e6e25 1313 length = TREE_CODE_LENGTH (code);
2a1e9fdd 1314 TREE_TYPE (t) = tt;
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;
4f976745 1320 if (x && !TYPE_P (x) && TREE_SIDE_EFFECTS (x))
8e1daa34 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{
926ce8bd
KH
1335 tree t;
1336 int length;
1337 int i;
8e1daa34
NS
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);
8e1daa34
NS
1345 TREE_SIDE_EFFECTS (t) = TREE_SIDE_EFFECTS (non_dep);
1346
1347 for (i = 0; i < length; i++)
1348 {
1349 tree x = va_arg (p, tree);
1350 TREE_OPERAND (t, i) = x;
1351 }
1352
1353 if (code == COMPOUND_EXPR && TREE_CODE (non_dep) != COMPOUND_EXPR)
1354 /* This should not be considered a COMPOUND_EXPR, because it
04c06002 1355 resolves to an overload. */
8e1daa34 1356 COMPOUND_EXPR_OVERLOADED (t) = 1;
9f63daea 1357
8e1daa34
NS
1358 va_end (p);
1359 return t;
1360}
1361
5566b478 1362tree
b57b79f7 1363get_type_decl (tree t)
5566b478 1364{
5566b478
MS
1365 if (TREE_CODE (t) == TYPE_DECL)
1366 return t;
2f939d94 1367 if (TYPE_P (t))
5566b478 1368 return TYPE_STUB_DECL (t);
315fb5db
NS
1369 gcc_assert (t == error_mark_node);
1370 return t;
5566b478
MS
1371}
1372
700466c2
JM
1373/* Returns the namespace that contains DECL, whether directly or
1374 indirectly. */
1375
1376tree
b57b79f7 1377decl_namespace_context (tree decl)
700466c2
JM
1378{
1379 while (1)
1380 {
1381 if (TREE_CODE (decl) == NAMESPACE_DECL)
1382 return decl;
1383 else if (TYPE_P (decl))
1384 decl = CP_DECL_CONTEXT (TYPE_MAIN_DECL (decl));
1385 else
1386 decl = CP_DECL_CONTEXT (decl);
1387 }
1388}
1389
67d743fe 1390/* Return truthvalue of whether T1 is the same tree structure as T2.
c8a209ca 1391 Return 1 if they are the same. Return 0 if they are different. */
67d743fe 1392
c8a209ca 1393bool
b57b79f7 1394cp_tree_equal (tree t1, tree t2)
67d743fe 1395{
926ce8bd 1396 enum tree_code code1, code2;
67d743fe
MS
1397
1398 if (t1 == t2)
c8a209ca
NS
1399 return true;
1400 if (!t1 || !t2)
1401 return false;
1402
1403 for (code1 = TREE_CODE (t1);
1404 code1 == NOP_EXPR || code1 == CONVERT_EXPR
1405 || code1 == NON_LVALUE_EXPR;
1406 code1 = TREE_CODE (t1))
1407 t1 = TREE_OPERAND (t1, 0);
1408 for (code2 = TREE_CODE (t2);
1409 code2 == NOP_EXPR || code2 == CONVERT_EXPR
1410 || code1 == NON_LVALUE_EXPR;
1411 code2 = TREE_CODE (t2))
1412 t2 = TREE_OPERAND (t2, 0);
1413
1414 /* They might have become equal now. */
1415 if (t1 == t2)
1416 return true;
9f63daea 1417
67d743fe 1418 if (code1 != code2)
c8a209ca 1419 return false;
67d743fe
MS
1420
1421 switch (code1)
1422 {
1423 case INTEGER_CST:
1424 return TREE_INT_CST_LOW (t1) == TREE_INT_CST_LOW (t2)
1425 && TREE_INT_CST_HIGH (t1) == TREE_INT_CST_HIGH (t2);
1426
1427 case REAL_CST:
1428 return REAL_VALUES_EQUAL (TREE_REAL_CST (t1), TREE_REAL_CST (t2));
1429
1430 case STRING_CST:
1431 return TREE_STRING_LENGTH (t1) == TREE_STRING_LENGTH (t2)
da61dec9 1432 && !memcmp (TREE_STRING_POINTER (t1), TREE_STRING_POINTER (t2),
c8a209ca 1433 TREE_STRING_LENGTH (t1));
67d743fe
MS
1434
1435 case CONSTRUCTOR:
7dd4bdf5
MM
1436 /* We need to do this when determining whether or not two
1437 non-type pointer to member function template arguments
1438 are the same. */
3bfdc719 1439 if (!(same_type_p (TREE_TYPE (t1), TREE_TYPE (t2))
7dd4bdf5
MM
1440 /* The first operand is RTL. */
1441 && TREE_OPERAND (t1, 0) == TREE_OPERAND (t2, 0)))
c8a209ca 1442 return false;
7dd4bdf5
MM
1443 return cp_tree_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
1444
1445 case TREE_LIST:
c8a209ca
NS
1446 if (!cp_tree_equal (TREE_PURPOSE (t1), TREE_PURPOSE (t2)))
1447 return false;
1448 if (!cp_tree_equal (TREE_VALUE (t1), TREE_VALUE (t2)))
1449 return false;
7dd4bdf5 1450 return cp_tree_equal (TREE_CHAIN (t1), TREE_CHAIN (t2));
67d743fe
MS
1451
1452 case SAVE_EXPR:
1453 return cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
1454
1455 case CALL_EXPR:
c8a209ca
NS
1456 if (!cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0)))
1457 return false;
67d743fe
MS
1458 return cp_tree_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
1459
c8a209ca
NS
1460 case TARGET_EXPR:
1461 {
1462 tree o1 = TREE_OPERAND (t1, 0);
1463 tree o2 = TREE_OPERAND (t2, 0);
9f63daea 1464
c8a209ca
NS
1465 /* Special case: if either target is an unallocated VAR_DECL,
1466 it means that it's going to be unified with whatever the
1467 TARGET_EXPR is really supposed to initialize, so treat it
1468 as being equivalent to anything. */
1469 if (TREE_CODE (o1) == VAR_DECL && DECL_NAME (o1) == NULL_TREE
1470 && !DECL_RTL_SET_P (o1))
1471 /*Nop*/;
1472 else if (TREE_CODE (o2) == VAR_DECL && DECL_NAME (o2) == NULL_TREE
1473 && !DECL_RTL_SET_P (o2))
1474 /*Nop*/;
1475 else if (!cp_tree_equal (o1, o2))
1476 return false;
9f63daea 1477
c8a209ca
NS
1478 return cp_tree_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
1479 }
9f63daea 1480
67d743fe 1481 case WITH_CLEANUP_EXPR:
c8a209ca
NS
1482 if (!cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0)))
1483 return false;
6ad7895a 1484 return cp_tree_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t1, 1));
67d743fe
MS
1485
1486 case COMPONENT_REF:
c8a209ca
NS
1487 if (TREE_OPERAND (t1, 1) != TREE_OPERAND (t2, 1))
1488 return false;
1489 return cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
67d743fe
MS
1490
1491 case VAR_DECL:
1492 case PARM_DECL:
1493 case CONST_DECL:
1494 case FUNCTION_DECL:
c8a209ca
NS
1495 case TEMPLATE_DECL:
1496 case IDENTIFIER_NODE:
1497 return false;
67d743fe 1498
f84b4be9 1499 case TEMPLATE_PARM_INDEX:
31758337
NS
1500 return (TEMPLATE_PARM_IDX (t1) == TEMPLATE_PARM_IDX (t2)
1501 && TEMPLATE_PARM_LEVEL (t1) == TEMPLATE_PARM_LEVEL (t2)
1502 && same_type_p (TREE_TYPE (TEMPLATE_PARM_DECL (t1)),
1503 TREE_TYPE (TEMPLATE_PARM_DECL (t2))));
67d743fe 1504
bf12d54d
NS
1505 case TEMPLATE_ID_EXPR:
1506 {
1507 unsigned ix;
1508 tree vec1, vec2;
9f63daea 1509
bf12d54d
NS
1510 if (!cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0)))
1511 return false;
1512 vec1 = TREE_OPERAND (t1, 1);
1513 vec2 = TREE_OPERAND (t2, 1);
1514
1515 if (!vec1 || !vec2)
1516 return !vec1 && !vec2;
9f63daea 1517
bf12d54d
NS
1518 if (TREE_VEC_LENGTH (vec1) != TREE_VEC_LENGTH (vec2))
1519 return false;
1520
1521 for (ix = TREE_VEC_LENGTH (vec1); ix--;)
1522 if (!cp_tree_equal (TREE_VEC_ELT (vec1, ix),
1523 TREE_VEC_ELT (vec2, ix)))
1524 return false;
9f63daea 1525
bf12d54d
NS
1526 return true;
1527 }
9f63daea 1528
67d743fe 1529 case SIZEOF_EXPR:
abff8e06 1530 case ALIGNOF_EXPR:
c8a209ca
NS
1531 {
1532 tree o1 = TREE_OPERAND (t1, 0);
1533 tree o2 = TREE_OPERAND (t2, 0);
9f63daea 1534
c8a209ca
NS
1535 if (TREE_CODE (o1) != TREE_CODE (o2))
1536 return false;
1537 if (TYPE_P (o1))
1538 return same_type_p (o1, o2);
1539 else
1540 return cp_tree_equal (o1, o2);
1541 }
9f63daea 1542
61a127b3
MM
1543 case PTRMEM_CST:
1544 /* Two pointer-to-members are the same if they point to the same
1545 field or function in the same class. */
c8a209ca
NS
1546 if (PTRMEM_CST_MEMBER (t1) != PTRMEM_CST_MEMBER (t2))
1547 return false;
1548
1549 return same_type_p (PTRMEM_CST_CLASS (t1), PTRMEM_CST_CLASS (t2));
61a127b3 1550
7f85441b
KG
1551 default:
1552 break;
67d743fe
MS
1553 }
1554
1555 switch (TREE_CODE_CLASS (code1))
1556 {
6615c446
JO
1557 case tcc_unary:
1558 case tcc_binary:
1559 case tcc_comparison:
1560 case tcc_expression:
1561 case tcc_reference:
1562 case tcc_statement:
aa1826e2
NS
1563 {
1564 int i;
9f63daea 1565
aa1826e2 1566 for (i = 0; i < TREE_CODE_LENGTH (code1); ++i)
c8a209ca
NS
1567 if (!cp_tree_equal (TREE_OPERAND (t1, i), TREE_OPERAND (t2, i)))
1568 return false;
9f63daea 1569
c8a209ca 1570 return true;
aa1826e2 1571 }
9f63daea 1572
6615c446 1573 case tcc_type:
c8a209ca 1574 return same_type_p (t1, t2);
6615c446
JO
1575 default:
1576 gcc_unreachable ();
67d743fe 1577 }
6615c446 1578 /* We can get here with --disable-checking. */
c8a209ca 1579 return false;
67d743fe 1580}
73aad9b9 1581
d11ad92e
MS
1582/* The type of ARG when used as an lvalue. */
1583
1584tree
b57b79f7 1585lvalue_type (tree arg)
d11ad92e 1586{
2c73f9f5 1587 tree type = TREE_TYPE (arg);
8cd4c175 1588 return type;
d11ad92e
MS
1589}
1590
1591/* The type of ARG for printing error messages; denote lvalues with
1592 reference types. */
1593
1594tree
b57b79f7 1595error_type (tree arg)
d11ad92e
MS
1596{
1597 tree type = TREE_TYPE (arg);
9f63daea 1598
d11ad92e
MS
1599 if (TREE_CODE (type) == ARRAY_TYPE)
1600 ;
08476342
NS
1601 else if (TREE_CODE (type) == ERROR_MARK)
1602 ;
d11ad92e
MS
1603 else if (real_lvalue_p (arg))
1604 type = build_reference_type (lvalue_type (arg));
1605 else if (IS_AGGR_TYPE (type))
1606 type = lvalue_type (arg);
1607
1608 return type;
1609}
eb66be0e
MS
1610
1611/* Does FUNCTION use a variable-length argument list? */
1612
1613int
b57b79f7 1614varargs_function_p (tree function)
eb66be0e
MS
1615{
1616 tree parm = TYPE_ARG_TYPES (TREE_TYPE (function));
1617 for (; parm; parm = TREE_CHAIN (parm))
1618 if (TREE_VALUE (parm) == void_type_node)
1619 return 0;
1620 return 1;
1621}
f94ae2f5
JM
1622
1623/* Returns 1 if decl is a member of a class. */
1624
1625int
b57b79f7 1626member_p (tree decl)
f94ae2f5 1627{
2f939d94
TP
1628 const tree ctx = DECL_CONTEXT (decl);
1629 return (ctx && TYPE_P (ctx));
f94ae2f5 1630}
51924768
JM
1631
1632/* Create a placeholder for member access where we don't actually have an
1633 object that the access is against. */
1634
1635tree
b57b79f7 1636build_dummy_object (tree type)
51924768 1637{
44689c12 1638 tree decl = build1 (NOP_EXPR, build_pointer_type (type), void_zero_node);
3e411c3f 1639 return build_indirect_ref (decl, NULL);
51924768
JM
1640}
1641
1642/* We've gotten a reference to a member of TYPE. Return *this if appropriate,
1643 or a dummy object otherwise. If BINFOP is non-0, it is filled with the
1644 binfo path from current_class_type to TYPE, or 0. */
1645
1646tree
b57b79f7 1647maybe_dummy_object (tree type, tree* binfop)
51924768
JM
1648{
1649 tree decl, context;
2db1ab2d 1650 tree binfo;
9f63daea 1651
51924768 1652 if (current_class_type
2db1ab2d
NS
1653 && (binfo = lookup_base (current_class_type, type,
1654 ba_ignore | ba_quiet, NULL)))
51924768
JM
1655 context = current_class_type;
1656 else
1657 {
1658 /* Reference from a nested class member function. */
1659 context = type;
2db1ab2d 1660 binfo = TYPE_BINFO (type);
51924768
JM
1661 }
1662
2db1ab2d
NS
1663 if (binfop)
1664 *binfop = binfo;
9f63daea 1665
a29e1034 1666 if (current_class_ref && context == current_class_type
3ebf5204
NS
1667 /* Kludge: Make sure that current_class_type is actually
1668 correct. It might not be if we're in the middle of
c6002625 1669 tsubst_default_argument. */
a29e1034
JM
1670 && same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (current_class_ref)),
1671 current_class_type))
51924768
JM
1672 decl = current_class_ref;
1673 else
1674 decl = build_dummy_object (context);
1675
1676 return decl;
1677}
1678
1679/* Returns 1 if OB is a placeholder object, or a pointer to one. */
1680
1681int
b57b79f7 1682is_dummy_object (tree ob)
51924768
JM
1683{
1684 if (TREE_CODE (ob) == INDIRECT_REF)
1685 ob = TREE_OPERAND (ob, 0);
1686 return (TREE_CODE (ob) == NOP_EXPR
44689c12 1687 && TREE_OPERAND (ob, 0) == void_zero_node);
51924768 1688}
5524676d
JM
1689
1690/* Returns 1 iff type T is a POD type, as defined in [basic.types]. */
1691
1692int
b57b79f7 1693pod_type_p (tree t)
5524676d 1694{
38da6039 1695 t = strip_array_types (t);
5524676d 1696
17bbb839
MM
1697 if (t == error_mark_node)
1698 return 1;
52fb2769
NS
1699 if (INTEGRAL_TYPE_P (t))
1700 return 1; /* integral, character or enumeral type */
1701 if (FLOAT_TYPE_P (t))
5524676d 1702 return 1;
52fb2769
NS
1703 if (TYPE_PTR_P (t))
1704 return 1; /* pointer to non-member */
a5ac359a
MM
1705 if (TYPE_PTR_TO_MEMBER_P (t))
1706 return 1; /* pointer to member */
b1009a5d
ZL
1707
1708 if (TREE_CODE (t) == VECTOR_TYPE)
1709 return 1; /* vectors are (small) arrays if scalars */
1710
52fb2769
NS
1711 if (! CLASS_TYPE_P (t))
1712 return 0; /* other non-class type (reference or function) */
1713 if (CLASSTYPE_NON_POD_P (t))
5524676d 1714 return 0;
5524676d
JM
1715 return 1;
1716}
e5dc5fb2 1717
94e6e4c4
AO
1718/* Returns 1 iff zero initialization of type T means actually storing
1719 zeros in it. */
1720
1721int
b57b79f7 1722zero_init_p (tree t)
94e6e4c4
AO
1723{
1724 t = strip_array_types (t);
1725
17bbb839
MM
1726 if (t == error_mark_node)
1727 return 1;
1728
94e6e4c4
AO
1729 /* NULL pointers to data members are initialized with -1. */
1730 if (TYPE_PTRMEM_P (t))
1731 return 0;
1732
1733 /* Classes that contain types that can't be zero-initialized, cannot
1734 be zero-initialized themselves. */
1735 if (CLASS_TYPE_P (t) && CLASSTYPE_NON_ZERO_INIT_P (t))
1736 return 0;
1737
1738 return 1;
1739}
1740
91d231cb 1741/* Table of valid C++ attributes. */
349ae713 1742const struct attribute_spec cxx_attribute_table[] =
e5dc5fb2 1743{
91d231cb
JM
1744 /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */
1745 { "java_interface", 0, 0, false, false, false, handle_java_interface_attribute },
1746 { "com_interface", 0, 0, false, false, false, handle_com_interface_attribute },
1747 { "init_priority", 1, 1, true, false, false, handle_init_priority_attribute },
1748 { NULL, 0, 0, false, false, false, NULL }
1749};
1750
1751/* Handle a "java_interface" attribute; arguments as in
1752 struct attribute_spec.handler. */
1753static tree
9f63daea
EC
1754handle_java_interface_attribute (tree* node,
1755 tree name,
1756 tree args ATTRIBUTE_UNUSED ,
1757 int flags,
b57b79f7 1758 bool* no_add_attrs)
91d231cb
JM
1759{
1760 if (DECL_P (*node)
1761 || !CLASS_TYPE_P (*node)
1762 || !TYPE_FOR_JAVA (*node))
60c87482 1763 {
4460cef2
GDR
1764 error ("`%E' attribute can only be applied to Java class definitions",
1765 name);
91d231cb
JM
1766 *no_add_attrs = true;
1767 return NULL_TREE;
60c87482 1768 }
91d231cb 1769 if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
8dd16ecc 1770 *node = build_variant_type_copy (*node);
91d231cb 1771 TYPE_JAVA_INTERFACE (*node) = 1;
e5dc5fb2 1772
91d231cb
JM
1773 return NULL_TREE;
1774}
1775
1776/* Handle a "com_interface" attribute; arguments as in
1777 struct attribute_spec.handler. */
1778static tree
9f63daea
EC
1779handle_com_interface_attribute (tree* node,
1780 tree name,
1781 tree args ATTRIBUTE_UNUSED ,
1782 int flags ATTRIBUTE_UNUSED ,
b57b79f7 1783 bool* no_add_attrs)
91d231cb
JM
1784{
1785 static int warned;
1786
1787 *no_add_attrs = true;
1788
1789 if (DECL_P (*node)
1790 || !CLASS_TYPE_P (*node)
1791 || *node != TYPE_MAIN_VARIANT (*node))
e5dc5fb2 1792 {
4460cef2
GDR
1793 warning ("`%E' attribute can only be applied to class definitions",
1794 name);
91d231cb
JM
1795 return NULL_TREE;
1796 }
e5dc5fb2 1797
91d231cb 1798 if (!warned++)
4460cef2
GDR
1799 warning ("`%E' is obsolete; g++ vtables are now COM-compatible by default",
1800 name);
91d231cb
JM
1801
1802 return NULL_TREE;
1803}
1804
1805/* Handle an "init_priority" attribute; arguments as in
1806 struct attribute_spec.handler. */
1807static tree
9f63daea
EC
1808handle_init_priority_attribute (tree* node,
1809 tree name,
1810 tree args,
1811 int flags ATTRIBUTE_UNUSED ,
b57b79f7 1812 bool* no_add_attrs)
91d231cb
JM
1813{
1814 tree initp_expr = TREE_VALUE (args);
1815 tree decl = *node;
1816 tree type = TREE_TYPE (decl);
1817 int pri;
1818
1819 STRIP_NOPS (initp_expr);
9f63daea 1820
91d231cb
JM
1821 if (!initp_expr || TREE_CODE (initp_expr) != INTEGER_CST)
1822 {
1823 error ("requested init_priority is not an integer constant");
1824 *no_add_attrs = true;
1825 return NULL_TREE;
1826 }
e5dc5fb2 1827
91d231cb 1828 pri = TREE_INT_CST_LOW (initp_expr);
9f63daea 1829
91d231cb
JM
1830 type = strip_array_types (type);
1831
1832 if (decl == NULL_TREE
1833 || TREE_CODE (decl) != VAR_DECL
1834 || !TREE_STATIC (decl)
1835 || DECL_EXTERNAL (decl)
1836 || (TREE_CODE (type) != RECORD_TYPE
1837 && TREE_CODE (type) != UNION_TYPE)
1838 /* Static objects in functions are initialized the
1839 first time control passes through that
1840 function. This is not precise enough to pin down an
c6002625 1841 init_priority value, so don't allow it. */
9f63daea 1842 || current_function_decl)
91d231cb 1843 {
4460cef2
GDR
1844 error ("can only use `%E' attribute on file-scope definitions "
1845 "of objects of class type", name);
91d231cb
JM
1846 *no_add_attrs = true;
1847 return NULL_TREE;
1848 }
e5dc5fb2 1849
91d231cb
JM
1850 if (pri > MAX_INIT_PRIORITY || pri <= 0)
1851 {
1852 error ("requested init_priority is out of range");
1853 *no_add_attrs = true;
1854 return NULL_TREE;
1855 }
e5dc5fb2 1856
91d231cb
JM
1857 /* Check for init_priorities that are reserved for
1858 language and runtime support implementations.*/
1859 if (pri <= MAX_RESERVED_INIT_PRIORITY)
1860 {
9f63daea 1861 warning
91d231cb 1862 ("requested init_priority is reserved for internal use");
e5dc5fb2
JM
1863 }
1864
91d231cb
JM
1865 if (SUPPORTS_INIT_PRIORITY)
1866 {
1867 DECL_INIT_PRIORITY (decl) = pri;
1868 return NULL_TREE;
1869 }
1870 else
1871 {
4460cef2 1872 error ("`%E' attribute is not supported on this platform", name);
91d231cb
JM
1873 *no_add_attrs = true;
1874 return NULL_TREE;
1875 }
e5dc5fb2 1876}
87533b37 1877
406d77a4
SB
1878/* Return a new TINST_LEVEL for DECL at location locus. */
1879tree
1880make_tinst_level (tree decl, location_t locus)
1881{
1882 tree tinst_level = make_node (TINST_LEVEL);
1883 TREE_CHAIN (tinst_level) = NULL_TREE;
1884 TINST_DECL (tinst_level) = decl;
1885 TINST_LOCATION (tinst_level) = locus;
1886 return tinst_level;
1887}
1888
87533b37
MM
1889/* Return a new PTRMEM_CST of the indicated TYPE. The MEMBER is the
1890 thing pointed to by the constant. */
1891
1892tree
b57b79f7 1893make_ptrmem_cst (tree type, tree member)
87533b37
MM
1894{
1895 tree ptrmem_cst = make_node (PTRMEM_CST);
87533b37
MM
1896 TREE_TYPE (ptrmem_cst) = type;
1897 PTRMEM_CST_MEMBER (ptrmem_cst) = member;
1898 return ptrmem_cst;
1899}
1900
e9525111
MM
1901/* Build a variant of TYPE that has the indicated ATTRIBUTES. May
1902 return an existing type of an appropriate type already exists. */
1903
1904tree
1905cp_build_type_attribute_variant (tree type, tree attributes)
1906{
1907 tree new_type;
1908
1909 new_type = build_type_attribute_variant (type, attributes);
1910 if (TREE_CODE (new_type) == FUNCTION_TYPE
9f63daea 1911 && (TYPE_RAISES_EXCEPTIONS (new_type)
e9525111
MM
1912 != TYPE_RAISES_EXCEPTIONS (type)))
1913 new_type = build_exception_variant (new_type,
1914 TYPE_RAISES_EXCEPTIONS (type));
1915 return new_type;
1916}
1917
25af8512 1918/* Apply FUNC to all language-specific sub-trees of TP in a pre-order
350fae66 1919 traversal. Called from walk_tree. */
25af8512 1920
9f63daea 1921tree
350fae66
RK
1922cp_walk_subtrees (tree *tp, int *walk_subtrees_p, walk_tree_fn func,
1923 void *data, void *htab)
25af8512
AO
1924{
1925 enum tree_code code = TREE_CODE (*tp);
6de9cd9a 1926 location_t save_locus;
25af8512 1927 tree result;
9f63daea 1928
25af8512
AO
1929#define WALK_SUBTREE(NODE) \
1930 do \
1931 { \
1932 result = walk_tree (&(NODE), func, data, htab); \
6de9cd9a 1933 if (result) goto out; \
25af8512
AO
1934 } \
1935 while (0)
1936
6de9cd9a
DN
1937 /* Set input_location here so we get the right instantiation context
1938 if we call instantiate_decl from inlinable_function_p. */
1939 save_locus = input_location;
93409b8c
PB
1940 if (EXPR_HAS_LOCATION (*tp))
1941 input_location = EXPR_LOCATION (*tp);
6de9cd9a 1942
25af8512
AO
1943 /* Not one of the easy cases. We must explicitly go through the
1944 children. */
6de9cd9a 1945 result = NULL_TREE;
25af8512
AO
1946 switch (code)
1947 {
1948 case DEFAULT_ARG:
1949 case TEMPLATE_TEMPLATE_PARM:
1950 case BOUND_TEMPLATE_TEMPLATE_PARM:
b8c6534b 1951 case UNBOUND_CLASS_TEMPLATE:
25af8512
AO
1952 case TEMPLATE_PARM_INDEX:
1953 case TEMPLATE_TYPE_PARM:
1954 case TYPENAME_TYPE:
1955 case TYPEOF_TYPE:
5dae1114 1956 case BASELINK:
da1d7781 1957 /* None of these have subtrees other than those already walked
25af8512
AO
1958 above. */
1959 *walk_subtrees_p = 0;
1960 break;
1961
406d77a4
SB
1962 case TINST_LEVEL:
1963 WALK_SUBTREE (TINST_DECL (*tp));
1964 *walk_subtrees_p = 0;
1965 break;
1966
25af8512
AO
1967 case PTRMEM_CST:
1968 WALK_SUBTREE (TREE_TYPE (*tp));
1969 *walk_subtrees_p = 0;
1970 break;
1971
1972 case TREE_LIST:
5dae1114 1973 WALK_SUBTREE (TREE_PURPOSE (*tp));
25af8512
AO
1974 break;
1975
1976 case OVERLOAD:
1977 WALK_SUBTREE (OVL_FUNCTION (*tp));
1978 WALK_SUBTREE (OVL_CHAIN (*tp));
1979 *walk_subtrees_p = 0;
1980 break;
1981
1982 case RECORD_TYPE:
1983 if (TYPE_PTRMEMFUNC_P (*tp))
1984 WALK_SUBTREE (TYPE_PTRMEMFUNC_FN_TYPE (*tp));
1985 break;
1986
1987 default:
6de9cd9a 1988 input_location = save_locus;
350fae66 1989 return NULL_TREE;
25af8512
AO
1990 }
1991
1992 /* We didn't find what we were looking for. */
6de9cd9a
DN
1993 out:
1994 input_location = save_locus;
1995 return result;
25af8512
AO
1996
1997#undef WALK_SUBTREE
1998}
1999
2000/* Decide whether there are language-specific reasons to not inline a
2001 function as a tree. */
2002
19551f29 2003int
b57b79f7 2004cp_cannot_inline_tree_fn (tree* fnp)
25af8512
AO
2005{
2006 tree fn = *fnp;
2007
2008 /* We can inline a template instantiation only if it's fully
2009 instantiated. */
2010 if (DECL_TEMPLATE_INFO (fn)
2011 && TI_PENDING_TEMPLATE_FLAG (DECL_TEMPLATE_INFO (fn)))
2012 {
a5512a2f
MM
2013 /* Don't instantiate functions that are not going to be
2014 inlined. */
9f63daea 2015 if (!DECL_INLINE (DECL_TEMPLATE_RESULT
a5512a2f
MM
2016 (template_for_substitution (fn))))
2017 return 1;
1a9861e6 2018
415c974c 2019 fn = *fnp = instantiate_decl (fn, /*defer_ok=*/0, /*undefined_ok=*/0);
1a9861e6 2020
fd852454
RH
2021 if (TI_PENDING_TEMPLATE_FLAG (DECL_TEMPLATE_INFO (fn)))
2022 return 1;
25af8512
AO
2023 }
2024
d58b7c2d
MM
2025 if (flag_really_no_inline
2026 && lookup_attribute ("always_inline", DECL_ATTRIBUTES (fn)) == NULL)
2027 return 1;
2028
8a3c9180 2029 /* Don't auto-inline anything that might not be bound within
6039a93d
JH
2030 this unit of translation.
2031 Exclude comdat functions from this rule. While they can be bound
77077b39 2032 to the other unit, they all must be the same. This is especially
6039a93d
JH
2033 important so templates can inline. */
2034 if (!DECL_DECLARED_INLINE_P (fn) && !(*targetm.binds_local_p) (fn)
2035 && !DECL_COMDAT (fn))
8a3c9180
RH
2036 {
2037 DECL_UNINLINABLE (fn) = 1;
2038 return 1;
2039 }
2040
25af8512
AO
2041 if (varargs_function_p (fn))
2042 {
2043 DECL_UNINLINABLE (fn) = 1;
2044 return 1;
2045 }
2046
2047 if (! function_attribute_inlinable_p (fn))
2048 {
2049 DECL_UNINLINABLE (fn) = 1;
2050 return 1;
2051 }
2052
2053 return 0;
2054}
2055
2056/* Add any pending functions other than the current function (already
2057 handled by the caller), that thus cannot be inlined, to FNS_P, then
2058 return the latest function added to the array, PREV_FN. */
2059
19551f29 2060tree
b57b79f7 2061cp_add_pending_fn_decls (void* fns_p, tree prev_fn)
25af8512
AO
2062{
2063 varray_type *fnsp = (varray_type *)fns_p;
2064 struct saved_scope *s;
2065
2066 for (s = scope_chain; s; s = s->prev)
2067 if (s->function_decl && s->function_decl != prev_fn)
2068 {
2069 VARRAY_PUSH_TREE (*fnsp, s->function_decl);
2070 prev_fn = s->function_decl;
2071 }
2072
2073 return prev_fn;
2074}
2075
2076/* Determine whether a tree node is an OVERLOAD node. Used to decide
2077 whether to copy a node or to preserve its chain when inlining a
2078 function. */
2079
19551f29 2080int
b57b79f7 2081cp_is_overload_p (tree t)
25af8512
AO
2082{
2083 return TREE_CODE (t) == OVERLOAD;
2084}
2085
2086/* Determine whether VAR is a declaration of an automatic variable in
2087 function FN. */
2088
19551f29 2089int
b57b79f7 2090cp_auto_var_in_fn_p (tree var, tree fn)
25af8512
AO
2091{
2092 return (DECL_P (var) && DECL_CONTEXT (var) == fn
2093 && nonstatic_local_decl_p (var));
2094}
2095
18c6ada9
JH
2096/* FN body has been duplicated. Update language specific fields. */
2097
2098void
9f63daea 2099cp_update_decl_after_saving (tree fn,
18c6ada9
JH
2100 void* decl_map_)
2101{
2102 splay_tree decl_map = (splay_tree)decl_map_;
2103 tree nrv = DECL_SAVED_FUNCTION_DATA (fn)->x_return_value;
2104 if (nrv)
2105 {
2106 DECL_SAVED_FUNCTION_DATA (fn)->x_return_value
2107 = (tree) splay_tree_lookup (decl_map, (splay_tree_key) nrv)->value;
2108 }
2109}
87e3dbc9
MM
2110/* Initialize tree.c. */
2111
0a818f84 2112void
b57b79f7 2113init_tree (void)
0a818f84 2114{
e2500fed 2115 list_hash_table = htab_create_ggc (31, list_hash, list_hash_eq, NULL);
0a818f84
GRK
2116}
2117
872f37f9 2118/* Returns the kind of special function that DECL (a FUNCTION_DECL)
50ad9642
MM
2119 is. Note that sfk_none is zero, so this function can be used as a
2120 predicate to test whether or not DECL is a special function. */
872f37f9
MM
2121
2122special_function_kind
b57b79f7 2123special_function_p (tree decl)
872f37f9
MM
2124{
2125 /* Rather than doing all this stuff with magic names, we should
2126 probably have a field of type `special_function_kind' in
2127 DECL_LANG_SPECIFIC. */
2128 if (DECL_COPY_CONSTRUCTOR_P (decl))
2129 return sfk_copy_constructor;
2130 if (DECL_CONSTRUCTOR_P (decl))
2131 return sfk_constructor;
596ea4e5 2132 if (DECL_OVERLOADED_OPERATOR_P (decl) == NOP_EXPR)
872f37f9
MM
2133 return sfk_assignment_operator;
2134 if (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (decl))
2135 return sfk_destructor;
2136 if (DECL_COMPLETE_DESTRUCTOR_P (decl))
2137 return sfk_complete_destructor;
2138 if (DECL_BASE_DESTRUCTOR_P (decl))
2139 return sfk_base_destructor;
2140 if (DECL_DELETING_DESTRUCTOR_P (decl))
2141 return sfk_deleting_destructor;
2142 if (DECL_CONV_FN_P (decl))
2143 return sfk_conversion;
2144
2145 return sfk_none;
2146}
7b019c19 2147
50ad9642
MM
2148/* Returns true if and only if NODE is a name, i.e., a node created
2149 by the parser when processing an id-expression. */
2150
2151bool
2152name_p (tree node)
2153{
2154 if (TREE_CODE (node) == TEMPLATE_ID_EXPR)
2155 node = TREE_OPERAND (node, 0);
2156 return (/* An ordinary unqualified name. */
2157 TREE_CODE (node) == IDENTIFIER_NODE
2158 /* A destructor name. */
2159 || TREE_CODE (node) == BIT_NOT_EXPR
2160 /* A qualified name. */
2161 || TREE_CODE (node) == SCOPE_REF);
2162}
2163
838dfd8a 2164/* Returns nonzero if TYPE is a character type, including wchar_t. */
7b019c19
MM
2165
2166int
b57b79f7 2167char_type_p (tree type)
7b019c19
MM
2168{
2169 return (same_type_p (type, char_type_node)
2170 || same_type_p (type, unsigned_char_type_node)
2171 || same_type_p (type, signed_char_type_node)
2172 || same_type_p (type, wchar_type_node));
2173}
ad50e811
MM
2174
2175/* Returns the kind of linkage associated with the indicated DECL. Th
2176 value returned is as specified by the language standard; it is
2177 independent of implementation details regarding template
2178 instantiation, etc. For example, it is possible that a declaration
2179 to which this function assigns external linkage would not show up
2180 as a global symbol when you run `nm' on the resulting object file. */
2181
2182linkage_kind
b57b79f7 2183decl_linkage (tree decl)
ad50e811
MM
2184{
2185 /* This function doesn't attempt to calculate the linkage from first
2186 principles as given in [basic.link]. Instead, it makes use of
2187 the fact that we have already set TREE_PUBLIC appropriately, and
2188 then handles a few special cases. Ideally, we would calculate
2189 linkage first, and then transform that into a concrete
2190 implementation. */
2191
2192 /* Things that don't have names have no linkage. */
2193 if (!DECL_NAME (decl))
2194 return lk_none;
2195
2196 /* Things that are TREE_PUBLIC have external linkage. */
2197 if (TREE_PUBLIC (decl))
2198 return lk_external;
2199
2200 /* Some things that are not TREE_PUBLIC have external linkage, too.
2201 For example, on targets that don't have weak symbols, we make all
2202 template instantiations have internal linkage (in the object
2203 file), but the symbols should still be treated as having external
2204 linkage from the point of view of the language. */
2205 if (DECL_LANG_SPECIFIC (decl) && DECL_COMDAT (decl))
2206 return lk_external;
2207
2208 /* Things in local scope do not have linkage, if they don't have
2209 TREE_PUBLIC set. */
2210 if (decl_function_context (decl))
2211 return lk_none;
2212
2213 /* Everything else has internal linkage. */
2214 return lk_internal;
2215}
6f30f1f1
JM
2216\f
2217/* EXP is an expression that we want to pre-evaluate. Returns via INITP an
2218 expression to perform the pre-evaluation, and returns directly an
2219 expression to use the precalculated result. */
2220
2221tree
b57b79f7 2222stabilize_expr (tree exp, tree* initp)
6f30f1f1
JM
2223{
2224 tree init_expr;
2225
2226 if (!TREE_SIDE_EFFECTS (exp))
2227 {
6de9cd9a 2228 init_expr = NULL_TREE;
6f30f1f1
JM
2229 }
2230 else if (!real_lvalue_p (exp)
2231 || !TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (exp)))
2232 {
2233 init_expr = get_target_expr (exp);
2234 exp = TARGET_EXPR_SLOT (init_expr);
2235 }
2236 else
2237 {
2238 exp = build_unary_op (ADDR_EXPR, exp, 1);
2239 init_expr = get_target_expr (exp);
2240 exp = TARGET_EXPR_SLOT (init_expr);
2241 exp = build_indirect_ref (exp, 0);
2242 }
2243
2244 *initp = init_expr;
2245 return exp;
2246}
6de9cd9a 2247
40aac948
JM
2248/* Add NEW, an expression whose value we don't care about, after the
2249 similar expression ORIG. */
2250
2251tree
2252add_stmt_to_compound (tree orig, tree new)
2253{
2254 if (!new || !TREE_SIDE_EFFECTS (new))
2255 return orig;
2256 if (!orig || !TREE_SIDE_EFFECTS (orig))
2257 return new;
2258 return build2 (COMPOUND_EXPR, void_type_node, orig, new);
2259}
2260
6de9cd9a
DN
2261/* Like stabilize_expr, but for a call whose args we want to
2262 pre-evaluate. */
2263
2264void
2265stabilize_call (tree call, tree *initp)
2266{
2267 tree inits = NULL_TREE;
2268 tree t;
2269
2270 if (call == error_mark_node)
2271 return;
2272
315fb5db
NS
2273 gcc_assert (TREE_CODE (call) == CALL_EXPR
2274 || TREE_CODE (call) == AGGR_INIT_EXPR);
6de9cd9a
DN
2275
2276 for (t = TREE_OPERAND (call, 1); t; t = TREE_CHAIN (t))
2277 if (TREE_SIDE_EFFECTS (TREE_VALUE (t)))
2278 {
2279 tree init;
2280 TREE_VALUE (t) = stabilize_expr (TREE_VALUE (t), &init);
40aac948 2281 inits = add_stmt_to_compound (inits, init);
6de9cd9a
DN
2282 }
2283
2284 *initp = inits;
2285}
2286
2287/* Like stabilize_expr, but for an initialization. If we are initializing
2288 an object of class type, we don't want to introduce an extra temporary,
2289 so we look past the TARGET_EXPR and stabilize the arguments of the call
2290 instead. */
2291
2292bool
2293stabilize_init (tree init, tree *initp)
2294{
2295 tree t = init;
2296
2297 if (t == error_mark_node)
2298 return true;
2299
2300 if (TREE_CODE (t) == INIT_EXPR
2301 && TREE_CODE (TREE_OPERAND (t, 1)) != TARGET_EXPR)
2302 TREE_OPERAND (t, 1) = stabilize_expr (TREE_OPERAND (t, 1), initp);
2303 else
2304 {
2305 if (TREE_CODE (t) == INIT_EXPR)
2306 t = TREE_OPERAND (t, 1);
2307 if (TREE_CODE (t) == TARGET_EXPR)
2308 t = TARGET_EXPR_INITIAL (t);
bcac21a0
JM
2309 if (TREE_CODE (t) == COMPOUND_EXPR)
2310 t = expr_last (t);
6de9cd9a
DN
2311 if (TREE_CODE (t) == CONSTRUCTOR
2312 && CONSTRUCTOR_ELTS (t) == NULL_TREE)
2313 {
2314 /* Default-initialization. */
2315 *initp = NULL_TREE;
2316 return true;
2317 }
2318
2319 /* If the initializer is a COND_EXPR, we can't preevaluate
2320 anything. */
2321 if (TREE_CODE (t) == COND_EXPR)
2322 return false;
2323
2324 stabilize_call (t, initp);
2325 }
2326
2327 return true;
2328}
2329
e2500fed
GK
2330\f
2331#if defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 2007)
2332/* Complain that some language-specific thing hanging off a tree
2333 node has been accessed improperly. */
2334
2335void
b57b79f7 2336lang_check_failed (const char* file, int line, const char* function)
e2500fed
GK
2337{
2338 internal_error ("lang_* check: failed in %s, at %s:%d",
2339 function, trim_filename (file), line);
2340}
2341#endif /* ENABLE_TREE_CHECKING */
2342
2343#include "gt-cp-tree.h"