1 /* Language-dependent node constructors for parse phase of GNU compiler.
2 Copyright (C) 1987, 88, 92, 93, 94, 95, 1996 Free Software Foundation, Inc.
3 Hacked by Michael Tiemann (tiemann@cygnus.com)
5 This file is part of GNU CC.
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)
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.
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. */
31 extern void compiler_error ();
33 static tree get_identifier_list PROTO((tree));
34 static tree bot_manip PROTO((tree));
35 static tree perm_manip PROTO((tree));
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, int, int, int, tree, tree,
41 static void propagate_binfo_offsets PROTO((tree, tree));
42 static int avoid_overlap PROTO((tree, tree));
43 static int lvalue_p_1 PROTO((tree, int));
45 #define CEIL(x,y) (((x) + (y) - 1) / (y))
47 /* Returns non-zero if REF is an lvalue. If
48 TREAT_CLASS_RVALUES_AS_LVALUES is non-zero, rvalues of class type
49 are considered lvalues. */
52 lvalue_p_1 (ref, treat_class_rvalues_as_lvalues)
54 int treat_class_rvalues_as_lvalues;
56 if (TREE_CODE (TREE_TYPE (ref)) == REFERENCE_TYPE)
59 if (ref == current_class_ptr && flag_this_is_variable <= 0)
62 switch (TREE_CODE (ref))
64 /* preincrements and predecrements are valid lvals, provided
65 what they refer to are valid lvals. */
66 case PREINCREMENT_EXPR:
67 case PREDECREMENT_EXPR:
72 case WITH_CLEANUP_EXPR:
75 return lvalue_p_1 (TREE_OPERAND (ref, 0),
76 treat_class_rvalues_as_lvalues);
82 if (TREE_READONLY (ref) && ! TREE_STATIC (ref)
83 && DECL_LANG_SPECIFIC (ref)
84 && DECL_IN_AGGR_P (ref))
90 if (TREE_CODE (TREE_TYPE (ref)) != FUNCTION_TYPE
91 && TREE_CODE (TREE_TYPE (ref)) != METHOD_TYPE)
95 /* A currently unresolved scope ref. */
97 my_friendly_abort (103);
99 if (TREE_CODE (TREE_OPERAND (ref, 1)) == FUNCTION_DECL)
101 return (lvalue_p_1 (TREE_OPERAND (ref, 0),
102 treat_class_rvalues_as_lvalues)
103 && lvalue_p_1 (TREE_OPERAND (ref, 1),
104 treat_class_rvalues_as_lvalues));
108 return (lvalue_p_1 (TREE_OPERAND (ref, 1),
109 treat_class_rvalues_as_lvalues)
110 && lvalue_p_1 (TREE_OPERAND (ref, 2),
111 treat_class_rvalues_as_lvalues));
117 return lvalue_p_1 (TREE_OPERAND (ref, 1),
118 treat_class_rvalues_as_lvalues);
122 return (lvalue_p_1 (TREE_OPERAND (ref, 0),
123 treat_class_rvalues_as_lvalues)
124 && lvalue_p_1 (TREE_OPERAND (ref, 1),
125 treat_class_rvalues_as_lvalues));
128 return treat_class_rvalues_as_lvalues;
131 return (treat_class_rvalues_as_lvalues
132 && IS_AGGR_TYPE (TREE_TYPE (ref)));
135 /* All functions (except non-static-member functions) are
137 return !DECL_NONSTATIC_MEMBER_FUNCTION_P (ref);
146 /* Return nonzero if REF is an lvalue valid for this language.
147 Lvalues can be assigned, unless they have TREE_READONLY, or unless
148 they are FUNCTION_DECLs. Lvalues can have their address taken,
149 unless they have DECL_REGISTER. */
155 return lvalue_p_1 (ref, /*treat_class_rvalues_as_lvalues=*/0);
158 /* This differs from real_lvalue_p in that class rvalues are considered
165 return lvalue_p_1 (ref, /*treat_class_rvalues_as_lvalues=*/1);
168 /* Return nonzero if REF is an lvalue valid for this language;
169 otherwise, print an error message and return zero. */
172 lvalue_or_else (ref, string)
176 int win = lvalue_p (ref);
178 error ("non-lvalue in %s", string);
182 /* INIT is a CALL_EXPR which needs info about its target.
183 TYPE is the type that this initialization should appear to have.
185 Build an encapsulation of the initialization to perform
186 and return it so that it can be processed by language-independent
187 and language-specific expression expanders. */
190 build_cplus_new (type, init)
197 if (TREE_CODE (init) != CALL_EXPR && TREE_CODE (init) != AGGR_INIT_EXPR)
200 slot = build (VAR_DECL, type);
201 DECL_ARTIFICIAL (slot) = 1;
202 layout_decl (slot, 0);
203 rval = build (AGGR_INIT_EXPR, type,
204 TREE_OPERAND (init, 0), TREE_OPERAND (init, 1), slot);
205 TREE_SIDE_EFFECTS (rval) = 1;
206 rval = build (TARGET_EXPR, type, slot, rval, NULL_TREE, NULL_TREE);
207 TREE_SIDE_EFFECTS (rval) = 1;
212 /* Encapsulate the expression INIT in a TARGET_EXPR. */
215 get_target_expr (init)
221 slot = build (VAR_DECL, TREE_TYPE (init));
222 DECL_ARTIFICIAL (slot) = 1;
223 layout_decl (slot, 0);
224 rval = build (TARGET_EXPR, TREE_TYPE (init), slot, init,
225 NULL_TREE, NULL_TREE);
226 TREE_SIDE_EFFECTS (rval) = 1;
231 /* Recursively search EXP for CALL_EXPRs that need cleanups and replace
232 these CALL_EXPRs with tree nodes that will perform the cleanups. */
235 break_out_cleanups (exp)
240 if (TREE_CODE (tmp) == CALL_EXPR
241 && TYPE_NEEDS_DESTRUCTOR (TREE_TYPE (tmp)))
242 return build_cplus_new (TREE_TYPE (tmp), tmp);
244 while (TREE_CODE (tmp) == NOP_EXPR
245 || TREE_CODE (tmp) == CONVERT_EXPR
246 || TREE_CODE (tmp) == NON_LVALUE_EXPR)
248 if (TREE_CODE (TREE_OPERAND (tmp, 0)) == CALL_EXPR
249 && TYPE_NEEDS_DESTRUCTOR (TREE_TYPE (TREE_OPERAND (tmp, 0))))
251 TREE_OPERAND (tmp, 0)
252 = build_cplus_new (TREE_TYPE (TREE_OPERAND (tmp, 0)),
253 TREE_OPERAND (tmp, 0));
257 tmp = TREE_OPERAND (tmp, 0);
262 /* Recursively perform a preorder search EXP for CALL_EXPRs, making
263 copies where they are found. Returns a deep copy all nodes transitively
264 containing CALL_EXPRs. */
267 break_out_calls (exp)
270 register tree t1, t2 = NULL_TREE;
271 register enum tree_code code;
272 register int changed = 0;
275 if (exp == NULL_TREE)
278 code = TREE_CODE (exp);
280 if (code == CALL_EXPR)
281 return copy_node (exp);
283 /* Don't try and defeat a save_expr, as it should only be done once. */
284 if (code == SAVE_EXPR)
287 switch (TREE_CODE_CLASS (code))
292 case 'c': /* a constant */
293 case 't': /* a type node */
294 case 'x': /* something random, like an identifier or an ERROR_MARK. */
297 case 'd': /* A decl node */
298 #if 0 /* This is bogus. jason 9/21/94 */
300 t1 = break_out_calls (DECL_INITIAL (exp));
301 if (t1 != DECL_INITIAL (exp))
303 exp = copy_node (exp);
304 DECL_INITIAL (exp) = t1;
309 case 'b': /* A block node */
311 /* Don't know how to handle these correctly yet. Must do a
312 break_out_calls on all DECL_INITIAL values for local variables,
313 and also break_out_calls on all sub-blocks and sub-statements. */
318 case 'e': /* an expression */
319 case 'r': /* a reference */
320 case 's': /* an expression with side effects */
321 for (i = tree_code_length[(int) code] - 1; i >= 0; i--)
323 t1 = break_out_calls (TREE_OPERAND (exp, i));
324 if (t1 != TREE_OPERAND (exp, i))
326 exp = copy_node (exp);
327 TREE_OPERAND (exp, i) = t1;
332 case '<': /* a comparison expression */
333 case '2': /* a binary arithmetic expression */
334 t2 = break_out_calls (TREE_OPERAND (exp, 1));
335 if (t2 != TREE_OPERAND (exp, 1))
337 case '1': /* a unary arithmetic expression */
338 t1 = break_out_calls (TREE_OPERAND (exp, 0));
339 if (t1 != TREE_OPERAND (exp, 0))
343 if (tree_code_length[(int) code] == 1)
344 return build1 (code, TREE_TYPE (exp), t1);
346 return build (code, TREE_TYPE (exp), t1, t2);
353 extern struct obstack *current_obstack;
354 extern struct obstack permanent_obstack, class_obstack;
355 extern struct obstack *saveable_obstack;
356 extern struct obstack *expression_obstack;
358 /* Here is how primitive or already-canonicalized types' hash
359 codes are made. MUST BE CONSISTENT WITH tree.c !!! */
360 #define TYPE_HASH(TYPE) ((HOST_WIDE_INT) (TYPE) & 0777777)
362 /* Construct, lay out and return the type of methods belonging to class
363 BASETYPE and whose arguments are described by ARGTYPES and whose values
364 are described by RETTYPE. If each type exists already, reuse it. */
367 build_cplus_method_type (basetype, rettype, argtypes)
368 tree basetype, rettype, argtypes;
374 /* Make a node of the sort we want. */
375 t = make_node (METHOD_TYPE);
377 TYPE_METHOD_BASETYPE (t) = TYPE_MAIN_VARIANT (basetype);
378 TREE_TYPE (t) = rettype;
379 if (IS_SIGNATURE (basetype))
380 ptype = build_signature_pointer_type (basetype);
382 ptype = build_pointer_type (basetype);
384 /* The actual arglist for this function includes a "hidden" argument
385 which is "this". Put it into the list of argument types. */
387 argtypes = tree_cons (NULL_TREE, ptype, argtypes);
388 TYPE_ARG_TYPES (t) = argtypes;
389 TREE_SIDE_EFFECTS (argtypes) = 1; /* Mark first argtype as "artificial". */
391 /* If we already have such a type, use the old one and free this one.
392 Note that it also frees up the above cons cell if found. */
393 hashcode = TYPE_HASH (basetype) + TYPE_HASH (rettype) + type_hash_list (argtypes);
394 t = type_hash_canon (hashcode, t);
396 if (TYPE_SIZE (t) == 0)
403 build_cplus_array_type_1 (elt_type, index_type)
407 register struct obstack *ambient_obstack = current_obstack;
408 register struct obstack *ambient_saveable_obstack = saveable_obstack;
411 /* We need a new one. If both ELT_TYPE and INDEX_TYPE are permanent,
412 make this permanent too. */
413 if (TREE_PERMANENT (elt_type)
414 && (index_type == 0 || TREE_PERMANENT (index_type)))
416 current_obstack = &permanent_obstack;
417 saveable_obstack = &permanent_obstack;
420 if (processing_template_decl
421 || uses_template_parms (index_type))
423 t = make_node (ARRAY_TYPE);
424 TREE_TYPE (t) = elt_type;
425 TYPE_DOMAIN (t) = index_type;
428 t = build_array_type (elt_type, index_type);
430 /* Push these needs up so that initialization takes place
432 TYPE_NEEDS_CONSTRUCTING (t) = TYPE_NEEDS_CONSTRUCTING (TYPE_MAIN_VARIANT (elt_type));
433 TYPE_NEEDS_DESTRUCTOR (t) = TYPE_NEEDS_DESTRUCTOR (TYPE_MAIN_VARIANT (elt_type));
434 current_obstack = ambient_obstack;
435 saveable_obstack = ambient_saveable_obstack;
440 build_cplus_array_type (elt_type, index_type)
445 int constp = TYPE_READONLY (elt_type);
446 int volatilep = TYPE_VOLATILE (elt_type);
447 elt_type = TYPE_MAIN_VARIANT (elt_type);
449 t = build_cplus_array_type_1 (elt_type, index_type);
451 if (constp || volatilep)
452 t = cp_build_type_variant (t, constp, volatilep);
457 /* Make a variant type in the proper way for C/C++, propagating qualifiers
458 down to the element type of an array. */
461 cp_build_type_variant (type, constp, volatilep)
463 int constp, volatilep;
465 if (type == error_mark_node)
468 if (TREE_CODE (type) == ARRAY_TYPE)
470 tree real_main_variant = TYPE_MAIN_VARIANT (type);
472 push_obstacks (TYPE_OBSTACK (real_main_variant),
473 TYPE_OBSTACK (real_main_variant));
474 type = build_cplus_array_type_1 (cp_build_type_variant
475 (TREE_TYPE (type), constp, volatilep),
478 /* TYPE must be on same obstack as REAL_MAIN_VARIANT. If not,
479 make a copy. (TYPE might have come from the hash table and
480 REAL_MAIN_VARIANT might be in some function's obstack.) */
482 if (TYPE_OBSTACK (type) != TYPE_OBSTACK (real_main_variant))
484 type = copy_node (type);
485 TYPE_POINTER_TO (type) = TYPE_REFERENCE_TO (type) = 0;
488 TYPE_MAIN_VARIANT (type) = real_main_variant;
492 return build_type_variant (type, constp, volatilep);
495 /* Returns the canonical version of TYPE. In other words, if TYPE is
496 a typedef, returns the underlying type. The cv-qualification of
497 the type returned matches the type input; they will always be
501 canonical_type_variant (t)
504 int constp, volatilep;
505 if (TREE_CODE (t) == ARRAY_TYPE)
507 constp = TYPE_READONLY (TREE_TYPE (t));
508 volatilep = TYPE_VOLATILE (TREE_TYPE (t));
512 constp = TYPE_READONLY (t);
513 volatilep = TYPE_VOLATILE (t);
515 return cp_build_type_variant (TYPE_MAIN_VARIANT (t), constp, volatilep);
518 /* Add OFFSET to all base types of T.
520 OFFSET, which is a type offset, is number of bytes.
522 Note that we don't have to worry about having two paths to the
523 same base type, since this type owns its association list. */
526 propagate_binfo_offsets (binfo, offset)
530 tree binfos = BINFO_BASETYPES (binfo);
531 int i, n_baselinks = binfos ? TREE_VEC_LENGTH (binfos) : 0;
533 for (i = 0; i < n_baselinks; /* note increment is done in the loop. */)
535 tree base_binfo = TREE_VEC_ELT (binfos, i);
537 if (TREE_VIA_VIRTUAL (base_binfo))
542 tree delta = NULL_TREE;
544 for (j = i+1; j < n_baselinks; j++)
545 if (! TREE_VIA_VIRTUAL (TREE_VEC_ELT (binfos, j)))
547 /* The next basetype offset must take into account the space
548 between the classes, not just the size of each class. */
549 delta = size_binop (MINUS_EXPR,
550 BINFO_OFFSET (TREE_VEC_ELT (binfos, j)),
551 BINFO_OFFSET (base_binfo));
556 if (BINFO_OFFSET_ZEROP (base_binfo))
557 BINFO_OFFSET (base_binfo) = offset;
559 BINFO_OFFSET (base_binfo)
560 = size_binop (PLUS_EXPR, BINFO_OFFSET (base_binfo), offset);
562 BINFO_OFFSET (base_binfo) = offset;
565 propagate_binfo_offsets (base_binfo, offset);
567 /* Go to our next class that counts for offset propagation. */
570 offset = size_binop (PLUS_EXPR, offset, delta);
575 /* Makes new binfos for the indirect bases under BINFO, and updates
576 BINFO_OFFSET for them and their bases. */
579 unshare_base_binfos (binfo)
582 tree binfos = BINFO_BASETYPES (binfo);
586 if (binfos == NULL_TREE)
589 /* Now unshare the structure beneath BINFO. */
590 for (j = TREE_VEC_LENGTH (binfos)-1;
593 tree base_binfo = TREE_VEC_ELT (binfos, j);
594 new_binfo = TREE_VEC_ELT (binfos, j)
595 = make_binfo (BINFO_OFFSET (base_binfo),
597 BINFO_VTABLE (base_binfo),
598 BINFO_VIRTUALS (base_binfo));
599 TREE_VIA_PUBLIC (new_binfo) = TREE_VIA_PUBLIC (base_binfo);
600 TREE_VIA_PROTECTED (new_binfo) = TREE_VIA_PROTECTED (base_binfo);
601 TREE_VIA_VIRTUAL (new_binfo) = TREE_VIA_VIRTUAL (base_binfo);
602 BINFO_INHERITANCE_CHAIN (new_binfo) = binfo;
603 unshare_base_binfos (new_binfo);
607 /* Finish the work of layout_record, now taking virtual bases into account.
608 Also compute the actual offsets that our base classes will have.
609 This must be performed after the fields are laid out, since virtual
610 baseclasses must lay down at the end of the record.
612 Returns the maximum number of virtual functions any of the
613 baseclasses provide. */
616 layout_basetypes (rec, max)
620 tree binfos = TYPE_BINFO_BASETYPES (rec);
621 int i, n_baseclasses = binfos ? TREE_VEC_LENGTH (binfos) : 0;
625 unsigned int record_align = MAX (BITS_PER_UNIT, TYPE_ALIGN (rec));
626 unsigned int desired_align;
628 /* Record size so far is CONST_SIZE bits, where CONST_SIZE is an integer. */
629 register unsigned int const_size = 0;
630 unsigned int nonvirtual_const_size;
632 #ifdef STRUCTURE_SIZE_BOUNDARY
633 /* Packed structures don't need to have minimum size. */
634 if (! TYPE_PACKED (rec))
635 record_align = MAX (record_align, STRUCTURE_SIZE_BOUNDARY);
638 /* Get all the virtual base types that this type uses. The
639 TREE_VALUE slot holds the virtual baseclass type. Note that
640 get_vbase_types makes copies of the virtual base BINFOs, so that
641 the vbase_types are unshared. */
642 CLASSTYPE_VBASECLASSES (rec) = vbase_types = get_vbase_types (rec);
644 my_friendly_assert (TREE_CODE (TYPE_SIZE (rec)) == INTEGER_CST, 19970302);
645 const_size = TREE_INT_CST_LOW (TYPE_SIZE (rec));
647 nonvirtual_const_size = const_size;
651 tree basetype = BINFO_TYPE (vbase_types);
654 desired_align = TYPE_ALIGN (basetype);
655 record_align = MAX (record_align, desired_align);
658 offset = integer_zero_node;
661 /* Give each virtual base type the alignment it wants. */
662 const_size = CEIL (const_size, desired_align) * desired_align;
663 offset = size_int (CEIL (const_size, BITS_PER_UNIT));
666 if (CLASSTYPE_VSIZE (basetype) > max)
667 max = CLASSTYPE_VSIZE (basetype);
668 BINFO_OFFSET (vbase_types) = offset;
670 /* Every virtual baseclass takes a least a UNIT, so that we can
671 take it's address and get something different for each base. */
672 const_size += MAX (BITS_PER_UNIT,
673 TREE_INT_CST_LOW (CLASSTYPE_SIZE (basetype)));
675 vbase_types = TREE_CHAIN (vbase_types);
680 /* Because a virtual base might take a single byte above,
681 we have to re-adjust the total size to make sure it is
682 a multiple of the alignment. */
683 /* Give the whole object the alignment it wants. */
684 const_size = CEIL (const_size, record_align) * record_align;
687 /* Set the alignment in the complete type. We don't set CLASSTYPE_ALIGN
688 here, as that is for this class, without any virtual base classes. */
689 TYPE_ALIGN (rec) = record_align;
690 if (const_size != nonvirtual_const_size)
692 TYPE_SIZE (rec) = size_int (const_size);
693 TYPE_SIZE_UNIT (rec) = size_binop (FLOOR_DIV_EXPR, TYPE_SIZE (rec),
694 size_int (BITS_PER_UNIT));
697 /* Now propagate offset information throughout the lattice. */
698 for (i = 0; i < n_baseclasses; i++)
700 register tree base_binfo = TREE_VEC_ELT (binfos, i);
701 register tree basetype = BINFO_TYPE (base_binfo);
702 tree field = TYPE_FIELDS (rec);
704 if (TREE_VIA_VIRTUAL (base_binfo))
707 my_friendly_assert (TREE_TYPE (field) == basetype, 23897);
709 if (get_base_distance (basetype, rec, 0, (tree*)0) == -2)
710 cp_warning ("direct base `%T' inaccessible in `%T' due to ambiguity",
713 BINFO_OFFSET (base_binfo)
714 = size_int (CEIL (TREE_INT_CST_LOW (DECL_FIELD_BITPOS (field)),
716 propagate_binfo_offsets (base_binfo, BINFO_OFFSET (base_binfo));
717 TYPE_FIELDS (rec) = TREE_CHAIN (field);
720 for (vbase_types = CLASSTYPE_VBASECLASSES (rec); vbase_types;
721 vbase_types = TREE_CHAIN (vbase_types))
723 BINFO_INHERITANCE_CHAIN (vbase_types) = TYPE_BINFO (rec);
724 unshare_base_binfos (vbase_types);
725 propagate_binfo_offsets (vbase_types, BINFO_OFFSET (vbase_types));
729 tree basetype = BINFO_TYPE (vbase_types);
730 if (get_base_distance (basetype, rec, 0, (tree*)0) == -2)
731 cp_warning ("virtual base `%T' inaccessible in `%T' due to ambiguity",
739 /* If the empty base field in DECL overlaps with a base of the same type in
740 NEWDECL, which is either another base field or the first data field of
741 the class, pad the base just before NEWDECL and return 1. Otherwise,
745 avoid_overlap (decl, newdecl)
750 if (newdecl == NULL_TREE
751 || ! types_overlap_p (TREE_TYPE (decl), TREE_TYPE (newdecl)))
754 for (field = decl; TREE_CHAIN (field) && TREE_CHAIN (field) != newdecl;
755 field = TREE_CHAIN (field))
758 DECL_SIZE (field) = integer_one_node;
763 /* Returns a list of fields to stand in for the base class subobjects
764 of REC. These fields are later removed by layout_basetypes. */
767 build_base_fields (rec)
770 /* Chain to hold all the new FIELD_DECLs which stand in for base class
772 tree base_decls = NULL_TREE;
773 tree binfos = TYPE_BINFO_BASETYPES (rec);
774 int n_baseclasses = binfos ? TREE_VEC_LENGTH (binfos) : 0;
776 int i, saw_empty = 0;
777 unsigned int base_align = 0;
779 for (i = 0; i < n_baseclasses; ++i)
781 register tree base_binfo = TREE_VEC_ELT (binfos, i);
782 register tree basetype = BINFO_TYPE (base_binfo);
784 if (TYPE_SIZE (basetype) == 0)
785 /* This error is now reported in xref_tag, thus giving better
786 location information. */
789 if (TREE_VIA_VIRTUAL (base_binfo))
792 decl = build_lang_field_decl (FIELD_DECL, NULL_TREE, basetype);
793 DECL_ARTIFICIAL (decl) = 1;
794 DECL_FIELD_CONTEXT (decl) = DECL_CLASS_CONTEXT (decl) = rec;
795 DECL_SIZE (decl) = CLASSTYPE_SIZE (basetype);
796 DECL_ALIGN (decl) = CLASSTYPE_ALIGN (basetype);
797 TREE_CHAIN (decl) = base_decls;
802 /* Brain damage for backwards compatibility. For no good reason,
803 the old layout_basetypes made every base at least as large as
804 the alignment for the bases up to that point, gratuitously
805 wasting space. So we do the same thing here. */
806 base_align = MAX (base_align, DECL_ALIGN (decl));
808 = size_int (MAX (TREE_INT_CST_LOW (DECL_SIZE (decl)),
811 else if (DECL_SIZE (decl) == integer_zero_node)
815 /* Reverse the list of fields so we allocate the bases in the proper
817 base_decls = nreverse (base_decls);
819 /* In the presence of empty base classes, we run the risk of allocating
820 two objects of the same class on top of one another. Avoid that. */
821 if (flag_new_abi && saw_empty)
822 for (decl = base_decls; decl; decl = TREE_CHAIN (decl))
824 if (DECL_SIZE (decl) == integer_zero_node)
826 /* First step through the following bases until we find
827 an overlap or a non-empty base. */
828 for (nextdecl = TREE_CHAIN (decl); nextdecl;
829 nextdecl = TREE_CHAIN (nextdecl))
831 if (avoid_overlap (decl, nextdecl)
832 || DECL_SIZE (nextdecl) != integer_zero_node)
836 /* If we're still looking, also check against the first
838 for (nextdecl = TYPE_FIELDS (rec);
839 nextdecl && TREE_CODE (nextdecl) != FIELD_DECL;
840 nextdecl = TREE_CHAIN (nextdecl))
842 avoid_overlap (decl, nextdecl);
850 /* Returns list of virtual base class pointers in a FIELD_DECL chain. */
853 build_vbase_pointer_fields (rec)
856 /* Chain to hold all the new FIELD_DECLs which point at virtual
858 tree vbase_decls = NULL_TREE;
859 tree binfos = TYPE_BINFO_BASETYPES (rec);
860 int n_baseclasses = binfos ? TREE_VEC_LENGTH (binfos) : 0;
864 /* Handle basetypes almost like fields, but record their
865 offsets differently. */
867 for (i = 0; i < n_baseclasses; i++)
869 register tree base_binfo = TREE_VEC_ELT (binfos, i);
870 register tree basetype = BINFO_TYPE (base_binfo);
872 if (TYPE_SIZE (basetype) == 0)
873 /* This error is now reported in xref_tag, thus giving better
874 location information. */
877 /* All basetypes are recorded in the association list of the
880 if (TREE_VIA_VIRTUAL (base_binfo))
885 /* The offset for a virtual base class is only used in computing
886 virtual function tables and for initializing virtual base
887 pointers. It is built once `get_vbase_types' is called. */
889 /* If this basetype can come from another vbase pointer
890 without an additional indirection, we will share
891 that pointer. If an indirection is involved, we
892 make our own pointer. */
893 for (j = 0; j < n_baseclasses; j++)
895 tree other_base_binfo = TREE_VEC_ELT (binfos, j);
896 if (! TREE_VIA_VIRTUAL (other_base_binfo)
897 && binfo_member (basetype,
898 CLASSTYPE_VBASECLASSES (BINFO_TYPE
903 FORMAT_VBASE_NAME (name, basetype);
904 decl = build_lang_field_decl (FIELD_DECL, get_identifier (name),
905 build_pointer_type (basetype));
906 /* If you change any of the below, take a look at all the
907 other VFIELD_BASEs and VTABLE_BASEs in the code, and change
909 DECL_ASSEMBLER_NAME (decl) = get_identifier (VTABLE_BASE);
910 DECL_VIRTUAL_P (decl) = 1;
911 DECL_ARTIFICIAL (decl) = 1;
912 DECL_FIELD_CONTEXT (decl) = rec;
913 DECL_CLASS_CONTEXT (decl) = rec;
914 DECL_FCONTEXT (decl) = basetype;
915 DECL_SAVED_INSNS (decl) = NULL_RTX;
916 DECL_FIELD_SIZE (decl) = 0;
917 DECL_ALIGN (decl) = TYPE_ALIGN (ptr_type_node);
918 TREE_CHAIN (decl) = vbase_decls;
919 BINFO_VPTR_FIELD (base_binfo) = decl;
923 /* The space this decl occupies has already been accounted for. */
931 /* Hashing of lists so that we don't make duplicates.
932 The entry point is `list_hash_canon'. */
934 /* Each hash table slot is a bucket containing a chain
935 of these structures. */
939 struct list_hash *next; /* Next structure in the bucket. */
940 int hashcode; /* Hash code of this list. */
941 tree list; /* The list recorded here. */
944 /* Now here is the hash table. When recording a list, it is added
945 to the slot whose index is the hash code mod the table size.
946 Note that the hash table is used for several kinds of lists.
947 While all these live in the same table, they are completely independent,
948 and the hash code is computed differently for each of these. */
950 #define TYPE_HASH_SIZE 59
951 static struct list_hash *list_hash_table[TYPE_HASH_SIZE];
953 /* Compute a hash code for a list (chain of TREE_LIST nodes
954 with goodies in the TREE_PURPOSE, TREE_VALUE, and bits of the
955 TREE_COMMON slots), by adding the hash codes of the individual entries. */
958 list_hash (purpose, value, chain)
959 tree purpose, value, chain;
961 register int hashcode = 0;
964 hashcode += TYPE_HASH (chain);
967 hashcode += TYPE_HASH (value);
971 hashcode += TYPE_HASH (purpose);
977 /* Look in the type hash table for a type isomorphic to TYPE.
978 If one is found, return it. Otherwise return 0. */
981 list_hash_lookup (hashcode, via_public, via_protected, via_virtual,
982 purpose, value, chain)
983 int hashcode, via_public, via_virtual, via_protected;
984 tree purpose, value, chain;
986 register struct list_hash *h;
988 for (h = list_hash_table[hashcode % TYPE_HASH_SIZE]; h; h = h->next)
989 if (h->hashcode == hashcode
990 && TREE_VIA_VIRTUAL (h->list) == via_virtual
991 && TREE_VIA_PUBLIC (h->list) == via_public
992 && TREE_VIA_PROTECTED (h->list) == via_protected
993 && TREE_PURPOSE (h->list) == purpose
994 && TREE_VALUE (h->list) == value
995 && TREE_CHAIN (h->list) == chain)
1000 /* Add an entry to the list-hash-table
1001 for a list TYPE whose hash code is HASHCODE. */
1004 list_hash_add (hashcode, list)
1008 register struct list_hash *h;
1010 h = (struct list_hash *) obstack_alloc (&class_obstack, sizeof (struct list_hash));
1011 h->hashcode = hashcode;
1013 h->next = list_hash_table[hashcode % TYPE_HASH_SIZE];
1014 list_hash_table[hashcode % TYPE_HASH_SIZE] = h;
1017 /* Given TYPE, and HASHCODE its hash code, return the canonical
1018 object for an identical list if one already exists.
1019 Otherwise, return TYPE, and record it as the canonical object
1020 if it is a permanent object.
1022 To use this function, first create a list of the sort you want.
1023 Then compute its hash code from the fields of the list that
1024 make it different from other similar lists.
1025 Then call this function and use the value.
1026 This function frees the list you pass in if it is a duplicate. */
1028 /* Set to 1 to debug without canonicalization. Never set by program. */
1030 static int debug_no_list_hash = 0;
1033 hash_tree_cons (via_public, via_virtual, via_protected, purpose, value, chain)
1034 int via_public, via_virtual, via_protected;
1035 tree purpose, value, chain;
1037 struct obstack *ambient_obstack = current_obstack;
1041 if (! debug_no_list_hash)
1043 hashcode = list_hash (purpose, value, chain);
1044 t = list_hash_lookup (hashcode, via_public, via_protected, via_virtual,
1045 purpose, value, chain);
1050 current_obstack = &class_obstack;
1052 t = tree_cons (purpose, value, chain);
1053 TREE_VIA_PUBLIC (t) = via_public;
1054 TREE_VIA_PROTECTED (t) = via_protected;
1055 TREE_VIA_VIRTUAL (t) = via_virtual;
1057 /* If this is a new list, record it for later reuse. */
1058 if (! debug_no_list_hash)
1059 list_hash_add (hashcode, t);
1061 current_obstack = ambient_obstack;
1065 /* Constructor for hashed lists. */
1068 hash_tree_chain (value, chain)
1071 return hash_tree_cons (0, 0, 0, NULL_TREE, value, chain);
1074 /* Similar, but used for concatenating two lists. */
1077 hash_chainon (list1, list2)
1084 if (TREE_CHAIN (list1) == NULL_TREE)
1085 return hash_tree_chain (TREE_VALUE (list1), list2);
1086 return hash_tree_chain (TREE_VALUE (list1),
1087 hash_chainon (TREE_CHAIN (list1), list2));
1091 get_identifier_list (value)
1094 tree list = IDENTIFIER_AS_LIST (value);
1095 if (list != NULL_TREE
1096 && (TREE_CODE (list) != TREE_LIST
1097 || TREE_VALUE (list) != value))
1099 else if (IDENTIFIER_HAS_TYPE_VALUE (value)
1100 && TREE_CODE (IDENTIFIER_TYPE_VALUE (value)) == RECORD_TYPE
1101 && IDENTIFIER_TYPE_VALUE (value)
1102 == TYPE_MAIN_VARIANT (IDENTIFIER_TYPE_VALUE (value)))
1104 tree type = IDENTIFIER_TYPE_VALUE (value);
1106 if (TYPE_PTRMEMFUNC_P (type))
1108 else if (type == current_class_type)
1109 /* Don't mess up the constructor name. */
1110 list = tree_cons (NULL_TREE, value, NULL_TREE);
1113 if (! CLASSTYPE_ID_AS_LIST (type))
1114 CLASSTYPE_ID_AS_LIST (type)
1115 = perm_tree_cons (NULL_TREE, TYPE_IDENTIFIER (type), NULL_TREE);
1116 list = CLASSTYPE_ID_AS_LIST (type);
1123 get_decl_list (value)
1126 tree list = NULL_TREE;
1128 if (TREE_CODE (value) == IDENTIFIER_NODE)
1129 list = get_identifier_list (value);
1130 else if (TREE_CODE (value) == RECORD_TYPE
1131 && TYPE_LANG_SPECIFIC (value)
1132 && value == TYPE_MAIN_VARIANT (value))
1133 list = CLASSTYPE_AS_LIST (value);
1135 if (list != NULL_TREE)
1137 my_friendly_assert (TREE_CHAIN (list) == NULL_TREE, 301);
1141 return build_decl_list (NULL_TREE, value);
1144 /* Build an association between TYPE and some parameters:
1146 OFFSET is the offset added to `this' to convert it to a pointer
1149 BINFO is the base binfo to use, if we are deriving from one. This
1150 is necessary, as we want specialized parent binfos from base
1151 classes, so that the VTABLE_NAMEs of bases are for the most derived
1152 type, instead of the simple type.
1154 VTABLE is the virtual function table with which to initialize
1155 sub-objects of type TYPE.
1157 VIRTUALS are the virtual functions sitting in VTABLE. */
1160 make_binfo (offset, binfo, vtable, virtuals)
1162 tree vtable, virtuals;
1164 tree new_binfo = make_tree_vec (7);
1167 if (TREE_CODE (binfo) == TREE_VEC)
1168 type = BINFO_TYPE (binfo);
1172 binfo = TYPE_BINFO (binfo);
1175 TREE_TYPE (new_binfo) = TYPE_MAIN_VARIANT (type);
1176 BINFO_OFFSET (new_binfo) = offset;
1177 BINFO_VTABLE (new_binfo) = vtable;
1178 BINFO_VIRTUALS (new_binfo) = virtuals;
1179 BINFO_VPTR_FIELD (new_binfo) = NULL_TREE;
1181 if (binfo && BINFO_BASETYPES (binfo) != NULL_TREE)
1182 BINFO_BASETYPES (new_binfo) = copy_node (BINFO_BASETYPES (binfo));
1186 /* Return the binfo value for ELEM in TYPE. */
1189 binfo_value (elem, type)
1193 if (get_base_distance (elem, type, 0, (tree *)0) == -2)
1194 compiler_error ("base class `%s' ambiguous in binfo_value",
1195 TYPE_NAME_STRING (elem));
1197 return TYPE_BINFO (type);
1198 if (TREE_CODE (elem) == RECORD_TYPE && TYPE_BINFO (elem) == type)
1200 return get_binfo (elem, type, 0);
1203 /* Return a reversed copy of the BINFO-chain given by PATH. (If the
1204 BINFO_INHERITANCE_CHAIN points from base classes to derived
1205 classes, it will instead point from derived classes to base
1206 classes.) Returns the first node in the reversed chain. */
1212 register tree prev = NULL_TREE, cur;
1213 push_expression_obstack ();
1214 for (cur = path; cur; cur = BINFO_INHERITANCE_CHAIN (cur))
1216 tree r = copy_node (cur);
1217 BINFO_INHERITANCE_CHAIN (r) = prev;
1228 unsigned HOST_WIDE_INT n;
1231 fprintf (stderr, "type \"%s\"; offset = %ld\n",
1232 TYPE_NAME_STRING (BINFO_TYPE (elem)),
1233 (long) TREE_INT_CST_LOW (BINFO_OFFSET (elem)));
1234 fprintf (stderr, "vtable type:\n");
1235 debug_tree (BINFO_TYPE (elem));
1236 if (BINFO_VTABLE (elem))
1237 fprintf (stderr, "vtable decl \"%s\"\n", IDENTIFIER_POINTER (DECL_NAME (BINFO_VTABLE (elem))));
1239 fprintf (stderr, "no vtable decl yet\n");
1240 fprintf (stderr, "virtuals:\n");
1241 virtuals = BINFO_VIRTUALS (elem);
1243 n = skip_rtti_stuff (&virtuals);
1247 tree fndecl = TREE_OPERAND (FNADDR_FROM_VTABLE_ENTRY (TREE_VALUE (virtuals)), 0);
1248 fprintf (stderr, "%s [%ld =? %ld]\n",
1249 IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (fndecl)),
1250 (long) n, (long) TREE_INT_CST_LOW (DECL_VINDEX (fndecl)));
1252 virtuals = TREE_CHAIN (virtuals);
1256 /* Initialize an CPLUS_BINDING node that does not live on an obstack. */
1260 struct tree_binding* node;
1262 static struct tree_binding* source;
1265 extern struct obstack permanent_obstack;
1266 push_obstacks (&permanent_obstack, &permanent_obstack);
1267 source = (struct tree_binding*)make_node (CPLUS_BINDING);
1271 TREE_PERMANENT ((tree)node) = 0;
1280 if (TREE_CODE (t) == FUNCTION_DECL)
1282 else if (TREE_CODE (t) == OVERLOAD)
1284 for (i=0; t; t = OVL_CHAIN (t))
1289 my_friendly_abort (359);
1294 is_overloaded_fn (x)
1297 /* XXX A baselink is also considered an overloaded function.
1298 As is a placeholder from push_class_decls. */
1299 if (TREE_CODE (x) == TREE_LIST)
1301 my_friendly_assert (TREE_CODE (TREE_PURPOSE (x)) == TREE_VEC
1302 || TREE_CODE (TREE_PURPOSE (x)) == IDENTIFIER_NODE,
1306 return (TREE_CODE (x) == FUNCTION_DECL
1307 || TREE_CODE (x) == TEMPLATE_ID_EXPR
1308 || DECL_FUNCTION_TEMPLATE_P (x)
1309 || TREE_CODE (x) == OVERLOAD);
1313 really_overloaded_fn (x)
1316 /* A baselink is also considered an overloaded function.
1317 This might also be an ambiguous class member. */
1318 if (TREE_CODE (x) == TREE_LIST)
1320 return (TREE_CODE (x) == OVERLOAD
1321 && (TREE_CHAIN (x) != NULL_TREE
1322 || DECL_FUNCTION_TEMPLATE_P (OVL_FUNCTION (x))));
1329 my_friendly_assert (is_overloaded_fn (from), 9);
1330 /* A baselink is also considered an overloaded function. */
1331 if (TREE_CODE (from) == TREE_LIST)
1332 from = TREE_VALUE (from);
1333 return OVL_CURRENT (from);
1336 /* Return a new OVL node, concatenating it with the old one. */
1339 ovl_cons (decl, chain)
1343 tree result = make_node (OVERLOAD);
1344 TREE_TYPE (result) = unknown_type_node;
1345 OVL_FUNCTION (result) = decl;
1346 TREE_CHAIN (result) = chain;
1351 /* Same as ovl_cons, but on the scratch_obstack. */
1354 scratch_ovl_cons (value, chain)
1358 register struct obstack *ambient_obstack = current_obstack;
1359 extern struct obstack *expression_obstack;
1360 current_obstack = expression_obstack;
1361 node = ovl_cons (value, chain);
1362 current_obstack = ambient_obstack;
1366 /* Build a new overloaded function. If this is the first one,
1367 just return it; otherwise, ovl_cons the _DECLs */
1370 build_overload (decl, chain)
1376 if (TREE_CODE (chain) != OVERLOAD)
1377 chain = ovl_cons (chain, NULL_TREE);
1378 return ovl_cons (decl, chain);
1381 /* True if fn is in ovl. */
1384 ovl_member (fn, ovl)
1388 if (ovl == NULL_TREE)
1390 if (TREE_CODE (ovl) != OVERLOAD)
1391 return decls_match (ovl, fn);
1392 for (; ovl; ovl = OVL_CHAIN (ovl))
1393 if (decls_match (OVL_FUNCTION (ovl), fn))
1399 is_aggr_type_2 (t1, t2)
1402 if (TREE_CODE (t1) != TREE_CODE (t2))
1404 return IS_AGGR_TYPE (t1) && IS_AGGR_TYPE (t2);
1407 #define PRINT_RING_SIZE 4
1410 lang_printable_name (decl, v)
1414 static tree decl_ring[PRINT_RING_SIZE];
1415 static char *print_ring[PRINT_RING_SIZE];
1416 static int ring_counter;
1419 /* Only cache functions. */
1421 || TREE_CODE (decl) != FUNCTION_DECL
1422 || DECL_LANG_SPECIFIC (decl) == 0)
1423 return lang_decl_name (decl, v);
1425 /* See if this print name is lying around. */
1426 for (i = 0; i < PRINT_RING_SIZE; i++)
1427 if (decl_ring[i] == decl)
1428 /* yes, so return it. */
1429 return print_ring[i];
1431 if (++ring_counter == PRINT_RING_SIZE)
1434 if (current_function_decl != NULL_TREE)
1436 if (decl_ring[ring_counter] == current_function_decl)
1438 if (ring_counter == PRINT_RING_SIZE)
1440 if (decl_ring[ring_counter] == current_function_decl)
1441 my_friendly_abort (106);
1444 if (print_ring[ring_counter])
1445 free (print_ring[ring_counter]);
1447 print_ring[ring_counter] = xstrdup (lang_decl_name (decl, v));
1448 decl_ring[ring_counter] = decl;
1449 return print_ring[ring_counter];
1452 /* Build the FUNCTION_TYPE or METHOD_TYPE which may throw exceptions
1453 listed in RAISES. */
1456 build_exception_variant (type, raises)
1460 tree v = TYPE_MAIN_VARIANT (type);
1461 int constp = TYPE_READONLY (type);
1462 int volatilep = TYPE_VOLATILE (type);
1464 for (; v; v = TYPE_NEXT_VARIANT (v))
1466 if (TYPE_READONLY (v) != constp
1467 || TYPE_VOLATILE (v) != volatilep)
1470 /* @@ This should do set equality, not exact match. */
1471 if (simple_cst_list_equal (TYPE_RAISES_EXCEPTIONS (v), raises))
1472 /* List of exceptions raised matches previously found list.
1474 @@ Nice to free up storage used in consing up the
1475 @@ list of exceptions raised. */
1479 /* Need to build a new variant. */
1480 v = build_type_copy (type);
1482 if (raises && ! TREE_PERMANENT (raises))
1484 push_obstacks_nochange ();
1485 end_temporary_allocation ();
1486 raises = copy_list (raises);
1490 TYPE_RAISES_EXCEPTIONS (v) = raises;
1494 /* Given a TEMPLATE_TEMPLATE_PARM node T, create a new one together with its
1495 lang_specific field and its corresponding TEMPLATE_DECL node */
1498 copy_template_template_parm (t)
1501 tree template = TYPE_NAME (t);
1502 tree t2 = make_lang_type (TEMPLATE_TEMPLATE_PARM);
1503 template = copy_node (template);
1504 copy_lang_decl (template);
1505 TREE_TYPE (template) = t2;
1506 TYPE_NAME (t2) = template;
1507 TYPE_STUB_DECL (t2) = template;
1509 /* No need to copy these */
1510 TYPE_FIELDS (t2) = TYPE_FIELDS (t);
1511 CLASSTYPE_TEMPLATE_INFO (t2) = CLASSTYPE_TEMPLATE_INFO (t);
1515 /* Walk through the tree structure T, applying func. If func ever returns
1516 non-null, return that value. */
1519 search_tree (t, func)
1521 tree (*func) PROTO((tree));
1523 #define TRY(ARG) if (tmp=search_tree (ARG, func), tmp != NULL_TREE) return tmp
1530 if (tmp = func (t), tmp != NULL_TREE)
1533 switch (TREE_CODE (t))
1538 case IDENTIFIER_NODE:
1545 case NAMESPACE_DECL:
1549 TRY (TREE_TYPE (t));
1553 TRY (TREE_TYPE (t));
1554 TRY (TREE_CHAIN (t));
1558 TRY (TREE_PURPOSE (t));
1559 TRY (TREE_VALUE (t));
1560 TRY (TREE_CHAIN (t));
1564 TRY (OVL_FUNCTION (t));
1565 TRY (OVL_CHAIN (t));
1570 int len = TREE_VEC_LENGTH (t);
1574 TRY (TREE_VEC_ELT (t, len));
1585 TRY (TREE_TYPE (t));
1590 case AGGR_INIT_EXPR:
1592 TRY (TREE_OPERAND (t, 0));
1593 TRY (TREE_OPERAND (t, 1));
1594 TRY (TREE_OPERAND (t, 2));
1601 case TRUNC_DIV_EXPR:
1602 case TRUNC_MOD_EXPR:
1610 case BIT_ANDTC_EXPR:
1611 case TRUTH_ANDIF_EXPR:
1612 case TRUTH_ORIF_EXPR:
1620 case FLOOR_DIV_EXPR:
1621 case ROUND_DIV_EXPR:
1623 case FLOOR_MOD_EXPR:
1624 case ROUND_MOD_EXPR:
1626 case PREDECREMENT_EXPR:
1627 case PREINCREMENT_EXPR:
1628 case POSTDECREMENT_EXPR:
1629 case POSTINCREMENT_EXPR:
1632 case TRY_CATCH_EXPR:
1633 case WITH_CLEANUP_EXPR:
1635 TRY (TREE_OPERAND (t, 0));
1636 TRY (TREE_OPERAND (t, 1));
1645 case TRUTH_NOT_EXPR:
1647 case NON_LVALUE_EXPR:
1649 case CLEANUP_POINT_EXPR:
1653 TRY (TREE_OPERAND (t, 0));
1658 case REINTERPRET_CAST_EXPR:
1659 case CONST_CAST_EXPR:
1660 case STATIC_CAST_EXPR:
1661 case DYNAMIC_CAST_EXPR:
1668 TRY (TREE_REALPART (t));
1669 TRY (TREE_IMAGPART (t));
1673 TRY (CONSTRUCTOR_ELTS (t));
1676 case TEMPLATE_TEMPLATE_PARM:
1677 case TEMPLATE_PARM_INDEX:
1678 case TEMPLATE_TYPE_PARM:
1694 case REFERENCE_TYPE:
1695 TRY (TREE_TYPE (t));
1700 TRY (TREE_TYPE (t));
1701 TRY (TYPE_ARG_TYPES (t));
1705 TRY (TREE_TYPE (t));
1706 TRY (TYPE_DOMAIN (t));
1710 TRY (TYPE_MAX_VALUE (t));
1714 TRY (TREE_TYPE (t));
1715 TRY (TYPE_OFFSET_BASETYPE (t));
1719 if (TYPE_PTRMEMFUNC_P (t))
1720 TRY (TYPE_PTRMEMFUNC_FN_TYPE (t));
1723 /* This list is incomplete, but should suffice for now.
1724 It is very important that `sorry' not call
1725 `report_error_function'. That could cause an infinite loop. */
1727 sorry ("initializer contains unrecognized tree code");
1728 return error_mark_node;
1737 /* Passed to search_tree. Checks for the use of types with no linkage. */
1740 no_linkage_helper (t)
1744 && (IS_AGGR_TYPE (t) || TREE_CODE (t) == ENUMERAL_TYPE)
1745 && (decl_function_context (TYPE_MAIN_DECL (t))
1746 || ANON_AGGRNAME_P (TYPE_IDENTIFIER (t))))
1751 /* Check if the type T depends on a type with no linkage and if so, return
1755 no_linkage_check (t)
1758 t = search_tree (t, no_linkage_helper);
1759 if (t != error_mark_node)
1765 /* Subroutine of copy_to_permanent
1767 Assuming T is a node build bottom-up, make it all exist on
1768 permanent obstack, if it is not permanent already. */
1773 tree (*func) PROTO((tree));
1780 if (tmp = func (t), tmp != NULL_TREE)
1783 switch (TREE_CODE (t))
1786 return error_mark_node;
1791 /* Rather than aborting, return error_mark_node. This allows us
1792 to report a sensible error message on code like this:
1794 void g() { int i; f<i>(7); }
1798 void g() { const int i = 7; f<i>(7); }
1800 however, we must actually return the constant initializer. */
1801 tmp = decl_constant_value (t);
1803 return mapcar (tmp, func);
1805 return error_mark_node;
1809 tree chain = TREE_CHAIN (t);
1811 TREE_CHAIN (t) = mapcar (chain, func);
1812 TREE_TYPE (t) = mapcar (TREE_TYPE (t), func);
1813 DECL_INITIAL (t) = mapcar (DECL_INITIAL (t), func);
1814 DECL_SIZE (t) = mapcar (DECL_SIZE (t), func);
1820 tree chain = TREE_CHAIN (t);
1822 TREE_PURPOSE (t) = mapcar (TREE_PURPOSE (t), func);
1823 TREE_VALUE (t) = mapcar (TREE_VALUE (t), func);
1824 TREE_CHAIN (t) = mapcar (chain, func);
1830 tree chain = OVL_CHAIN (t);
1832 OVL_FUNCTION (t) = mapcar (OVL_FUNCTION (t), func);
1833 OVL_CHAIN (t) = mapcar (chain, func);
1839 int len = TREE_VEC_LENGTH (t);
1843 TREE_VEC_ELT (t, len) = mapcar (TREE_VEC_ELT (t, len), func);
1850 return copy_node (t);
1854 TREE_TYPE (t) = mapcar (TREE_TYPE (t), func);
1855 PTRMEM_CST_MEMBER (t) = mapcar (PTRMEM_CST_MEMBER (t), func);
1860 case AGGR_INIT_EXPR:
1862 TREE_OPERAND (t, 0) = mapcar (TREE_OPERAND (t, 0), func);
1863 TREE_OPERAND (t, 1) = mapcar (TREE_OPERAND (t, 1), func);
1864 TREE_OPERAND (t, 2) = mapcar (TREE_OPERAND (t, 2), func);
1869 TREE_OPERAND (t, 0) = mapcar (TREE_OPERAND (t, 0), func);
1876 case TRUNC_DIV_EXPR:
1877 case TRUNC_MOD_EXPR:
1885 case BIT_ANDTC_EXPR:
1886 case TRUTH_ANDIF_EXPR:
1887 case TRUTH_ORIF_EXPR:
1895 case FLOOR_DIV_EXPR:
1896 case ROUND_DIV_EXPR:
1898 case FLOOR_MOD_EXPR:
1899 case ROUND_MOD_EXPR:
1901 case PREDECREMENT_EXPR:
1902 case PREINCREMENT_EXPR:
1903 case POSTDECREMENT_EXPR:
1904 case POSTINCREMENT_EXPR:
1907 case TRY_CATCH_EXPR:
1908 case WITH_CLEANUP_EXPR:
1910 TREE_OPERAND (t, 0) = mapcar (TREE_OPERAND (t, 0), func);
1911 TREE_OPERAND (t, 1) = mapcar (TREE_OPERAND (t, 1), func);
1916 TREE_TYPE (t) = mapcar (TREE_TYPE (t), func);
1917 TREE_OPERAND (t, 0) = mapcar (TREE_OPERAND (t, 0), func);
1918 TREE_OPERAND (t, 1) = mapcar (TREE_OPERAND (t, 1), func);
1920 /* tree.def says that operand two is RTL, but
1921 make_call_declarator puts trees in there. */
1922 if (TREE_OPERAND (t, 2)
1923 && TREE_CODE (TREE_OPERAND (t, 2)) == TREE_LIST)
1924 TREE_OPERAND (t, 2) = mapcar (TREE_OPERAND (t, 2), func);
1926 TREE_OPERAND (t, 2) = NULL_TREE;
1934 case TRUTH_NOT_EXPR:
1937 case CLEANUP_POINT_EXPR:
1939 TREE_OPERAND (t, 0) = mapcar (TREE_OPERAND (t, 0), func);
1943 tmp = build_pointer_type (mapcar (TREE_TYPE (t), func));
1944 return cp_build_type_variant (tmp, TYPE_READONLY (t), TYPE_VOLATILE (t));
1945 case REFERENCE_TYPE:
1946 tmp = build_reference_type (mapcar (TREE_TYPE (t), func));
1947 return cp_build_type_variant (tmp, TYPE_READONLY (t), TYPE_VOLATILE (t));
1949 tmp = build_function_type (mapcar (TREE_TYPE (t), func),
1950 mapcar (TYPE_ARG_TYPES (t), func));
1951 return cp_build_type_variant (tmp, TYPE_READONLY (t), TYPE_VOLATILE (t));
1953 tmp = build_cplus_array_type (mapcar (TREE_TYPE (t), func),
1954 mapcar (TYPE_DOMAIN (t), func));
1955 return cp_build_type_variant (tmp, TYPE_READONLY (t), TYPE_VOLATILE (t));
1957 tmp = build_index_type (mapcar (TYPE_MAX_VALUE (t), func));
1958 return cp_build_type_variant (tmp, TYPE_READONLY (t), TYPE_VOLATILE (t));
1960 tmp = build_offset_type (mapcar (TYPE_OFFSET_BASETYPE (t), func),
1961 mapcar (TREE_TYPE (t), func));
1962 return cp_build_type_variant (tmp, TYPE_READONLY (t), TYPE_VOLATILE (t));
1964 tmp = build_cplus_method_type
1965 (mapcar (TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (t))), func),
1966 mapcar (TREE_TYPE (t), func),
1967 mapcar (TREE_CHAIN (TYPE_ARG_TYPES (t)), func));
1968 return cp_build_type_variant (tmp, TYPE_READONLY (t), TYPE_VOLATILE (t));
1972 TREE_REALPART (t) = mapcar (TREE_REALPART (t), func);
1973 TREE_IMAGPART (t) = mapcar (TREE_REALPART (t), func);
1978 CONSTRUCTOR_ELTS (t) = mapcar (CONSTRUCTOR_ELTS (t), func);
1981 case TEMPLATE_TEMPLATE_PARM:
1982 return copy_template_template_parm (t);
1986 TREE_OPERAND (t, 0) = mapcar (TREE_OPERAND (t, 0), func);
1987 TREE_OPERAND (t, 1) = mapcar (TREE_OPERAND (t, 1), func);
1988 TREE_OPERAND (t, 2) = NULL_TREE;
1993 TREE_OPERAND (t, 0) = mapcar (TREE_OPERAND (t, 0), func);
1994 TREE_OPERAND (t, 1) = mapcar (TREE_OPERAND (t, 1), func);
1995 TREE_OPERAND (t, 2) = mapcar (TREE_OPERAND (t, 2), func);
2000 TREE_OPERAND (t, 0) = mapcar (TREE_OPERAND (t, 0), func);
2004 if (TYPE_PTRMEMFUNC_P (t))
2005 return build_ptrmemfunc_type
2006 (mapcar (TYPE_PTRMEMFUNC_FN_TYPE (t), func));
2007 /* else fall through */
2009 /* This list is incomplete, but should suffice for now.
2010 It is very important that `sorry' not call
2011 `report_error_function'. That could cause an infinite loop. */
2013 sorry ("initializer contains unrecognized tree code");
2014 return error_mark_node;
2017 my_friendly_abort (107);
2026 if (TREE_PERMANENT (t))
2029 /* Support `void f () { extern int i; A<&i> a; }' */
2030 if ((TREE_CODE (t) == VAR_DECL || TREE_CODE (t) == FUNCTION_DECL)
2035 /* copy_rtx won't make a new SYMBOL_REF, so call make_decl_rtl again. */
2037 make_decl_rtl (t, NULL_PTR, 1);
2044 /* Assuming T is a node built bottom-up, make it all exist on
2045 permanent obstack, if it is not permanent already. */
2048 copy_to_permanent (t)
2051 if (t == NULL_TREE || TREE_PERMANENT (t))
2054 push_obstacks_nochange ();
2055 end_temporary_allocation ();
2057 t = mapcar (t, perm_manip);
2064 #ifdef GATHER_STATISTICS
2065 extern int depth_reached;
2069 print_lang_statistics ()
2071 extern struct obstack decl_obstack;
2072 print_obstack_statistics ("class_obstack", &class_obstack);
2073 print_obstack_statistics ("decl_obstack", &decl_obstack);
2074 print_search_statistics ();
2075 print_class_statistics ();
2076 #ifdef GATHER_STATISTICS
2077 fprintf (stderr, "maximum template instantiation depth reached: %d\n",
2082 /* This is used by the `assert' macro. It is provided in libgcc.a,
2083 which `cc' doesn't know how to link. Note that the C++ front-end
2084 no longer actually uses the `assert' macro (instead, it calls
2085 my_friendly_assert). But all of the back-end files still need this. */
2088 __eprintf (string, expression, line, filename)
2091 const char *expression;
2093 const char *filename;
2101 fprintf (stderr, string, expression, line, filename);
2106 /* Return, as an INTEGER_CST node, the number of elements for TYPE
2107 (which is an ARRAY_TYPE). This counts only elements of the top
2111 array_type_nelts_top (type)
2114 return fold (build (PLUS_EXPR, sizetype,
2115 array_type_nelts (type),
2119 /* Return, as an INTEGER_CST node, the number of elements for TYPE
2120 (which is an ARRAY_TYPE). This one is a recursive count of all
2121 ARRAY_TYPEs that are clumped together. */
2124 array_type_nelts_total (type)
2127 tree sz = array_type_nelts_top (type);
2128 type = TREE_TYPE (type);
2129 while (TREE_CODE (type) == ARRAY_TYPE)
2131 tree n = array_type_nelts_top (type);
2132 sz = fold (build (MULT_EXPR, sizetype, sz, n));
2133 type = TREE_TYPE (type);
2143 if (TREE_CODE (t) != TREE_LIST && ! TREE_SIDE_EFFECTS (t))
2145 else if (TREE_CODE (t) == TARGET_EXPR)
2147 if (TREE_CODE (TREE_OPERAND (t, 1)) == AGGR_INIT_EXPR)
2149 mark_used (TREE_OPERAND (TREE_OPERAND (TREE_OPERAND (t, 1), 0), 0));
2150 return build_cplus_new
2151 (TREE_TYPE (t), break_out_target_exprs (TREE_OPERAND (t, 1)));
2154 TREE_OPERAND (t, 0) = build (VAR_DECL, TREE_TYPE (t));
2155 layout_decl (TREE_OPERAND (t, 0), 0);
2158 else if (TREE_CODE (t) == CALL_EXPR)
2159 mark_used (TREE_OPERAND (TREE_OPERAND (t, 0), 0));
2164 /* Actually, we'll just clean out the target exprs for the moment. */
2167 break_out_target_exprs (t)
2170 return mapcar (t, bot_manip);
2173 /* Obstack used for allocating nodes in template function and variable
2176 /* Similar to `build_nt', except we build
2177 on the permanent_obstack, regardless. */
2180 build_min_nt VPROTO((enum tree_code code, ...))
2183 enum tree_code code;
2185 register struct obstack *ambient_obstack = expression_obstack;
2188 register int length;
2194 code = va_arg (p, enum tree_code);
2197 expression_obstack = &permanent_obstack;
2199 t = make_node (code);
2200 length = tree_code_length[(int) code];
2201 TREE_COMPLEXITY (t) = lineno;
2203 for (i = 0; i < length; i++)
2205 tree x = va_arg (p, tree);
2206 TREE_OPERAND (t, i) = copy_to_permanent (x);
2210 expression_obstack = ambient_obstack;
2214 /* Similar to `build', except we build
2215 on the permanent_obstack, regardless. */
2218 build_min VPROTO((enum tree_code code, tree tt, ...))
2221 enum tree_code code;
2224 register struct obstack *ambient_obstack = expression_obstack;
2227 register int length;
2233 code = va_arg (p, enum tree_code);
2234 tt = va_arg (p, tree);
2237 expression_obstack = &permanent_obstack;
2239 t = make_node (code);
2240 length = tree_code_length[(int) code];
2241 TREE_TYPE (t) = copy_to_permanent (tt);
2242 TREE_COMPLEXITY (t) = lineno;
2244 for (i = 0; i < length; i++)
2246 tree x = va_arg (p, tree);
2247 TREE_OPERAND (t, i) = copy_to_permanent (x);
2251 expression_obstack = ambient_obstack;
2255 /* Same as `tree_cons' but make a permanent object. */
2258 min_tree_cons (purpose, value, chain)
2259 tree purpose, value, chain;
2262 register struct obstack *ambient_obstack = current_obstack;
2263 current_obstack = &permanent_obstack;
2265 node = tree_cons (copy_to_permanent (purpose),
2266 copy_to_permanent (value), chain);
2267 current_obstack = ambient_obstack;
2275 if (TREE_CODE (t) == TYPE_DECL)
2277 if (TREE_CODE_CLASS (TREE_CODE (t)) == 't')
2278 return TYPE_STUB_DECL (t);
2280 my_friendly_abort (42);
2282 /* Stop compiler from complaining control reaches end of non-void function. */
2287 can_free (obstack, t)
2288 struct obstack *obstack;
2293 if (TREE_CODE (t) == TREE_VEC)
2294 size = (TREE_VEC_LENGTH (t)-1) * sizeof (tree) + sizeof (struct tree_vec);
2296 my_friendly_abort (42);
2298 #define ROUND(x) ((x + obstack_alignment_mask (obstack)) \
2299 & ~ obstack_alignment_mask (obstack))
2300 if ((char *)t + ROUND (size) == obstack_next_free (obstack))
2307 /* Return first vector element whose BINFO_TYPE is ELEM.
2308 Return 0 if ELEM is not in VEC. VEC may be NULL_TREE. */
2311 vec_binfo_member (elem, vec)
2317 for (i = 0; i < TREE_VEC_LENGTH (vec); ++i)
2318 if (comptypes (elem, BINFO_TYPE (TREE_VEC_ELT (vec, i)), 1))
2319 return TREE_VEC_ELT (vec, i);
2324 /* Kludge around the fact that DECL_CONTEXT for virtual functions returns
2325 the wrong thing for decl_function_context. Hopefully the uses in the
2326 backend won't matter, since we don't need a static chain for local class
2330 hack_decl_function_context (decl)
2333 if (TREE_CODE (decl) == FUNCTION_DECL && DECL_FUNCTION_MEMBER_P (decl))
2334 return decl_function_context (TYPE_MAIN_DECL (DECL_CLASS_CONTEXT (decl)));
2335 return decl_function_context (decl);
2338 /* Return truthvalue of whether T1 is the same tree structure as T2.
2339 Return 1 if they are the same.
2340 Return 0 if they are understandably different.
2341 Return -1 if either contains tree structure not understood by
2345 cp_tree_equal (t1, t2)
2348 register enum tree_code code1, code2;
2353 if (t1 == 0 || t2 == 0)
2356 code1 = TREE_CODE (t1);
2357 code2 = TREE_CODE (t2);
2359 if (code1 == NOP_EXPR || code1 == CONVERT_EXPR || code1 == NON_LVALUE_EXPR)
2361 if (code2 == NOP_EXPR || code2 == CONVERT_EXPR || code2 == NON_LVALUE_EXPR)
2362 return cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
2364 return cp_tree_equal (TREE_OPERAND (t1, 0), t2);
2366 else if (code2 == NOP_EXPR || code2 == CONVERT_EXPR
2367 || code2 == NON_LVALUE_EXPR)
2368 return cp_tree_equal (t1, TREE_OPERAND (t2, 0));
2376 return TREE_INT_CST_LOW (t1) == TREE_INT_CST_LOW (t2)
2377 && TREE_INT_CST_HIGH (t1) == TREE_INT_CST_HIGH (t2);
2380 return REAL_VALUES_EQUAL (TREE_REAL_CST (t1), TREE_REAL_CST (t2));
2383 return TREE_STRING_LENGTH (t1) == TREE_STRING_LENGTH (t2)
2384 && !bcmp (TREE_STRING_POINTER (t1), TREE_STRING_POINTER (t2),
2385 TREE_STRING_LENGTH (t1));
2388 /* We need to do this when determining whether or not two
2389 non-type pointer to member function template arguments
2391 if (!(comptypes (TREE_TYPE (t1), TREE_TYPE (t2), 1)
2392 /* The first operand is RTL. */
2393 && TREE_OPERAND (t1, 0) == TREE_OPERAND (t2, 0)))
2395 return cp_tree_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
2398 cmp = cp_tree_equal (TREE_PURPOSE (t1), TREE_PURPOSE (t2));
2401 cmp = cp_tree_equal (TREE_VALUE (t1), TREE_VALUE (t2));
2404 return cp_tree_equal (TREE_CHAIN (t1), TREE_CHAIN (t2));
2407 return cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
2410 cmp = cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
2413 return simple_cst_list_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
2416 /* Special case: if either target is an unallocated VAR_DECL,
2417 it means that it's going to be unified with whatever the
2418 TARGET_EXPR is really supposed to initialize, so treat it
2419 as being equivalent to anything. */
2420 if ((TREE_CODE (TREE_OPERAND (t1, 0)) == VAR_DECL
2421 && DECL_NAME (TREE_OPERAND (t1, 0)) == NULL_TREE
2422 && DECL_RTL (TREE_OPERAND (t1, 0)) == 0)
2423 || (TREE_CODE (TREE_OPERAND (t2, 0)) == VAR_DECL
2424 && DECL_NAME (TREE_OPERAND (t2, 0)) == NULL_TREE
2425 && DECL_RTL (TREE_OPERAND (t2, 0)) == 0))
2428 cmp = cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
2431 return cp_tree_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
2433 case WITH_CLEANUP_EXPR:
2434 cmp = cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
2437 return cp_tree_equal (TREE_OPERAND (t1, 2), TREE_OPERAND (t1, 2));
2440 if (TREE_OPERAND (t1, 1) == TREE_OPERAND (t2, 1))
2441 return cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
2450 case TEMPLATE_PARM_INDEX:
2451 return TEMPLATE_PARM_IDX (t1) == TEMPLATE_PARM_IDX (t2)
2452 && TEMPLATE_PARM_LEVEL (t1) == TEMPLATE_PARM_LEVEL (t2);
2456 if (TREE_CODE (TREE_OPERAND (t1, 0)) != TREE_CODE (TREE_OPERAND (t2, 0)))
2458 if (TREE_CODE_CLASS (TREE_CODE (TREE_OPERAND (t1, 0))) == 't')
2459 return comptypes (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0), 1);
2463 /* Two pointer-to-members are the same if they point to the same
2464 field or function in the same class. */
2465 return (PTRMEM_CST_MEMBER (t1) == PTRMEM_CST_MEMBER (t2)
2466 && comptypes (PTRMEM_CST_CLASS (t1), PTRMEM_CST_CLASS (t2),
2473 switch (TREE_CODE_CLASS (code1))
2483 for (i=0; i<tree_code_length[(int) code1]; ++i)
2485 cmp = cp_tree_equal (TREE_OPERAND (t1, i), TREE_OPERAND (t2, i));
2495 /* Similar to make_tree_vec, but build on a temporary obstack. */
2502 register struct obstack *ambient_obstack = current_obstack;
2503 current_obstack = expression_obstack;
2504 node = make_tree_vec (len);
2505 current_obstack = ambient_obstack;
2509 /* Build a wrapper around some pointer PTR so we can use it as a tree. */
2512 build_ptr_wrapper (ptr)
2515 tree t = make_node (WRAPPER);
2516 WRAPPER_PTR (t) = ptr;
2520 /* Same, but on the expression_obstack. */
2523 build_expr_ptr_wrapper (ptr)
2527 push_expression_obstack ();
2528 t = build_ptr_wrapper (ptr);
2533 /* Build a wrapper around some integer I so we can use it as a tree. */
2536 build_int_wrapper (i)
2539 tree t = make_node (WRAPPER);
2540 WRAPPER_INT (t) = i;
2545 build_srcloc (file, line)
2551 /* Make sure that we put these on the permanent obstack; up in
2552 add_pending_template, we pass this return value into perm_tree_cons,
2553 which also puts it on the permanent_obstack. However, this wasn't
2554 explicitly doing the same. */
2555 register struct obstack *ambient_obstack = current_obstack;
2556 current_obstack = &permanent_obstack;
2558 t = make_node (SRCLOC);
2559 SRCLOC_FILE (t) = file;
2560 SRCLOC_LINE (t) = line;
2562 current_obstack = ambient_obstack;
2568 build_srcloc_here ()
2570 return build_srcloc (input_filename, lineno);
2574 push_expression_obstack ()
2576 push_obstacks_nochange ();
2577 current_obstack = expression_obstack;
2580 /* The type of ARG when used as an lvalue. */
2586 tree type = TREE_TYPE (arg);
2587 if (TREE_CODE (arg) == OVERLOAD)
2588 type = unknown_type_node;
2592 /* The type of ARG for printing error messages; denote lvalues with
2599 tree type = TREE_TYPE (arg);
2600 if (TREE_CODE (type) == ARRAY_TYPE)
2602 else if (real_lvalue_p (arg))
2603 type = build_reference_type (lvalue_type (arg));
2604 else if (IS_AGGR_TYPE (type))
2605 type = lvalue_type (arg);
2610 /* Does FUNCTION use a variable-length argument list? */
2613 varargs_function_p (function)
2616 tree parm = TYPE_ARG_TYPES (TREE_TYPE (function));
2617 for (; parm; parm = TREE_CHAIN (parm))
2618 if (TREE_VALUE (parm) == void_type_node)
2623 /* Returns 1 if decl is a member of a class. */
2629 tree ctx = DECL_CONTEXT (decl);
2630 return (ctx && TREE_CODE_CLASS (TREE_CODE (ctx)) == 't');
2633 /* Create a placeholder for member access where we don't actually have an
2634 object that the access is against. */
2637 build_dummy_object (type)
2640 tree decl = build1 (NOP_EXPR, build_pointer_type (type), error_mark_node);
2641 return build_indirect_ref (decl, NULL_PTR);
2644 /* We've gotten a reference to a member of TYPE. Return *this if appropriate,
2645 or a dummy object otherwise. If BINFOP is non-0, it is filled with the
2646 binfo path from current_class_type to TYPE, or 0. */
2649 maybe_dummy_object (type, binfop)
2655 if (current_class_type
2656 && get_base_distance (type, current_class_type, 0, binfop) != -1)
2657 context = current_class_type;
2660 /* Reference from a nested class member function. */
2663 *binfop = TYPE_BINFO (type);
2666 if (current_class_ref && context == current_class_type)
2667 decl = current_class_ref;
2669 decl = build_dummy_object (context);
2674 /* Returns 1 if OB is a placeholder object, or a pointer to one. */
2677 is_dummy_object (ob)
2680 if (TREE_CODE (ob) == INDIRECT_REF)
2681 ob = TREE_OPERAND (ob, 0);
2682 return (TREE_CODE (ob) == NOP_EXPR
2683 && TREE_OPERAND (ob, 0) == error_mark_node);