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