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