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