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