]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/cp/tree.c
gcov-io.c (GCOV_CHECK): Use gcc_assert when available.
[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 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:
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. */
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;
8d08fdba
MS
799 if (TREE_CODE (t) == FUNCTION_DECL)
800 return 1;
2c73f9f5
ML
801 else if (TREE_CODE (t) == OVERLOAD)
802 {
6a87d634 803 for (i = 0; t; t = OVL_CHAIN (t))
2c73f9f5
ML
804 i++;
805 return i;
806 }
8d08fdba 807
a98facb0 808 abort ();
0d16d68e 809 return 0;
8d08fdba
MS
810}
811
8d08fdba 812int
b57b79f7 813is_overloaded_fn (tree x)
8d08fdba 814{
4bb0968f 815 /* A baselink is also considered an overloaded function. */
05e0b2f4
JM
816 if (TREE_CODE (x) == OFFSET_REF)
817 x = TREE_OPERAND (x, 1);
4bb0968f 818 if (BASELINK_P (x))
da15dae6 819 x = BASELINK_FUNCTIONS (x);
06ab59df
MM
820 return (TREE_CODE (x) == FUNCTION_DECL
821 || TREE_CODE (x) == TEMPLATE_ID_EXPR
822 || DECL_FUNCTION_TEMPLATE_P (x)
2c73f9f5 823 || TREE_CODE (x) == OVERLOAD);
8d08fdba
MS
824}
825
8926095f 826int
b57b79f7 827really_overloaded_fn (tree x)
9f63daea 828{
4bb0968f 829 /* A baselink is also considered an overloaded function. */
05e0b2f4
JM
830 if (TREE_CODE (x) == OFFSET_REF)
831 x = TREE_OPERAND (x, 1);
4bb0968f 832 if (BASELINK_P (x))
da15dae6 833 x = BASELINK_FUNCTIONS (x);
9f63daea 834
5a9a1961
NS
835 return ((TREE_CODE (x) == OVERLOAD && OVL_CHAIN (x))
836 || DECL_FUNCTION_TEMPLATE_P (OVL_CURRENT (x))
837 || TREE_CODE (x) == TEMPLATE_ID_EXPR);
8926095f
MS
838}
839
8d08fdba 840tree
b57b79f7 841get_first_fn (tree from)
8d08fdba 842{
50bc768d 843 gcc_assert (is_overloaded_fn (from));
c6002625 844 /* A baselink is also considered an overloaded function. */
4bb0968f 845 if (BASELINK_P (from))
da15dae6 846 from = BASELINK_FUNCTIONS (from);
2c73f9f5
ML
847 return OVL_CURRENT (from);
848}
8d08fdba 849
8d7f862c
JM
850/* Returns nonzero if T is a ->* or .* expression that refers to a
851 member function. */
852
853int
b57b79f7 854bound_pmf_p (tree t)
8d7f862c
JM
855{
856 return (TREE_CODE (t) == OFFSET_REF
857 && TYPE_PTRMEMFUNC_P (TREE_TYPE (TREE_OPERAND (t, 1))));
858}
859
c6002625 860/* Return a new OVL node, concatenating it with the old one. */
2c73f9f5
ML
861
862tree
b57b79f7 863ovl_cons (tree decl, tree chain)
2c73f9f5
ML
864{
865 tree result = make_node (OVERLOAD);
866 TREE_TYPE (result) = unknown_type_node;
867 OVL_FUNCTION (result) = decl;
868 TREE_CHAIN (result) = chain;
9f63daea 869
2c73f9f5
ML
870 return result;
871}
872
2c73f9f5
ML
873/* Build a new overloaded function. If this is the first one,
874 just return it; otherwise, ovl_cons the _DECLs */
875
876tree
b57b79f7 877build_overload (tree decl, tree chain)
2c73f9f5 878{
161c12b0 879 if (! chain && TREE_CODE (decl) != TEMPLATE_DECL)
2c73f9f5 880 return decl;
161c12b0 881 if (chain && TREE_CODE (chain) != OVERLOAD)
2c73f9f5
ML
882 chain = ovl_cons (chain, NULL_TREE);
883 return ovl_cons (decl, chain);
884}
885
8d08fdba
MS
886\f
887#define PRINT_RING_SIZE 4
888
e1def31b 889const char *
b57b79f7 890cxx_printable_name (tree decl, int v)
8d08fdba
MS
891{
892 static tree decl_ring[PRINT_RING_SIZE];
893 static char *print_ring[PRINT_RING_SIZE];
894 static int ring_counter;
895 int i;
896
897 /* Only cache functions. */
2ba25f50
MS
898 if (v < 2
899 || TREE_CODE (decl) != FUNCTION_DECL
8d08fdba 900 || DECL_LANG_SPECIFIC (decl) == 0)
2ba25f50 901 return lang_decl_name (decl, v);
8d08fdba
MS
902
903 /* See if this print name is lying around. */
904 for (i = 0; i < PRINT_RING_SIZE; i++)
905 if (decl_ring[i] == decl)
906 /* yes, so return it. */
907 return print_ring[i];
908
909 if (++ring_counter == PRINT_RING_SIZE)
910 ring_counter = 0;
911
912 if (current_function_decl != NULL_TREE)
913 {
914 if (decl_ring[ring_counter] == current_function_decl)
915 ring_counter += 1;
916 if (ring_counter == PRINT_RING_SIZE)
917 ring_counter = 0;
918 if (decl_ring[ring_counter] == current_function_decl)
a98facb0 919 abort ();
8d08fdba
MS
920 }
921
922 if (print_ring[ring_counter])
923 free (print_ring[ring_counter]);
924
2ba25f50
MS
925 print_ring[ring_counter] = xstrdup (lang_decl_name (decl, v));
926 decl_ring[ring_counter] = decl;
8d08fdba
MS
927 return print_ring[ring_counter];
928}
929\f
f30432d7 930/* Build the FUNCTION_TYPE or METHOD_TYPE which may throw exceptions
8d08fdba 931 listed in RAISES. */
e92cc029 932
8d08fdba 933tree
b57b79f7 934build_exception_variant (tree type, tree raises)
8d08fdba 935{
8d08fdba 936 tree v = TYPE_MAIN_VARIANT (type);
91063b51 937 int type_quals = TYPE_QUALS (type);
8d08fdba 938
45537677 939 for (; v; v = TYPE_NEXT_VARIANT (v))
896c3aa3
JM
940 if (check_qualified_type (v, type, type_quals)
941 && comp_except_specs (raises, TYPE_RAISES_EXCEPTIONS (v), 1))
4cc1d462 942 return v;
8d08fdba
MS
943
944 /* Need to build a new variant. */
8dd16ecc 945 v = build_variant_type_copy (type);
8d08fdba
MS
946 TYPE_RAISES_EXCEPTIONS (v) = raises;
947 return v;
948}
949
dac65501
KL
950/* Given a TEMPLATE_TEMPLATE_PARM node T, create a new
951 BOUND_TEMPLATE_TEMPLATE_PARM bound with NEWARGS as its template
1899c3a4 952 arguments. */
73b0fce8
KL
953
954tree
b57b79f7 955bind_template_template_parm (tree t, tree newargs)
73b0fce8 956{
1899c3a4 957 tree decl = TYPE_NAME (t);
6b9b6b15
JM
958 tree t2;
959
dac65501
KL
960 t2 = make_aggr_type (BOUND_TEMPLATE_TEMPLATE_PARM);
961 decl = build_decl (TYPE_DECL, DECL_NAME (decl), NULL_TREE);
1899c3a4 962
dac65501
KL
963 /* These nodes have to be created to reflect new TYPE_DECL and template
964 arguments. */
965 TEMPLATE_TYPE_PARM_INDEX (t2) = copy_node (TEMPLATE_TYPE_PARM_INDEX (t));
966 TEMPLATE_PARM_DECL (TEMPLATE_TYPE_PARM_INDEX (t2)) = decl;
967 TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (t2)
9f63daea 968 = tree_cons (TEMPLATE_TEMPLATE_PARM_TEMPLATE_DECL (t),
dac65501 969 newargs, NULL_TREE);
6b9b6b15 970
1899c3a4
KL
971 TREE_TYPE (decl) = t2;
972 TYPE_NAME (t2) = decl;
973 TYPE_STUB_DECL (t2) = decl;
dac65501 974 TYPE_SIZE (t2) = 0;
73b0fce8 975
73b0fce8
KL
976 return t2;
977}
978
bf3428d0 979/* Called from count_trees via walk_tree. */
297a5329
JM
980
981static tree
44de5aeb 982count_trees_r (tree *tp, int *walk_subtrees, void *data)
297a5329 983{
44de5aeb
RK
984 ++*((int *) data);
985
986 if (TYPE_P (*tp))
987 *walk_subtrees = 0;
988
297a5329
JM
989 return NULL_TREE;
990}
991
992/* Debugging function for measuring the rough complexity of a tree
993 representation. */
994
995int
b57b79f7 996count_trees (tree t)
297a5329 997{
bf3428d0 998 int n_trees = 0;
ee94fce6 999 walk_tree_without_duplicates (&t, count_trees_r, &n_trees);
297a5329 1000 return n_trees;
9f63daea 1001}
297a5329 1002
b2244c65
MM
1003/* Called from verify_stmt_tree via walk_tree. */
1004
1005static tree
9f63daea
EC
1006verify_stmt_tree_r (tree* tp,
1007 int* walk_subtrees ATTRIBUTE_UNUSED ,
b57b79f7 1008 void* data)
b2244c65
MM
1009{
1010 tree t = *tp;
1011 htab_t *statements = (htab_t *) data;
1012 void **slot;
1013
009ed910 1014 if (!STATEMENT_CODE_P (TREE_CODE (t)))
b2244c65
MM
1015 return NULL_TREE;
1016
1017 /* If this statement is already present in the hash table, then
1018 there is a circularity in the statement tree. */
1019 if (htab_find (*statements, t))
a98facb0 1020 abort ();
9f63daea 1021
b2244c65
MM
1022 slot = htab_find_slot (*statements, t, INSERT);
1023 *slot = t;
1024
1025 return NULL_TREE;
1026}
1027
1028/* Debugging function to check that the statement T has not been
1029 corrupted. For now, this function simply checks that T contains no
1030 circularities. */
1031
1032void
b57b79f7 1033verify_stmt_tree (tree t)
b2244c65
MM
1034{
1035 htab_t statements;
1036 statements = htab_create (37, htab_hash_pointer, htab_eq_pointer, NULL);
ee94fce6 1037 walk_tree (&t, verify_stmt_tree_r, &statements, NULL);
b2244c65
MM
1038 htab_delete (statements);
1039}
1040
1041/* Called from find_tree via walk_tree. */
1042
1043static tree
9f63daea
EC
1044find_tree_r (tree* tp,
1045 int* walk_subtrees ATTRIBUTE_UNUSED ,
b57b79f7 1046 void* data)
b2244c65
MM
1047{
1048 if (*tp == (tree) data)
1049 return (tree) data;
1050
1051 return NULL_TREE;
1052}
1053
1054/* Returns X if X appears in the tree structure rooted at T. */
1055
1056tree
b57b79f7 1057find_tree (tree t, tree x)
b2244c65 1058{
ee94fce6 1059 return walk_tree_without_duplicates (&t, find_tree_r, x);
b2244c65
MM
1060}
1061
50a6dbd7 1062/* Check if the type T depends on a type with no linkage and if so, return
4684cd27
MM
1063 it. If RELAXED_P then do not consider a class type declared within
1064 a TREE_PUBLIC function to have no linkage. */
50a6dbd7
JM
1065
1066tree
4684cd27 1067no_linkage_check (tree t, bool relaxed_p)
50a6dbd7 1068{
caf43ca4
MM
1069 tree r;
1070
2adeacc9
MM
1071 /* There's no point in checking linkage on template functions; we
1072 can't know their complete types. */
1073 if (processing_template_decl)
1074 return NULL_TREE;
1075
caf43ca4
MM
1076 switch (TREE_CODE (t))
1077 {
4684cd27
MM
1078 tree fn;
1079
caf43ca4
MM
1080 case RECORD_TYPE:
1081 if (TYPE_PTRMEMFUNC_P (t))
1082 goto ptrmem;
1083 /* Fall through. */
1084 case UNION_TYPE:
1085 if (!CLASS_TYPE_P (t))
1086 return NULL_TREE;
1087 /* Fall through. */
1088 case ENUMERAL_TYPE:
4684cd27
MM
1089 if (TYPE_ANONYMOUS_P (t))
1090 return t;
1091 fn = decl_function_context (TYPE_MAIN_DECL (t));
1092 if (fn && (!relaxed_p || !TREE_PUBLIC (fn)))
caf43ca4
MM
1093 return t;
1094 return NULL_TREE;
1095
1096 case ARRAY_TYPE:
1097 case POINTER_TYPE:
1098 case REFERENCE_TYPE:
4684cd27 1099 return no_linkage_check (TREE_TYPE (t), relaxed_p);
caf43ca4
MM
1100
1101 case OFFSET_TYPE:
1102 ptrmem:
4684cd27
MM
1103 r = no_linkage_check (TYPE_PTRMEM_POINTED_TO_TYPE (t),
1104 relaxed_p);
caf43ca4
MM
1105 if (r)
1106 return r;
4684cd27 1107 return no_linkage_check (TYPE_PTRMEM_CLASS_TYPE (t), relaxed_p);
caf43ca4
MM
1108
1109 case METHOD_TYPE:
4684cd27 1110 r = no_linkage_check (TYPE_METHOD_BASETYPE (t), relaxed_p);
caf43ca4
MM
1111 if (r)
1112 return r;
1113 /* Fall through. */
1114 case FUNCTION_TYPE:
1115 {
1116 tree parm;
9f63daea
EC
1117 for (parm = TYPE_ARG_TYPES (t);
1118 parm && parm != void_list_node;
caf43ca4
MM
1119 parm = TREE_CHAIN (parm))
1120 {
4684cd27 1121 r = no_linkage_check (TREE_VALUE (parm), relaxed_p);
caf43ca4
MM
1122 if (r)
1123 return r;
1124 }
4684cd27 1125 return no_linkage_check (TREE_TYPE (t), relaxed_p);
caf43ca4
MM
1126 }
1127
1128 default:
1129 return NULL_TREE;
1130 }
50a6dbd7
JM
1131}
1132
5566b478
MS
1133#ifdef GATHER_STATISTICS
1134extern int depth_reached;
1135#endif
1136
8d08fdba 1137void
b57b79f7 1138cxx_print_statistics (void)
8d08fdba 1139{
8d08fdba
MS
1140 print_search_statistics ();
1141 print_class_statistics ();
5566b478
MS
1142#ifdef GATHER_STATISTICS
1143 fprintf (stderr, "maximum template instantiation depth reached: %d\n",
1144 depth_reached);
1145#endif
8d08fdba
MS
1146}
1147
e92cc029
MS
1148/* Return, as an INTEGER_CST node, the number of elements for TYPE
1149 (which is an ARRAY_TYPE). This counts only elements of the top
1150 array. */
8d08fdba
MS
1151
1152tree
b57b79f7 1153array_type_nelts_top (tree type)
8d08fdba 1154{
f293ce4b
RS
1155 return fold (build2 (PLUS_EXPR, sizetype,
1156 array_type_nelts (type),
1157 integer_one_node));
8d08fdba
MS
1158}
1159
e92cc029
MS
1160/* Return, as an INTEGER_CST node, the number of elements for TYPE
1161 (which is an ARRAY_TYPE). This one is a recursive count of all
1162 ARRAY_TYPEs that are clumped together. */
8d08fdba
MS
1163
1164tree
b57b79f7 1165array_type_nelts_total (tree type)
8d08fdba
MS
1166{
1167 tree sz = array_type_nelts_top (type);
1168 type = TREE_TYPE (type);
1169 while (TREE_CODE (type) == ARRAY_TYPE)
1170 {
1171 tree n = array_type_nelts_top (type);
f293ce4b 1172 sz = fold (build2 (MULT_EXPR, sizetype, sz, n));
8d08fdba
MS
1173 type = TREE_TYPE (type);
1174 }
1175 return sz;
1176}
878cd289 1177
b3ab27f3
MM
1178/* Called from break_out_target_exprs via mapcar. */
1179
1180static tree
b57b79f7 1181bot_manip (tree* tp, int* walk_subtrees, void* data)
878cd289 1182{
8dfaeb63
MM
1183 splay_tree target_remap = ((splay_tree) data);
1184 tree t = *tp;
1185
4f976745 1186 if (!TYPE_P (t) && TREE_CONSTANT (t))
8dfaeb63 1187 {
495d26d6
JM
1188 /* There can't be any TARGET_EXPRs or their slot variables below
1189 this point. We used to check !TREE_SIDE_EFFECTS, but then we
1190 failed to copy an ADDR_EXPR of the slot VAR_DECL. */
8dfaeb63
MM
1191 *walk_subtrees = 0;
1192 return NULL_TREE;
1193 }
495d26d6 1194 if (TREE_CODE (t) == TARGET_EXPR)
73aad9b9 1195 {
b3ab27f3
MM
1196 tree u;
1197
02531345 1198 if (TREE_CODE (TREE_OPERAND (t, 1)) == AGGR_INIT_EXPR)
73aad9b9
JM
1199 {
1200 mark_used (TREE_OPERAND (TREE_OPERAND (TREE_OPERAND (t, 1), 0), 0));
b3ab27f3 1201 u = build_cplus_new
73aad9b9
JM
1202 (TREE_TYPE (t), break_out_target_exprs (TREE_OPERAND (t, 1)));
1203 }
9f63daea 1204 else
b3ab27f3 1205 {
495d26d6
JM
1206 u = build_target_expr_with_type
1207 (break_out_target_exprs (TREE_OPERAND (t, 1)), TREE_TYPE (t));
b3ab27f3
MM
1208 }
1209
1210 /* Map the old variable to the new one. */
9f63daea
EC
1211 splay_tree_insert (target_remap,
1212 (splay_tree_key) TREE_OPERAND (t, 0),
b3ab27f3 1213 (splay_tree_value) TREE_OPERAND (u, 0));
8dfaeb63
MM
1214
1215 /* Replace the old expression with the new version. */
1216 *tp = u;
1217 /* We don't have to go below this point; the recursive call to
1218 break_out_target_exprs will have handled anything below this
1219 point. */
1220 *walk_subtrees = 0;
1221 return NULL_TREE;
73aad9b9
JM
1222 }
1223 else if (TREE_CODE (t) == CALL_EXPR)
1224 mark_used (TREE_OPERAND (TREE_OPERAND (t, 0), 0));
1225
8dfaeb63
MM
1226 /* Make a copy of this node. */
1227 return copy_tree_r (tp, walk_subtrees, NULL);
878cd289 1228}
9f63daea 1229
8dfaeb63
MM
1230/* Replace all remapped VAR_DECLs in T with their new equivalents.
1231 DATA is really a splay-tree mapping old variables to new
1232 variables. */
b3ab27f3
MM
1233
1234static tree
9f63daea
EC
1235bot_replace (tree* t,
1236 int* walk_subtrees ATTRIBUTE_UNUSED ,
b57b79f7 1237 void* data)
b3ab27f3 1238{
8dfaeb63
MM
1239 splay_tree target_remap = ((splay_tree) data);
1240
b3ab27f3
MM
1241 if (TREE_CODE (*t) == VAR_DECL)
1242 {
1243 splay_tree_node n = splay_tree_lookup (target_remap,
1244 (splay_tree_key) *t);
1245 if (n)
1246 *t = (tree) n->value;
1247 }
1248
1249 return NULL_TREE;
1250}
9f63daea 1251
8dfaeb63
MM
1252/* When we parse a default argument expression, we may create
1253 temporary variables via TARGET_EXPRs. When we actually use the
1254 default-argument expression, we make a copy of the expression, but
1255 we must replace the temporaries with appropriate local versions. */
e92cc029 1256
878cd289 1257tree
b57b79f7 1258break_out_target_exprs (tree t)
878cd289 1259{
8dfaeb63
MM
1260 static int target_remap_count;
1261 static splay_tree target_remap;
1262
b3ab27f3 1263 if (!target_remap_count++)
9f63daea
EC
1264 target_remap = splay_tree_new (splay_tree_compare_pointers,
1265 /*splay_tree_delete_key_fn=*/NULL,
b3ab27f3 1266 /*splay_tree_delete_value_fn=*/NULL);
ee94fce6
MM
1267 walk_tree (&t, bot_manip, target_remap, NULL);
1268 walk_tree (&t, bot_replace, target_remap, NULL);
b3ab27f3
MM
1269
1270 if (!--target_remap_count)
1271 {
1272 splay_tree_delete (target_remap);
1273 target_remap = NULL;
1274 }
1275
1276 return t;
878cd289 1277}
f30432d7 1278
8e1daa34
NS
1279/* Similar to `build_nt', but for template definitions of dependent
1280 expressions */
5566b478
MS
1281
1282tree
e34d07f2 1283build_min_nt (enum tree_code code, ...)
5566b478 1284{
926ce8bd
KH
1285 tree t;
1286 int length;
1287 int i;
e34d07f2 1288 va_list p;
5566b478 1289
e34d07f2 1290 va_start (p, code);
5566b478 1291
5566b478 1292 t = make_node (code);
8d5e6e25 1293 length = TREE_CODE_LENGTH (code);
5566b478
MS
1294
1295 for (i = 0; i < length; i++)
1296 {
1297 tree x = va_arg (p, tree);
2a1e9fdd 1298 TREE_OPERAND (t, i) = x;
5566b478
MS
1299 }
1300
e34d07f2 1301 va_end (p);
5566b478
MS
1302 return t;
1303}
1304
8e1daa34 1305/* Similar to `build', but for template definitions. */
5566b478
MS
1306
1307tree
e34d07f2 1308build_min (enum tree_code code, tree tt, ...)
5566b478 1309{
926ce8bd
KH
1310 tree t;
1311 int length;
1312 int i;
e34d07f2 1313 va_list p;
5566b478 1314
e34d07f2 1315 va_start (p, tt);
5566b478 1316
5566b478 1317 t = make_node (code);
8d5e6e25 1318 length = TREE_CODE_LENGTH (code);
2a1e9fdd 1319 TREE_TYPE (t) = tt;
5566b478
MS
1320
1321 for (i = 0; i < length; i++)
1322 {
1323 tree x = va_arg (p, tree);
2a1e9fdd 1324 TREE_OPERAND (t, i) = x;
4f976745 1325 if (x && !TYPE_P (x) && TREE_SIDE_EFFECTS (x))
8e1daa34 1326 TREE_SIDE_EFFECTS (t) = 1;
5566b478
MS
1327 }
1328
e34d07f2 1329 va_end (p);
5566b478
MS
1330 return t;
1331}
1332
8e1daa34
NS
1333/* Similar to `build', but for template definitions of non-dependent
1334 expressions. NON_DEP is the non-dependent expression that has been
1335 built. */
1336
1337tree
1338build_min_non_dep (enum tree_code code, tree non_dep, ...)
1339{
926ce8bd
KH
1340 tree t;
1341 int length;
1342 int i;
8e1daa34
NS
1343 va_list p;
1344
1345 va_start (p, non_dep);
1346
1347 t = make_node (code);
1348 length = TREE_CODE_LENGTH (code);
1349 TREE_TYPE (t) = TREE_TYPE (non_dep);
8e1daa34
NS
1350 TREE_SIDE_EFFECTS (t) = TREE_SIDE_EFFECTS (non_dep);
1351
1352 for (i = 0; i < length; i++)
1353 {
1354 tree x = va_arg (p, tree);
1355 TREE_OPERAND (t, i) = x;
1356 }
1357
1358 if (code == COMPOUND_EXPR && TREE_CODE (non_dep) != COMPOUND_EXPR)
1359 /* This should not be considered a COMPOUND_EXPR, because it
04c06002 1360 resolves to an overload. */
8e1daa34 1361 COMPOUND_EXPR_OVERLOADED (t) = 1;
9f63daea 1362
8e1daa34
NS
1363 va_end (p);
1364 return t;
1365}
1366
5566b478 1367tree
b57b79f7 1368get_type_decl (tree t)
5566b478 1369{
5566b478
MS
1370 if (TREE_CODE (t) == TYPE_DECL)
1371 return t;
2f939d94 1372 if (TYPE_P (t))
5566b478 1373 return TYPE_STUB_DECL (t);
1bc0793e
NS
1374 if (t == error_mark_node)
1375 return t;
9f63daea 1376
a98facb0 1377 abort ();
4e1e2064
MH
1378
1379 /* Stop compiler from complaining control reaches end of non-void function. */
1380 return 0;
5566b478
MS
1381}
1382
700466c2
JM
1383/* Returns the namespace that contains DECL, whether directly or
1384 indirectly. */
1385
1386tree
b57b79f7 1387decl_namespace_context (tree decl)
700466c2
JM
1388{
1389 while (1)
1390 {
1391 if (TREE_CODE (decl) == NAMESPACE_DECL)
1392 return decl;
1393 else if (TYPE_P (decl))
1394 decl = CP_DECL_CONTEXT (TYPE_MAIN_DECL (decl));
1395 else
1396 decl = CP_DECL_CONTEXT (decl);
1397 }
1398}
1399
67d743fe 1400/* Return truthvalue of whether T1 is the same tree structure as T2.
c8a209ca 1401 Return 1 if they are the same. Return 0 if they are different. */
67d743fe 1402
c8a209ca 1403bool
b57b79f7 1404cp_tree_equal (tree t1, tree t2)
67d743fe 1405{
926ce8bd 1406 enum tree_code code1, code2;
67d743fe
MS
1407
1408 if (t1 == t2)
c8a209ca
NS
1409 return true;
1410 if (!t1 || !t2)
1411 return false;
1412
1413 for (code1 = TREE_CODE (t1);
1414 code1 == NOP_EXPR || code1 == CONVERT_EXPR
1415 || code1 == NON_LVALUE_EXPR;
1416 code1 = TREE_CODE (t1))
1417 t1 = TREE_OPERAND (t1, 0);
1418 for (code2 = TREE_CODE (t2);
1419 code2 == NOP_EXPR || code2 == CONVERT_EXPR
1420 || code1 == NON_LVALUE_EXPR;
1421 code2 = TREE_CODE (t2))
1422 t2 = TREE_OPERAND (t2, 0);
1423
1424 /* They might have become equal now. */
1425 if (t1 == t2)
1426 return true;
9f63daea 1427
67d743fe 1428 if (code1 != code2)
c8a209ca 1429 return false;
67d743fe
MS
1430
1431 switch (code1)
1432 {
1433 case INTEGER_CST:
1434 return TREE_INT_CST_LOW (t1) == TREE_INT_CST_LOW (t2)
1435 && TREE_INT_CST_HIGH (t1) == TREE_INT_CST_HIGH (t2);
1436
1437 case REAL_CST:
1438 return REAL_VALUES_EQUAL (TREE_REAL_CST (t1), TREE_REAL_CST (t2));
1439
1440 case STRING_CST:
1441 return TREE_STRING_LENGTH (t1) == TREE_STRING_LENGTH (t2)
da61dec9 1442 && !memcmp (TREE_STRING_POINTER (t1), TREE_STRING_POINTER (t2),
c8a209ca 1443 TREE_STRING_LENGTH (t1));
67d743fe
MS
1444
1445 case CONSTRUCTOR:
7dd4bdf5
MM
1446 /* We need to do this when determining whether or not two
1447 non-type pointer to member function template arguments
1448 are the same. */
3bfdc719 1449 if (!(same_type_p (TREE_TYPE (t1), TREE_TYPE (t2))
7dd4bdf5
MM
1450 /* The first operand is RTL. */
1451 && TREE_OPERAND (t1, 0) == TREE_OPERAND (t2, 0)))
c8a209ca 1452 return false;
7dd4bdf5
MM
1453 return cp_tree_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
1454
1455 case TREE_LIST:
c8a209ca
NS
1456 if (!cp_tree_equal (TREE_PURPOSE (t1), TREE_PURPOSE (t2)))
1457 return false;
1458 if (!cp_tree_equal (TREE_VALUE (t1), TREE_VALUE (t2)))
1459 return false;
7dd4bdf5 1460 return cp_tree_equal (TREE_CHAIN (t1), TREE_CHAIN (t2));
67d743fe
MS
1461
1462 case SAVE_EXPR:
1463 return cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
1464
1465 case CALL_EXPR:
c8a209ca
NS
1466 if (!cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0)))
1467 return false;
67d743fe
MS
1468 return cp_tree_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
1469
c8a209ca
NS
1470 case TARGET_EXPR:
1471 {
1472 tree o1 = TREE_OPERAND (t1, 0);
1473 tree o2 = TREE_OPERAND (t2, 0);
9f63daea 1474
c8a209ca
NS
1475 /* Special case: if either target is an unallocated VAR_DECL,
1476 it means that it's going to be unified with whatever the
1477 TARGET_EXPR is really supposed to initialize, so treat it
1478 as being equivalent to anything. */
1479 if (TREE_CODE (o1) == VAR_DECL && DECL_NAME (o1) == NULL_TREE
1480 && !DECL_RTL_SET_P (o1))
1481 /*Nop*/;
1482 else if (TREE_CODE (o2) == VAR_DECL && DECL_NAME (o2) == NULL_TREE
1483 && !DECL_RTL_SET_P (o2))
1484 /*Nop*/;
1485 else if (!cp_tree_equal (o1, o2))
1486 return false;
9f63daea 1487
c8a209ca
NS
1488 return cp_tree_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
1489 }
9f63daea 1490
67d743fe 1491 case WITH_CLEANUP_EXPR:
c8a209ca
NS
1492 if (!cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0)))
1493 return false;
6ad7895a 1494 return cp_tree_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t1, 1));
67d743fe
MS
1495
1496 case COMPONENT_REF:
c8a209ca
NS
1497 if (TREE_OPERAND (t1, 1) != TREE_OPERAND (t2, 1))
1498 return false;
1499 return cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
67d743fe
MS
1500
1501 case VAR_DECL:
1502 case PARM_DECL:
1503 case CONST_DECL:
1504 case FUNCTION_DECL:
c8a209ca
NS
1505 case TEMPLATE_DECL:
1506 case IDENTIFIER_NODE:
1507 return false;
67d743fe 1508
f84b4be9 1509 case TEMPLATE_PARM_INDEX:
31758337
NS
1510 return (TEMPLATE_PARM_IDX (t1) == TEMPLATE_PARM_IDX (t2)
1511 && TEMPLATE_PARM_LEVEL (t1) == TEMPLATE_PARM_LEVEL (t2)
1512 && same_type_p (TREE_TYPE (TEMPLATE_PARM_DECL (t1)),
1513 TREE_TYPE (TEMPLATE_PARM_DECL (t2))));
67d743fe 1514
bf12d54d
NS
1515 case TEMPLATE_ID_EXPR:
1516 {
1517 unsigned ix;
1518 tree vec1, vec2;
9f63daea 1519
bf12d54d
NS
1520 if (!cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0)))
1521 return false;
1522 vec1 = TREE_OPERAND (t1, 1);
1523 vec2 = TREE_OPERAND (t2, 1);
1524
1525 if (!vec1 || !vec2)
1526 return !vec1 && !vec2;
9f63daea 1527
bf12d54d
NS
1528 if (TREE_VEC_LENGTH (vec1) != TREE_VEC_LENGTH (vec2))
1529 return false;
1530
1531 for (ix = TREE_VEC_LENGTH (vec1); ix--;)
1532 if (!cp_tree_equal (TREE_VEC_ELT (vec1, ix),
1533 TREE_VEC_ELT (vec2, ix)))
1534 return false;
9f63daea 1535
bf12d54d
NS
1536 return true;
1537 }
9f63daea 1538
67d743fe 1539 case SIZEOF_EXPR:
abff8e06 1540 case ALIGNOF_EXPR:
c8a209ca
NS
1541 {
1542 tree o1 = TREE_OPERAND (t1, 0);
1543 tree o2 = TREE_OPERAND (t2, 0);
9f63daea 1544
c8a209ca
NS
1545 if (TREE_CODE (o1) != TREE_CODE (o2))
1546 return false;
1547 if (TYPE_P (o1))
1548 return same_type_p (o1, o2);
1549 else
1550 return cp_tree_equal (o1, o2);
1551 }
9f63daea 1552
61a127b3
MM
1553 case PTRMEM_CST:
1554 /* Two pointer-to-members are the same if they point to the same
1555 field or function in the same class. */
c8a209ca
NS
1556 if (PTRMEM_CST_MEMBER (t1) != PTRMEM_CST_MEMBER (t2))
1557 return false;
1558
1559 return same_type_p (PTRMEM_CST_CLASS (t1), PTRMEM_CST_CLASS (t2));
61a127b3 1560
7f85441b
KG
1561 default:
1562 break;
67d743fe
MS
1563 }
1564
1565 switch (TREE_CODE_CLASS (code1))
1566 {
67d743fe
MS
1567 case '1':
1568 case '2':
1569 case '<':
1570 case 'e':
1571 case 'r':
1572 case 's':
aa1826e2
NS
1573 {
1574 int i;
9f63daea 1575
aa1826e2 1576 for (i = 0; i < TREE_CODE_LENGTH (code1); ++i)
c8a209ca
NS
1577 if (!cp_tree_equal (TREE_OPERAND (t1, i), TREE_OPERAND (t2, i)))
1578 return false;
9f63daea 1579
c8a209ca 1580 return true;
aa1826e2 1581 }
9f63daea 1582
c8a209ca
NS
1583 case 't':
1584 return same_type_p (t1, t2);
67d743fe
MS
1585 }
1586
50bc768d 1587 gcc_unreachable ();
c8a209ca 1588 return false;
67d743fe 1589}
73aad9b9 1590
d11ad92e
MS
1591/* The type of ARG when used as an lvalue. */
1592
1593tree
b57b79f7 1594lvalue_type (tree arg)
d11ad92e 1595{
2c73f9f5 1596 tree type = TREE_TYPE (arg);
8cd4c175 1597 return type;
d11ad92e
MS
1598}
1599
1600/* The type of ARG for printing error messages; denote lvalues with
1601 reference types. */
1602
1603tree
b57b79f7 1604error_type (tree arg)
d11ad92e
MS
1605{
1606 tree type = TREE_TYPE (arg);
9f63daea 1607
d11ad92e
MS
1608 if (TREE_CODE (type) == ARRAY_TYPE)
1609 ;
08476342
NS
1610 else if (TREE_CODE (type) == ERROR_MARK)
1611 ;
d11ad92e
MS
1612 else if (real_lvalue_p (arg))
1613 type = build_reference_type (lvalue_type (arg));
1614 else if (IS_AGGR_TYPE (type))
1615 type = lvalue_type (arg);
1616
1617 return type;
1618}
eb66be0e
MS
1619
1620/* Does FUNCTION use a variable-length argument list? */
1621
1622int
b57b79f7 1623varargs_function_p (tree function)
eb66be0e
MS
1624{
1625 tree parm = TYPE_ARG_TYPES (TREE_TYPE (function));
1626 for (; parm; parm = TREE_CHAIN (parm))
1627 if (TREE_VALUE (parm) == void_type_node)
1628 return 0;
1629 return 1;
1630}
f94ae2f5
JM
1631
1632/* Returns 1 if decl is a member of a class. */
1633
1634int
b57b79f7 1635member_p (tree decl)
f94ae2f5 1636{
2f939d94
TP
1637 const tree ctx = DECL_CONTEXT (decl);
1638 return (ctx && TYPE_P (ctx));
f94ae2f5 1639}
51924768
JM
1640
1641/* Create a placeholder for member access where we don't actually have an
1642 object that the access is against. */
1643
1644tree
b57b79f7 1645build_dummy_object (tree type)
51924768 1646{
44689c12 1647 tree decl = build1 (NOP_EXPR, build_pointer_type (type), void_zero_node);
3e411c3f 1648 return build_indirect_ref (decl, NULL);
51924768
JM
1649}
1650
1651/* We've gotten a reference to a member of TYPE. Return *this if appropriate,
1652 or a dummy object otherwise. If BINFOP is non-0, it is filled with the
1653 binfo path from current_class_type to TYPE, or 0. */
1654
1655tree
b57b79f7 1656maybe_dummy_object (tree type, tree* binfop)
51924768
JM
1657{
1658 tree decl, context;
2db1ab2d 1659 tree binfo;
9f63daea 1660
51924768 1661 if (current_class_type
2db1ab2d
NS
1662 && (binfo = lookup_base (current_class_type, type,
1663 ba_ignore | ba_quiet, NULL)))
51924768
JM
1664 context = current_class_type;
1665 else
1666 {
1667 /* Reference from a nested class member function. */
1668 context = type;
2db1ab2d 1669 binfo = TYPE_BINFO (type);
51924768
JM
1670 }
1671
2db1ab2d
NS
1672 if (binfop)
1673 *binfop = binfo;
9f63daea 1674
a29e1034 1675 if (current_class_ref && context == current_class_type
3ebf5204
NS
1676 /* Kludge: Make sure that current_class_type is actually
1677 correct. It might not be if we're in the middle of
c6002625 1678 tsubst_default_argument. */
a29e1034
JM
1679 && same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (current_class_ref)),
1680 current_class_type))
51924768
JM
1681 decl = current_class_ref;
1682 else
1683 decl = build_dummy_object (context);
1684
1685 return decl;
1686}
1687
1688/* Returns 1 if OB is a placeholder object, or a pointer to one. */
1689
1690int
b57b79f7 1691is_dummy_object (tree ob)
51924768
JM
1692{
1693 if (TREE_CODE (ob) == INDIRECT_REF)
1694 ob = TREE_OPERAND (ob, 0);
1695 return (TREE_CODE (ob) == NOP_EXPR
44689c12 1696 && TREE_OPERAND (ob, 0) == void_zero_node);
51924768 1697}
5524676d
JM
1698
1699/* Returns 1 iff type T is a POD type, as defined in [basic.types]. */
1700
1701int
b57b79f7 1702pod_type_p (tree t)
5524676d 1703{
38da6039 1704 t = strip_array_types (t);
5524676d 1705
17bbb839
MM
1706 if (t == error_mark_node)
1707 return 1;
52fb2769
NS
1708 if (INTEGRAL_TYPE_P (t))
1709 return 1; /* integral, character or enumeral type */
1710 if (FLOAT_TYPE_P (t))
5524676d 1711 return 1;
52fb2769
NS
1712 if (TYPE_PTR_P (t))
1713 return 1; /* pointer to non-member */
a5ac359a
MM
1714 if (TYPE_PTR_TO_MEMBER_P (t))
1715 return 1; /* pointer to member */
b1009a5d
ZL
1716
1717 if (TREE_CODE (t) == VECTOR_TYPE)
1718 return 1; /* vectors are (small) arrays if scalars */
1719
52fb2769
NS
1720 if (! CLASS_TYPE_P (t))
1721 return 0; /* other non-class type (reference or function) */
1722 if (CLASSTYPE_NON_POD_P (t))
5524676d 1723 return 0;
5524676d
JM
1724 return 1;
1725}
e5dc5fb2 1726
94e6e4c4
AO
1727/* Returns 1 iff zero initialization of type T means actually storing
1728 zeros in it. */
1729
1730int
b57b79f7 1731zero_init_p (tree t)
94e6e4c4
AO
1732{
1733 t = strip_array_types (t);
1734
17bbb839
MM
1735 if (t == error_mark_node)
1736 return 1;
1737
94e6e4c4
AO
1738 /* NULL pointers to data members are initialized with -1. */
1739 if (TYPE_PTRMEM_P (t))
1740 return 0;
1741
1742 /* Classes that contain types that can't be zero-initialized, cannot
1743 be zero-initialized themselves. */
1744 if (CLASS_TYPE_P (t) && CLASSTYPE_NON_ZERO_INIT_P (t))
1745 return 0;
1746
1747 return 1;
1748}
1749
91d231cb 1750/* Table of valid C++ attributes. */
349ae713 1751const struct attribute_spec cxx_attribute_table[] =
e5dc5fb2 1752{
91d231cb
JM
1753 /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */
1754 { "java_interface", 0, 0, false, false, false, handle_java_interface_attribute },
1755 { "com_interface", 0, 0, false, false, false, handle_com_interface_attribute },
1756 { "init_priority", 1, 1, true, false, false, handle_init_priority_attribute },
1757 { NULL, 0, 0, false, false, false, NULL }
1758};
1759
1760/* Handle a "java_interface" attribute; arguments as in
1761 struct attribute_spec.handler. */
1762static tree
9f63daea
EC
1763handle_java_interface_attribute (tree* node,
1764 tree name,
1765 tree args ATTRIBUTE_UNUSED ,
1766 int flags,
b57b79f7 1767 bool* no_add_attrs)
91d231cb
JM
1768{
1769 if (DECL_P (*node)
1770 || !CLASS_TYPE_P (*node)
1771 || !TYPE_FOR_JAVA (*node))
60c87482 1772 {
4460cef2
GDR
1773 error ("`%E' attribute can only be applied to Java class definitions",
1774 name);
91d231cb
JM
1775 *no_add_attrs = true;
1776 return NULL_TREE;
60c87482 1777 }
91d231cb 1778 if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
8dd16ecc 1779 *node = build_variant_type_copy (*node);
91d231cb 1780 TYPE_JAVA_INTERFACE (*node) = 1;
e5dc5fb2 1781
91d231cb
JM
1782 return NULL_TREE;
1783}
1784
1785/* Handle a "com_interface" attribute; arguments as in
1786 struct attribute_spec.handler. */
1787static tree
9f63daea
EC
1788handle_com_interface_attribute (tree* node,
1789 tree name,
1790 tree args ATTRIBUTE_UNUSED ,
1791 int flags ATTRIBUTE_UNUSED ,
b57b79f7 1792 bool* no_add_attrs)
91d231cb
JM
1793{
1794 static int warned;
1795
1796 *no_add_attrs = true;
1797
1798 if (DECL_P (*node)
1799 || !CLASS_TYPE_P (*node)
1800 || *node != TYPE_MAIN_VARIANT (*node))
e5dc5fb2 1801 {
4460cef2
GDR
1802 warning ("`%E' attribute can only be applied to class definitions",
1803 name);
91d231cb
JM
1804 return NULL_TREE;
1805 }
e5dc5fb2 1806
91d231cb 1807 if (!warned++)
4460cef2
GDR
1808 warning ("`%E' is obsolete; g++ vtables are now COM-compatible by default",
1809 name);
91d231cb
JM
1810
1811 return NULL_TREE;
1812}
1813
1814/* Handle an "init_priority" attribute; arguments as in
1815 struct attribute_spec.handler. */
1816static tree
9f63daea
EC
1817handle_init_priority_attribute (tree* node,
1818 tree name,
1819 tree args,
1820 int flags ATTRIBUTE_UNUSED ,
b57b79f7 1821 bool* no_add_attrs)
91d231cb
JM
1822{
1823 tree initp_expr = TREE_VALUE (args);
1824 tree decl = *node;
1825 tree type = TREE_TYPE (decl);
1826 int pri;
1827
1828 STRIP_NOPS (initp_expr);
9f63daea 1829
91d231cb
JM
1830 if (!initp_expr || TREE_CODE (initp_expr) != INTEGER_CST)
1831 {
1832 error ("requested init_priority is not an integer constant");
1833 *no_add_attrs = true;
1834 return NULL_TREE;
1835 }
e5dc5fb2 1836
91d231cb 1837 pri = TREE_INT_CST_LOW (initp_expr);
9f63daea 1838
91d231cb
JM
1839 type = strip_array_types (type);
1840
1841 if (decl == NULL_TREE
1842 || TREE_CODE (decl) != VAR_DECL
1843 || !TREE_STATIC (decl)
1844 || DECL_EXTERNAL (decl)
1845 || (TREE_CODE (type) != RECORD_TYPE
1846 && TREE_CODE (type) != UNION_TYPE)
1847 /* Static objects in functions are initialized the
1848 first time control passes through that
1849 function. This is not precise enough to pin down an
c6002625 1850 init_priority value, so don't allow it. */
9f63daea 1851 || current_function_decl)
91d231cb 1852 {
4460cef2
GDR
1853 error ("can only use `%E' attribute on file-scope definitions "
1854 "of objects of class type", name);
91d231cb
JM
1855 *no_add_attrs = true;
1856 return NULL_TREE;
1857 }
e5dc5fb2 1858
91d231cb
JM
1859 if (pri > MAX_INIT_PRIORITY || pri <= 0)
1860 {
1861 error ("requested init_priority is out of range");
1862 *no_add_attrs = true;
1863 return NULL_TREE;
1864 }
e5dc5fb2 1865
91d231cb
JM
1866 /* Check for init_priorities that are reserved for
1867 language and runtime support implementations.*/
1868 if (pri <= MAX_RESERVED_INIT_PRIORITY)
1869 {
9f63daea 1870 warning
91d231cb 1871 ("requested init_priority is reserved for internal use");
e5dc5fb2
JM
1872 }
1873
91d231cb
JM
1874 if (SUPPORTS_INIT_PRIORITY)
1875 {
1876 DECL_INIT_PRIORITY (decl) = pri;
1877 return NULL_TREE;
1878 }
1879 else
1880 {
4460cef2 1881 error ("`%E' attribute is not supported on this platform", name);
91d231cb
JM
1882 *no_add_attrs = true;
1883 return NULL_TREE;
1884 }
e5dc5fb2 1885}
87533b37 1886
406d77a4
SB
1887/* Return a new TINST_LEVEL for DECL at location locus. */
1888tree
1889make_tinst_level (tree decl, location_t locus)
1890{
1891 tree tinst_level = make_node (TINST_LEVEL);
1892 TREE_CHAIN (tinst_level) = NULL_TREE;
1893 TINST_DECL (tinst_level) = decl;
1894 TINST_LOCATION (tinst_level) = locus;
1895 return tinst_level;
1896}
1897
87533b37
MM
1898/* Return a new PTRMEM_CST of the indicated TYPE. The MEMBER is the
1899 thing pointed to by the constant. */
1900
1901tree
b57b79f7 1902make_ptrmem_cst (tree type, tree member)
87533b37
MM
1903{
1904 tree ptrmem_cst = make_node (PTRMEM_CST);
87533b37
MM
1905 TREE_TYPE (ptrmem_cst) = type;
1906 PTRMEM_CST_MEMBER (ptrmem_cst) = member;
1907 return ptrmem_cst;
1908}
1909
e9525111
MM
1910/* Build a variant of TYPE that has the indicated ATTRIBUTES. May
1911 return an existing type of an appropriate type already exists. */
1912
1913tree
1914cp_build_type_attribute_variant (tree type, tree attributes)
1915{
1916 tree new_type;
1917
1918 new_type = build_type_attribute_variant (type, attributes);
1919 if (TREE_CODE (new_type) == FUNCTION_TYPE
9f63daea 1920 && (TYPE_RAISES_EXCEPTIONS (new_type)
e9525111
MM
1921 != TYPE_RAISES_EXCEPTIONS (type)))
1922 new_type = build_exception_variant (new_type,
1923 TYPE_RAISES_EXCEPTIONS (type));
1924 return new_type;
1925}
1926
25af8512 1927/* Apply FUNC to all language-specific sub-trees of TP in a pre-order
350fae66 1928 traversal. Called from walk_tree. */
25af8512 1929
9f63daea 1930tree
350fae66
RK
1931cp_walk_subtrees (tree *tp, int *walk_subtrees_p, walk_tree_fn func,
1932 void *data, void *htab)
25af8512
AO
1933{
1934 enum tree_code code = TREE_CODE (*tp);
6de9cd9a 1935 location_t save_locus;
25af8512 1936 tree result;
9f63daea 1937
25af8512
AO
1938#define WALK_SUBTREE(NODE) \
1939 do \
1940 { \
1941 result = walk_tree (&(NODE), func, data, htab); \
6de9cd9a 1942 if (result) goto out; \
25af8512
AO
1943 } \
1944 while (0)
1945
6de9cd9a
DN
1946 /* Set input_location here so we get the right instantiation context
1947 if we call instantiate_decl from inlinable_function_p. */
1948 save_locus = input_location;
93409b8c
PB
1949 if (EXPR_HAS_LOCATION (*tp))
1950 input_location = EXPR_LOCATION (*tp);
6de9cd9a 1951
25af8512
AO
1952 /* Not one of the easy cases. We must explicitly go through the
1953 children. */
6de9cd9a 1954 result = NULL_TREE;
25af8512
AO
1955 switch (code)
1956 {
1957 case DEFAULT_ARG:
1958 case TEMPLATE_TEMPLATE_PARM:
1959 case BOUND_TEMPLATE_TEMPLATE_PARM:
b8c6534b 1960 case UNBOUND_CLASS_TEMPLATE:
25af8512
AO
1961 case TEMPLATE_PARM_INDEX:
1962 case TEMPLATE_TYPE_PARM:
1963 case TYPENAME_TYPE:
1964 case TYPEOF_TYPE:
5dae1114 1965 case BASELINK:
da1d7781 1966 /* None of these have subtrees other than those already walked
25af8512
AO
1967 above. */
1968 *walk_subtrees_p = 0;
1969 break;
1970
406d77a4
SB
1971 case TINST_LEVEL:
1972 WALK_SUBTREE (TINST_DECL (*tp));
1973 *walk_subtrees_p = 0;
1974 break;
1975
25af8512
AO
1976 case PTRMEM_CST:
1977 WALK_SUBTREE (TREE_TYPE (*tp));
1978 *walk_subtrees_p = 0;
1979 break;
1980
1981 case TREE_LIST:
5dae1114 1982 WALK_SUBTREE (TREE_PURPOSE (*tp));
25af8512
AO
1983 break;
1984
1985 case OVERLOAD:
1986 WALK_SUBTREE (OVL_FUNCTION (*tp));
1987 WALK_SUBTREE (OVL_CHAIN (*tp));
1988 *walk_subtrees_p = 0;
1989 break;
1990
1991 case RECORD_TYPE:
1992 if (TYPE_PTRMEMFUNC_P (*tp))
1993 WALK_SUBTREE (TYPE_PTRMEMFUNC_FN_TYPE (*tp));
1994 break;
1995
1996 default:
6de9cd9a 1997 input_location = save_locus;
350fae66 1998 return NULL_TREE;
25af8512
AO
1999 }
2000
2001 /* We didn't find what we were looking for. */
6de9cd9a
DN
2002 out:
2003 input_location = save_locus;
2004 return result;
25af8512
AO
2005
2006#undef WALK_SUBTREE
2007}
2008
2009/* Decide whether there are language-specific reasons to not inline a
2010 function as a tree. */
2011
19551f29 2012int
b57b79f7 2013cp_cannot_inline_tree_fn (tree* fnp)
25af8512
AO
2014{
2015 tree fn = *fnp;
2016
2017 /* We can inline a template instantiation only if it's fully
2018 instantiated. */
2019 if (DECL_TEMPLATE_INFO (fn)
2020 && TI_PENDING_TEMPLATE_FLAG (DECL_TEMPLATE_INFO (fn)))
2021 {
a5512a2f
MM
2022 /* Don't instantiate functions that are not going to be
2023 inlined. */
9f63daea 2024 if (!DECL_INLINE (DECL_TEMPLATE_RESULT
a5512a2f
MM
2025 (template_for_substitution (fn))))
2026 return 1;
1a9861e6 2027
415c974c 2028 fn = *fnp = instantiate_decl (fn, /*defer_ok=*/0, /*undefined_ok=*/0);
1a9861e6 2029
fd852454
RH
2030 if (TI_PENDING_TEMPLATE_FLAG (DECL_TEMPLATE_INFO (fn)))
2031 return 1;
25af8512
AO
2032 }
2033
d58b7c2d
MM
2034 if (flag_really_no_inline
2035 && lookup_attribute ("always_inline", DECL_ATTRIBUTES (fn)) == NULL)
2036 return 1;
2037
8a3c9180 2038 /* Don't auto-inline anything that might not be bound within
6039a93d
JH
2039 this unit of translation.
2040 Exclude comdat functions from this rule. While they can be bound
77077b39 2041 to the other unit, they all must be the same. This is especially
6039a93d
JH
2042 important so templates can inline. */
2043 if (!DECL_DECLARED_INLINE_P (fn) && !(*targetm.binds_local_p) (fn)
2044 && !DECL_COMDAT (fn))
8a3c9180
RH
2045 {
2046 DECL_UNINLINABLE (fn) = 1;
2047 return 1;
2048 }
2049
25af8512
AO
2050 if (varargs_function_p (fn))
2051 {
2052 DECL_UNINLINABLE (fn) = 1;
2053 return 1;
2054 }
2055
2056 if (! function_attribute_inlinable_p (fn))
2057 {
2058 DECL_UNINLINABLE (fn) = 1;
2059 return 1;
2060 }
2061
2062 return 0;
2063}
2064
2065/* Add any pending functions other than the current function (already
2066 handled by the caller), that thus cannot be inlined, to FNS_P, then
2067 return the latest function added to the array, PREV_FN. */
2068
19551f29 2069tree
b57b79f7 2070cp_add_pending_fn_decls (void* fns_p, tree prev_fn)
25af8512
AO
2071{
2072 varray_type *fnsp = (varray_type *)fns_p;
2073 struct saved_scope *s;
2074
2075 for (s = scope_chain; s; s = s->prev)
2076 if (s->function_decl && s->function_decl != prev_fn)
2077 {
2078 VARRAY_PUSH_TREE (*fnsp, s->function_decl);
2079 prev_fn = s->function_decl;
2080 }
2081
2082 return prev_fn;
2083}
2084
2085/* Determine whether a tree node is an OVERLOAD node. Used to decide
2086 whether to copy a node or to preserve its chain when inlining a
2087 function. */
2088
19551f29 2089int
b57b79f7 2090cp_is_overload_p (tree t)
25af8512
AO
2091{
2092 return TREE_CODE (t) == OVERLOAD;
2093}
2094
2095/* Determine whether VAR is a declaration of an automatic variable in
2096 function FN. */
2097
19551f29 2098int
b57b79f7 2099cp_auto_var_in_fn_p (tree var, tree fn)
25af8512
AO
2100{
2101 return (DECL_P (var) && DECL_CONTEXT (var) == fn
2102 && nonstatic_local_decl_p (var));
2103}
2104
18c6ada9
JH
2105/* FN body has been duplicated. Update language specific fields. */
2106
2107void
9f63daea 2108cp_update_decl_after_saving (tree fn,
18c6ada9
JH
2109 void* decl_map_)
2110{
2111 splay_tree decl_map = (splay_tree)decl_map_;
2112 tree nrv = DECL_SAVED_FUNCTION_DATA (fn)->x_return_value;
2113 if (nrv)
2114 {
2115 DECL_SAVED_FUNCTION_DATA (fn)->x_return_value
2116 = (tree) splay_tree_lookup (decl_map, (splay_tree_key) nrv)->value;
2117 }
2118}
87e3dbc9
MM
2119/* Initialize tree.c. */
2120
0a818f84 2121void
b57b79f7 2122init_tree (void)
0a818f84 2123{
e2500fed 2124 list_hash_table = htab_create_ggc (31, list_hash, list_hash_eq, NULL);
0a818f84
GRK
2125}
2126
872f37f9 2127/* Returns the kind of special function that DECL (a FUNCTION_DECL)
50ad9642
MM
2128 is. Note that sfk_none is zero, so this function can be used as a
2129 predicate to test whether or not DECL is a special function. */
872f37f9
MM
2130
2131special_function_kind
b57b79f7 2132special_function_p (tree decl)
872f37f9
MM
2133{
2134 /* Rather than doing all this stuff with magic names, we should
2135 probably have a field of type `special_function_kind' in
2136 DECL_LANG_SPECIFIC. */
2137 if (DECL_COPY_CONSTRUCTOR_P (decl))
2138 return sfk_copy_constructor;
2139 if (DECL_CONSTRUCTOR_P (decl))
2140 return sfk_constructor;
596ea4e5 2141 if (DECL_OVERLOADED_OPERATOR_P (decl) == NOP_EXPR)
872f37f9
MM
2142 return sfk_assignment_operator;
2143 if (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (decl))
2144 return sfk_destructor;
2145 if (DECL_COMPLETE_DESTRUCTOR_P (decl))
2146 return sfk_complete_destructor;
2147 if (DECL_BASE_DESTRUCTOR_P (decl))
2148 return sfk_base_destructor;
2149 if (DECL_DELETING_DESTRUCTOR_P (decl))
2150 return sfk_deleting_destructor;
2151 if (DECL_CONV_FN_P (decl))
2152 return sfk_conversion;
2153
2154 return sfk_none;
2155}
7b019c19 2156
50ad9642
MM
2157/* Returns true if and only if NODE is a name, i.e., a node created
2158 by the parser when processing an id-expression. */
2159
2160bool
2161name_p (tree node)
2162{
2163 if (TREE_CODE (node) == TEMPLATE_ID_EXPR)
2164 node = TREE_OPERAND (node, 0);
2165 return (/* An ordinary unqualified name. */
2166 TREE_CODE (node) == IDENTIFIER_NODE
2167 /* A destructor name. */
2168 || TREE_CODE (node) == BIT_NOT_EXPR
2169 /* A qualified name. */
2170 || TREE_CODE (node) == SCOPE_REF);
2171}
2172
838dfd8a 2173/* Returns nonzero if TYPE is a character type, including wchar_t. */
7b019c19
MM
2174
2175int
b57b79f7 2176char_type_p (tree type)
7b019c19
MM
2177{
2178 return (same_type_p (type, char_type_node)
2179 || same_type_p (type, unsigned_char_type_node)
2180 || same_type_p (type, signed_char_type_node)
2181 || same_type_p (type, wchar_type_node));
2182}
ad50e811
MM
2183
2184/* Returns the kind of linkage associated with the indicated DECL. Th
2185 value returned is as specified by the language standard; it is
2186 independent of implementation details regarding template
2187 instantiation, etc. For example, it is possible that a declaration
2188 to which this function assigns external linkage would not show up
2189 as a global symbol when you run `nm' on the resulting object file. */
2190
2191linkage_kind
b57b79f7 2192decl_linkage (tree decl)
ad50e811
MM
2193{
2194 /* This function doesn't attempt to calculate the linkage from first
2195 principles as given in [basic.link]. Instead, it makes use of
2196 the fact that we have already set TREE_PUBLIC appropriately, and
2197 then handles a few special cases. Ideally, we would calculate
2198 linkage first, and then transform that into a concrete
2199 implementation. */
2200
2201 /* Things that don't have names have no linkage. */
2202 if (!DECL_NAME (decl))
2203 return lk_none;
2204
2205 /* Things that are TREE_PUBLIC have external linkage. */
2206 if (TREE_PUBLIC (decl))
2207 return lk_external;
2208
2209 /* Some things that are not TREE_PUBLIC have external linkage, too.
2210 For example, on targets that don't have weak symbols, we make all
2211 template instantiations have internal linkage (in the object
2212 file), but the symbols should still be treated as having external
2213 linkage from the point of view of the language. */
2214 if (DECL_LANG_SPECIFIC (decl) && DECL_COMDAT (decl))
2215 return lk_external;
2216
2217 /* Things in local scope do not have linkage, if they don't have
2218 TREE_PUBLIC set. */
2219 if (decl_function_context (decl))
2220 return lk_none;
2221
2222 /* Everything else has internal linkage. */
2223 return lk_internal;
2224}
6f30f1f1
JM
2225\f
2226/* EXP is an expression that we want to pre-evaluate. Returns via INITP an
2227 expression to perform the pre-evaluation, and returns directly an
2228 expression to use the precalculated result. */
2229
2230tree
b57b79f7 2231stabilize_expr (tree exp, tree* initp)
6f30f1f1
JM
2232{
2233 tree init_expr;
2234
2235 if (!TREE_SIDE_EFFECTS (exp))
2236 {
6de9cd9a 2237 init_expr = NULL_TREE;
6f30f1f1
JM
2238 }
2239 else if (!real_lvalue_p (exp)
2240 || !TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (exp)))
2241 {
2242 init_expr = get_target_expr (exp);
2243 exp = TARGET_EXPR_SLOT (init_expr);
2244 }
2245 else
2246 {
2247 exp = build_unary_op (ADDR_EXPR, exp, 1);
2248 init_expr = get_target_expr (exp);
2249 exp = TARGET_EXPR_SLOT (init_expr);
2250 exp = build_indirect_ref (exp, 0);
2251 }
2252
2253 *initp = init_expr;
2254 return exp;
2255}
6de9cd9a 2256
40aac948
JM
2257/* Add NEW, an expression whose value we don't care about, after the
2258 similar expression ORIG. */
2259
2260tree
2261add_stmt_to_compound (tree orig, tree new)
2262{
2263 if (!new || !TREE_SIDE_EFFECTS (new))
2264 return orig;
2265 if (!orig || !TREE_SIDE_EFFECTS (orig))
2266 return new;
2267 return build2 (COMPOUND_EXPR, void_type_node, orig, new);
2268}
2269
6de9cd9a
DN
2270/* Like stabilize_expr, but for a call whose args we want to
2271 pre-evaluate. */
2272
2273void
2274stabilize_call (tree call, tree *initp)
2275{
2276 tree inits = NULL_TREE;
2277 tree t;
2278
2279 if (call == error_mark_node)
2280 return;
2281
2282 if (TREE_CODE (call) != CALL_EXPR
2283 && TREE_CODE (call) != AGGR_INIT_EXPR)
2284 abort ();
2285
2286 for (t = TREE_OPERAND (call, 1); t; t = TREE_CHAIN (t))
2287 if (TREE_SIDE_EFFECTS (TREE_VALUE (t)))
2288 {
2289 tree init;
2290 TREE_VALUE (t) = stabilize_expr (TREE_VALUE (t), &init);
40aac948 2291 inits = add_stmt_to_compound (inits, init);
6de9cd9a
DN
2292 }
2293
2294 *initp = inits;
2295}
2296
2297/* Like stabilize_expr, but for an initialization. If we are initializing
2298 an object of class type, we don't want to introduce an extra temporary,
2299 so we look past the TARGET_EXPR and stabilize the arguments of the call
2300 instead. */
2301
2302bool
2303stabilize_init (tree init, tree *initp)
2304{
2305 tree t = init;
2306
2307 if (t == error_mark_node)
2308 return true;
2309
2310 if (TREE_CODE (t) == INIT_EXPR
2311 && TREE_CODE (TREE_OPERAND (t, 1)) != TARGET_EXPR)
2312 TREE_OPERAND (t, 1) = stabilize_expr (TREE_OPERAND (t, 1), initp);
2313 else
2314 {
2315 if (TREE_CODE (t) == INIT_EXPR)
2316 t = TREE_OPERAND (t, 1);
2317 if (TREE_CODE (t) == TARGET_EXPR)
2318 t = TARGET_EXPR_INITIAL (t);
bcac21a0
JM
2319 if (TREE_CODE (t) == COMPOUND_EXPR)
2320 t = expr_last (t);
6de9cd9a
DN
2321 if (TREE_CODE (t) == CONSTRUCTOR
2322 && CONSTRUCTOR_ELTS (t) == NULL_TREE)
2323 {
2324 /* Default-initialization. */
2325 *initp = NULL_TREE;
2326 return true;
2327 }
2328
2329 /* If the initializer is a COND_EXPR, we can't preevaluate
2330 anything. */
2331 if (TREE_CODE (t) == COND_EXPR)
2332 return false;
2333
2334 stabilize_call (t, initp);
2335 }
2336
2337 return true;
2338}
2339
e2500fed
GK
2340\f
2341#if defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 2007)
2342/* Complain that some language-specific thing hanging off a tree
2343 node has been accessed improperly. */
2344
2345void
b57b79f7 2346lang_check_failed (const char* file, int line, const char* function)
e2500fed
GK
2347{
2348 internal_error ("lang_* check: failed in %s, at %s:%d",
2349 function, trim_filename (file), line);
2350}
2351#endif /* ENABLE_TREE_CHECKING */
2352
2353#include "gt-cp-tree.h"