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