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