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 void unshare_base_binfos PROTO((tree));
43 static int avoid_overlap PROTO((tree, tree));
45 #define CEIL(x,y) (((x) + (y) - 1) / (y))
47 /* Return nonzero if REF is an lvalue valid for this language.
48 Lvalues can be assigned, unless they have TREE_READONLY.
49 Lvalues can have their address taken, unless they have DECL_REGISTER. */
55 if (! language_lvalue_valid (ref))
58 if (TREE_CODE (TREE_TYPE (ref)) == REFERENCE_TYPE)
61 if (ref == current_class_ptr && flag_this_is_variable <= 0)
64 switch (TREE_CODE (ref))
66 /* preincrements and predecrements are valid lvals, provided
67 what they refer to are valid lvals. */
68 case PREINCREMENT_EXPR:
69 case PREDECREMENT_EXPR:
74 case WITH_CLEANUP_EXPR:
75 return real_lvalue_p (TREE_OPERAND (ref, 0));
81 if (TREE_READONLY (ref) && ! TREE_STATIC (ref)
82 && DECL_LANG_SPECIFIC (ref)
83 && 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 real_lvalue_p (TREE_OPERAND (ref, 0))
102 && real_lvalue_p (TREE_OPERAND (ref, 1));
106 return (real_lvalue_p (TREE_OPERAND (ref, 1))
107 && real_lvalue_p (TREE_OPERAND (ref, 2)));
113 return real_lvalue_p (TREE_OPERAND (ref, 1));
117 return (real_lvalue_p (TREE_OPERAND (ref, 0))
118 && real_lvalue_p (TREE_OPERAND (ref, 1)));
127 /* This differs from real_lvalue_p in that class rvalues are considered
133 if (! language_lvalue_valid (ref))
136 if (TREE_CODE (TREE_TYPE (ref)) == REFERENCE_TYPE)
139 if (ref == current_class_ptr && flag_this_is_variable <= 0)
142 switch (TREE_CODE (ref))
144 /* preincrements and predecrements are valid lvals, provided
145 what they refer to are valid lvals. */
146 case PREINCREMENT_EXPR:
147 case PREDECREMENT_EXPR:
154 case WITH_CLEANUP_EXPR:
155 return lvalue_p (TREE_OPERAND (ref, 0));
161 if (TREE_READONLY (ref) && ! TREE_STATIC (ref)
162 && DECL_LANG_SPECIFIC (ref)
163 && DECL_IN_AGGR_P (ref))
170 if (TREE_CODE (TREE_TYPE (ref)) != FUNCTION_TYPE
171 && TREE_CODE (TREE_TYPE (ref)) != METHOD_TYPE)
179 if (IS_AGGR_TYPE (TREE_TYPE (ref)))
183 /* A currently unresolved scope ref. */
185 my_friendly_abort (103);
187 if (TREE_CODE (TREE_OPERAND (ref, 1)) == FUNCTION_DECL)
189 return lvalue_p (TREE_OPERAND (ref, 0))
190 && lvalue_p (TREE_OPERAND (ref, 1));
194 return (lvalue_p (TREE_OPERAND (ref, 1))
195 && lvalue_p (TREE_OPERAND (ref, 2)));
201 return lvalue_p (TREE_OPERAND (ref, 1));
205 return (lvalue_p (TREE_OPERAND (ref, 0))
206 && lvalue_p (TREE_OPERAND (ref, 1)));
215 /* Return nonzero if REF is an lvalue valid for this language;
216 otherwise, print an error message and return zero. */
219 lvalue_or_else (ref, string)
223 int win = lvalue_p (ref);
225 error ("non-lvalue in %s", string);
229 /* INIT is a CALL_EXPR which needs info about its target.
230 TYPE is the type that this initialization should appear to have.
232 Build an encapsulation of the initialization to perform
233 and return it so that it can be processed by language-independent
234 and language-specific expression expanders. */
237 build_cplus_new (type, init)
244 if (TREE_CODE (init) != CALL_EXPR && TREE_CODE (init) != AGGR_INIT_EXPR)
247 slot = build (VAR_DECL, type);
248 DECL_ARTIFICIAL (slot) = 1;
249 layout_decl (slot, 0);
250 rval = build (AGGR_INIT_EXPR, type,
251 TREE_OPERAND (init, 0), TREE_OPERAND (init, 1), slot);
252 TREE_SIDE_EFFECTS (rval) = 1;
253 rval = build (TARGET_EXPR, type, slot, rval, NULL_TREE, NULL_TREE);
254 TREE_SIDE_EFFECTS (rval) = 1;
259 /* Encapsulate the expression INIT in a TARGET_EXPR. */
262 get_target_expr (init)
268 slot = build (VAR_DECL, TREE_TYPE (init));
269 DECL_ARTIFICIAL (slot) = 1;
270 layout_decl (slot, 0);
271 rval = build (TARGET_EXPR, TREE_TYPE (init), slot, init,
272 NULL_TREE, NULL_TREE);
273 TREE_SIDE_EFFECTS (rval) = 1;
278 /* Recursively search EXP for CALL_EXPRs that need cleanups and replace
279 these CALL_EXPRs with tree nodes that will perform the cleanups. */
282 break_out_cleanups (exp)
287 if (TREE_CODE (tmp) == CALL_EXPR
288 && TYPE_NEEDS_DESTRUCTOR (TREE_TYPE (tmp)))
289 return build_cplus_new (TREE_TYPE (tmp), tmp);
291 while (TREE_CODE (tmp) == NOP_EXPR
292 || TREE_CODE (tmp) == CONVERT_EXPR
293 || TREE_CODE (tmp) == NON_LVALUE_EXPR)
295 if (TREE_CODE (TREE_OPERAND (tmp, 0)) == CALL_EXPR
296 && TYPE_NEEDS_DESTRUCTOR (TREE_TYPE (TREE_OPERAND (tmp, 0))))
298 TREE_OPERAND (tmp, 0)
299 = build_cplus_new (TREE_TYPE (TREE_OPERAND (tmp, 0)),
300 TREE_OPERAND (tmp, 0));
304 tmp = TREE_OPERAND (tmp, 0);
309 /* Recursively perform a preorder search EXP for CALL_EXPRs, making
310 copies where they are found. Returns a deep copy all nodes transitively
311 containing CALL_EXPRs. */
314 break_out_calls (exp)
317 register tree t1, t2 = NULL_TREE;
318 register enum tree_code code;
319 register int changed = 0;
322 if (exp == NULL_TREE)
325 code = TREE_CODE (exp);
327 if (code == CALL_EXPR)
328 return copy_node (exp);
330 /* Don't try and defeat a save_expr, as it should only be done once. */
331 if (code == SAVE_EXPR)
334 switch (TREE_CODE_CLASS (code))
339 case 'c': /* a constant */
340 case 't': /* a type node */
341 case 'x': /* something random, like an identifier or an ERROR_MARK. */
344 case 'd': /* A decl node */
345 #if 0 /* This is bogus. jason 9/21/94 */
347 t1 = break_out_calls (DECL_INITIAL (exp));
348 if (t1 != DECL_INITIAL (exp))
350 exp = copy_node (exp);
351 DECL_INITIAL (exp) = t1;
356 case 'b': /* A block node */
358 /* Don't know how to handle these correctly yet. Must do a
359 break_out_calls on all DECL_INITIAL values for local variables,
360 and also break_out_calls on all sub-blocks and sub-statements. */
365 case 'e': /* an expression */
366 case 'r': /* a reference */
367 case 's': /* an expression with side effects */
368 for (i = tree_code_length[(int) code] - 1; i >= 0; i--)
370 t1 = break_out_calls (TREE_OPERAND (exp, i));
371 if (t1 != TREE_OPERAND (exp, i))
373 exp = copy_node (exp);
374 TREE_OPERAND (exp, i) = t1;
379 case '<': /* a comparison expression */
380 case '2': /* a binary arithmetic expression */
381 t2 = break_out_calls (TREE_OPERAND (exp, 1));
382 if (t2 != TREE_OPERAND (exp, 1))
384 case '1': /* a unary arithmetic expression */
385 t1 = break_out_calls (TREE_OPERAND (exp, 0));
386 if (t1 != TREE_OPERAND (exp, 0))
390 if (tree_code_length[(int) code] == 1)
391 return build1 (code, TREE_TYPE (exp), t1);
393 return build (code, TREE_TYPE (exp), t1, t2);
400 extern struct obstack *current_obstack;
401 extern struct obstack permanent_obstack, class_obstack;
402 extern struct obstack *saveable_obstack;
403 extern struct obstack *expression_obstack;
405 /* Here is how primitive or already-canonicalized types' hash
406 codes are made. MUST BE CONSISTENT WITH tree.c !!! */
407 #define TYPE_HASH(TYPE) ((HOST_WIDE_INT) (TYPE) & 0777777)
409 /* Construct, lay out and return the type of methods belonging to class
410 BASETYPE and whose arguments are described by ARGTYPES and whose values
411 are described by RETTYPE. If each type exists already, reuse it. */
414 build_cplus_method_type (basetype, rettype, argtypes)
415 tree basetype, rettype, argtypes;
421 /* Make a node of the sort we want. */
422 t = make_node (METHOD_TYPE);
424 TYPE_METHOD_BASETYPE (t) = TYPE_MAIN_VARIANT (basetype);
425 TREE_TYPE (t) = rettype;
426 if (IS_SIGNATURE (basetype))
427 ptype = build_signature_pointer_type (TYPE_MAIN_VARIANT (basetype),
428 TYPE_READONLY (basetype),
429 TYPE_VOLATILE (basetype));
431 ptype = build_pointer_type (basetype);
433 /* The actual arglist for this function includes a "hidden" argument
434 which is "this". Put it into the list of argument types. */
436 argtypes = tree_cons (NULL_TREE, ptype, argtypes);
437 TYPE_ARG_TYPES (t) = argtypes;
438 TREE_SIDE_EFFECTS (argtypes) = 1; /* Mark first argtype as "artificial". */
440 /* If we already have such a type, use the old one and free this one.
441 Note that it also frees up the above cons cell if found. */
442 hashcode = TYPE_HASH (basetype) + TYPE_HASH (rettype) + type_hash_list (argtypes);
443 t = type_hash_canon (hashcode, t);
445 if (TYPE_SIZE (t) == 0)
452 build_cplus_array_type_1 (elt_type, index_type)
456 register struct obstack *ambient_obstack = current_obstack;
457 register struct obstack *ambient_saveable_obstack = saveable_obstack;
460 /* We need a new one. If both ELT_TYPE and INDEX_TYPE are permanent,
461 make this permanent too. */
462 if (TREE_PERMANENT (elt_type)
463 && (index_type == 0 || TREE_PERMANENT (index_type)))
465 current_obstack = &permanent_obstack;
466 saveable_obstack = &permanent_obstack;
469 if (processing_template_decl
470 || uses_template_parms (index_type))
472 t = make_node (ARRAY_TYPE);
473 TREE_TYPE (t) = elt_type;
474 TYPE_DOMAIN (t) = index_type;
477 t = build_array_type (elt_type, index_type);
479 /* Push these needs up so that initialization takes place
481 TYPE_NEEDS_CONSTRUCTING (t) = TYPE_NEEDS_CONSTRUCTING (TYPE_MAIN_VARIANT (elt_type));
482 TYPE_NEEDS_DESTRUCTOR (t) = TYPE_NEEDS_DESTRUCTOR (TYPE_MAIN_VARIANT (elt_type));
483 current_obstack = ambient_obstack;
484 saveable_obstack = ambient_saveable_obstack;
489 build_cplus_array_type (elt_type, index_type)
494 int constp = TYPE_READONLY (elt_type);
495 int volatilep = TYPE_VOLATILE (elt_type);
496 elt_type = TYPE_MAIN_VARIANT (elt_type);
498 t = build_cplus_array_type_1 (elt_type, index_type);
500 if (constp || volatilep)
501 t = cp_build_type_variant (t, constp, volatilep);
506 /* Make a variant type in the proper way for C/C++, propagating qualifiers
507 down to the element type of an array. */
510 cp_build_type_variant (type, constp, volatilep)
512 int constp, volatilep;
514 if (type == error_mark_node)
517 if (TREE_CODE (type) == ARRAY_TYPE)
519 tree real_main_variant = TYPE_MAIN_VARIANT (type);
521 push_obstacks (TYPE_OBSTACK (real_main_variant),
522 TYPE_OBSTACK (real_main_variant));
523 type = build_cplus_array_type_1 (cp_build_type_variant
524 (TREE_TYPE (type), constp, volatilep),
527 /* TYPE must be on same obstack as REAL_MAIN_VARIANT. If not,
528 make a copy. (TYPE might have come from the hash table and
529 REAL_MAIN_VARIANT might be in some function's obstack.) */
531 if (TYPE_OBSTACK (type) != TYPE_OBSTACK (real_main_variant))
533 type = copy_node (type);
534 TYPE_POINTER_TO (type) = TYPE_REFERENCE_TO (type) = 0;
537 TYPE_MAIN_VARIANT (type) = real_main_variant;
541 return build_type_variant (type, constp, volatilep);
544 /* Returns the canonical version of TYPE. In other words, if TYPE is
545 a typedef, returns the underlying type. The cv-qualification of
546 the type returned matches the type input; they will always be
550 canonical_type_variant (t)
553 int constp, volatilep;
554 if (TREE_CODE (t) == ARRAY_TYPE)
556 constp = TYPE_READONLY (TREE_TYPE (t));
557 volatilep = TYPE_VOLATILE (TREE_TYPE (t));
561 constp = TYPE_READONLY (t);
562 volatilep = TYPE_VOLATILE (t);
564 return cp_build_type_variant (TYPE_MAIN_VARIANT (t), constp, volatilep);
567 /* Add OFFSET to all base types of T.
569 OFFSET, which is a type offset, is number of bytes.
571 Note that we don't have to worry about having two paths to the
572 same base type, since this type owns its association list. */
575 propagate_binfo_offsets (binfo, offset)
579 tree binfos = BINFO_BASETYPES (binfo);
580 int i, n_baselinks = binfos ? TREE_VEC_LENGTH (binfos) : 0;
582 for (i = 0; i < n_baselinks; /* note increment is done in the loop. */)
584 tree base_binfo = TREE_VEC_ELT (binfos, i);
586 if (TREE_VIA_VIRTUAL (base_binfo))
589 unshare_base_binfos (base_binfo);
594 tree delta = NULL_TREE;
596 for (j = i+1; j < n_baselinks; j++)
597 if (! TREE_VIA_VIRTUAL (TREE_VEC_ELT (binfos, j)))
599 /* The next basetype offset must take into account the space
600 between the classes, not just the size of each class. */
601 delta = size_binop (MINUS_EXPR,
602 BINFO_OFFSET (TREE_VEC_ELT (binfos, j)),
603 BINFO_OFFSET (base_binfo));
608 if (BINFO_OFFSET_ZEROP (base_binfo))
609 BINFO_OFFSET (base_binfo) = offset;
611 BINFO_OFFSET (base_binfo)
612 = size_binop (PLUS_EXPR, BINFO_OFFSET (base_binfo), offset);
614 BINFO_OFFSET (base_binfo) = offset;
617 unshare_base_binfos (base_binfo);
619 /* Go to our next class that counts for offset propagation. */
622 offset = size_binop (PLUS_EXPR, offset, delta);
627 /* Makes new binfos for the indirect bases under BASE_BINFO, and updates
628 BINFO_OFFSET for them and their bases. */
631 unshare_base_binfos (base_binfo)
634 if (BINFO_BASETYPES (base_binfo))
636 tree base_binfos = BINFO_BASETYPES (base_binfo);
637 tree chain = NULL_TREE;
640 /* Now unshare the structure beneath BASE_BINFO. */
641 for (j = TREE_VEC_LENGTH (base_binfos)-1;
644 tree base_base_binfo = TREE_VEC_ELT (base_binfos, j);
645 TREE_VEC_ELT (base_binfos, j)
646 = make_binfo (BINFO_OFFSET (base_base_binfo),
648 BINFO_VTABLE (base_base_binfo),
649 BINFO_VIRTUALS (base_base_binfo),
651 chain = TREE_VEC_ELT (base_binfos, j);
652 TREE_VIA_PUBLIC (chain) = TREE_VIA_PUBLIC (base_base_binfo);
653 TREE_VIA_PROTECTED (chain) = TREE_VIA_PROTECTED (base_base_binfo);
654 TREE_VIA_VIRTUAL (chain) = TREE_VIA_VIRTUAL (base_base_binfo);
655 BINFO_INHERITANCE_CHAIN (chain) = base_binfo;
658 /* Completely unshare potentially shared data, and
659 update what is ours. */
660 propagate_binfo_offsets (base_binfo, BINFO_OFFSET (base_binfo));
664 /* Finish the work of layout_record, now taking virtual bases into account.
665 Also compute the actual offsets that our base classes will have.
666 This must be performed after the fields are laid out, since virtual
667 baseclasses must lay down at the end of the record.
669 Returns the maximum number of virtual functions any of the
670 baseclasses provide. */
673 layout_basetypes (rec, max)
677 tree binfos = TYPE_BINFO_BASETYPES (rec);
678 int i, n_baseclasses = binfos ? TREE_VEC_LENGTH (binfos) : 0;
680 /* Get all the virtual base types that this type uses.
681 The TREE_VALUE slot holds the virtual baseclass type. */
682 tree vbase_types = get_vbase_types (rec);
684 unsigned int record_align = MAX (BITS_PER_UNIT, TYPE_ALIGN (rec));
685 unsigned int desired_align;
687 /* Record size so far is CONST_SIZE bits, where CONST_SIZE is an integer. */
688 register unsigned int const_size = 0;
689 unsigned int nonvirtual_const_size;
691 #ifdef STRUCTURE_SIZE_BOUNDARY
692 /* Packed structures don't need to have minimum size. */
693 if (! TYPE_PACKED (rec))
694 record_align = MAX (record_align, STRUCTURE_SIZE_BOUNDARY);
697 CLASSTYPE_VBASECLASSES (rec) = vbase_types;
699 my_friendly_assert (TREE_CODE (TYPE_SIZE (rec)) == INTEGER_CST, 19970302);
700 const_size = TREE_INT_CST_LOW (TYPE_SIZE (rec));
702 nonvirtual_const_size = const_size;
706 tree basetype = BINFO_TYPE (vbase_types);
709 desired_align = TYPE_ALIGN (basetype);
710 record_align = MAX (record_align, desired_align);
713 offset = integer_zero_node;
716 /* Give each virtual base type the alignment it wants. */
717 const_size = CEIL (const_size, desired_align) * desired_align;
718 offset = size_int (CEIL (const_size, BITS_PER_UNIT));
721 if (CLASSTYPE_VSIZE (basetype) > max)
722 max = CLASSTYPE_VSIZE (basetype);
723 BINFO_OFFSET (vbase_types) = offset;
725 /* Every virtual baseclass takes a least a UNIT, so that we can
726 take it's address and get something different for each base. */
727 const_size += MAX (BITS_PER_UNIT,
728 TREE_INT_CST_LOW (CLASSTYPE_SIZE (basetype)));
730 vbase_types = TREE_CHAIN (vbase_types);
735 /* Because a virtual base might take a single byte above,
736 we have to re-adjust the total size to make sure it is
737 a multiple of the alignment. */
738 /* Give the whole object the alignment it wants. */
739 const_size = CEIL (const_size, record_align) * record_align;
742 /* Set the alignment in the complete type. We don't set CLASSTYPE_ALIGN
743 here, as that is for this class, without any virtual base classes. */
744 TYPE_ALIGN (rec) = record_align;
745 if (const_size != nonvirtual_const_size)
747 TYPE_SIZE (rec) = size_int (const_size);
748 TYPE_SIZE_UNIT (rec) = size_binop (FLOOR_DIV_EXPR, TYPE_SIZE (rec),
749 size_int (BITS_PER_UNIT));
752 /* Now propagate offset information throughout the lattice. */
753 for (i = 0; i < n_baseclasses; i++)
755 register tree base_binfo = TREE_VEC_ELT (binfos, i);
756 register tree basetype = BINFO_TYPE (base_binfo);
757 tree field = TYPE_FIELDS (rec);
759 if (TREE_VIA_VIRTUAL (base_binfo))
760 unshare_base_binfos (base_binfo);
763 my_friendly_assert (TREE_TYPE (field) == basetype, 23897);
764 BINFO_OFFSET (base_binfo)
765 = size_int (CEIL (TREE_INT_CST_LOW (DECL_FIELD_BITPOS (field)),
767 unshare_base_binfos (base_binfo);
768 TYPE_FIELDS (rec) = TREE_CHAIN (field);
772 for (vbase_types = CLASSTYPE_VBASECLASSES (rec); vbase_types;
773 vbase_types = TREE_CHAIN (vbase_types))
775 BINFO_INHERITANCE_CHAIN (vbase_types) = TYPE_BINFO (rec);
776 unshare_base_binfos (vbase_types);
782 /* If the empty base field in DECL overlaps with a base of the same type in
783 NEWDECL, which is either another base field or the first data field of
784 the class, pad the base just before NEWDECL and return 1. Otherwise,
788 avoid_overlap (decl, newdecl)
793 if (newdecl == NULL_TREE
794 || ! types_overlap_p (TREE_TYPE (decl), TREE_TYPE (newdecl)))
797 for (field = decl; TREE_CHAIN (field) && TREE_CHAIN (field) != newdecl;
798 field = TREE_CHAIN (field))
801 DECL_SIZE (field) = integer_one_node;
806 /* Returns a list of fields to stand in for the base class subobjects
807 of REC. These fields are later removed by layout_basetypes. */
810 build_base_fields (rec)
813 /* Chain to hold all the new FIELD_DECLs which stand in for base class
815 tree base_decls = NULL_TREE;
816 tree binfos = TYPE_BINFO_BASETYPES (rec);
817 int n_baseclasses = binfos ? TREE_VEC_LENGTH (binfos) : 0;
819 int i, saw_empty = 0;
820 unsigned int base_align = 0;
822 for (i = 0; i < n_baseclasses; ++i)
824 register tree base_binfo = TREE_VEC_ELT (binfos, i);
825 register tree basetype = BINFO_TYPE (base_binfo);
827 if (TYPE_SIZE (basetype) == 0)
828 /* This error is now reported in xref_tag, thus giving better
829 location information. */
832 if (TREE_VIA_VIRTUAL (base_binfo))
835 decl = build_lang_field_decl (FIELD_DECL, NULL_TREE, basetype);
836 DECL_ARTIFICIAL (decl) = 1;
837 DECL_FIELD_CONTEXT (decl) = DECL_CLASS_CONTEXT (decl) = rec;
838 DECL_SIZE (decl) = CLASSTYPE_SIZE (basetype);
839 DECL_ALIGN (decl) = CLASSTYPE_ALIGN (basetype);
840 TREE_CHAIN (decl) = base_decls;
845 /* Brain damage for backwards compatibility. For no good reason,
846 the old layout_basetypes made every base at least as large as
847 the alignment for the bases up to that point, gratuitously
848 wasting space. So we do the same thing here. */
849 base_align = MAX (base_align, DECL_ALIGN (decl));
851 = size_int (MAX (TREE_INT_CST_LOW (DECL_SIZE (decl)),
854 else if (DECL_SIZE (decl) == integer_zero_node)
858 /* Reverse the list of fields so we allocate the bases in the proper
860 base_decls = nreverse (base_decls);
862 /* In the presence of empty base classes, we run the risk of allocating
863 two objects of the same class on top of one another. Avoid that. */
864 if (flag_new_abi && saw_empty)
865 for (decl = base_decls; decl; decl = TREE_CHAIN (decl))
867 if (DECL_SIZE (decl) == integer_zero_node)
869 /* First step through the following bases until we find
870 an overlap or a non-empty base. */
871 for (nextdecl = TREE_CHAIN (decl); nextdecl;
872 nextdecl = TREE_CHAIN (nextdecl))
874 if (avoid_overlap (decl, nextdecl)
875 || DECL_SIZE (nextdecl) != integer_zero_node)
879 /* If we're still looking, also check against the first
881 for (nextdecl = TYPE_FIELDS (rec);
882 nextdecl && TREE_CODE (nextdecl) != FIELD_DECL;
883 nextdecl = TREE_CHAIN (nextdecl))
885 avoid_overlap (decl, nextdecl);
893 /* Returns list of virtual base class pointers in a FIELD_DECL chain. */
896 build_vbase_pointer_fields (rec)
899 /* Chain to hold all the new FIELD_DECLs which point at virtual
901 tree vbase_decls = NULL_TREE;
902 tree binfos = TYPE_BINFO_BASETYPES (rec);
903 int n_baseclasses = binfos ? TREE_VEC_LENGTH (binfos) : 0;
907 /* Handle basetypes almost like fields, but record their
908 offsets differently. */
910 for (i = 0; i < n_baseclasses; i++)
912 register tree base_binfo = TREE_VEC_ELT (binfos, i);
913 register tree basetype = BINFO_TYPE (base_binfo);
915 if (TYPE_SIZE (basetype) == 0)
916 /* This error is now reported in xref_tag, thus giving better
917 location information. */
920 /* All basetypes are recorded in the association list of the
923 if (TREE_VIA_VIRTUAL (base_binfo))
926 char *name = (char *)alloca (TYPE_NAME_LENGTH (basetype)
927 + sizeof (VBASE_NAME) + 1);
929 /* The offset for a virtual base class is only used in computing
930 virtual function tables and for initializing virtual base
931 pointers. It is built once `get_vbase_types' is called. */
933 /* If this basetype can come from another vbase pointer
934 without an additional indirection, we will share
935 that pointer. If an indirection is involved, we
936 make our own pointer. */
937 for (j = 0; j < n_baseclasses; j++)
939 tree other_base_binfo = TREE_VEC_ELT (binfos, j);
940 if (! TREE_VIA_VIRTUAL (other_base_binfo)
941 && binfo_member (basetype,
942 CLASSTYPE_VBASECLASSES (BINFO_TYPE
947 sprintf (name, VBASE_NAME_FORMAT, TYPE_NAME_STRING (basetype));
948 decl = build_lang_field_decl (FIELD_DECL, get_identifier (name),
949 build_pointer_type (basetype));
950 /* If you change any of the below, take a look at all the
951 other VFIELD_BASEs and VTABLE_BASEs in the code, and change
953 DECL_ASSEMBLER_NAME (decl) = get_identifier (VTABLE_BASE);
954 DECL_VIRTUAL_P (decl) = 1;
955 DECL_ARTIFICIAL (decl) = 1;
956 DECL_FIELD_CONTEXT (decl) = rec;
957 DECL_CLASS_CONTEXT (decl) = rec;
958 DECL_FCONTEXT (decl) = basetype;
959 DECL_SAVED_INSNS (decl) = NULL_RTX;
960 DECL_FIELD_SIZE (decl) = 0;
961 DECL_ALIGN (decl) = TYPE_ALIGN (ptr_type_node);
962 TREE_CHAIN (decl) = vbase_decls;
963 BINFO_VPTR_FIELD (base_binfo) = decl;
967 /* The space this decl occupies has already been accounted for. */
975 /* Hashing of lists so that we don't make duplicates.
976 The entry point is `list_hash_canon'. */
978 /* Each hash table slot is a bucket containing a chain
979 of these structures. */
983 struct list_hash *next; /* Next structure in the bucket. */
984 int hashcode; /* Hash code of this list. */
985 tree list; /* The list recorded here. */
988 /* Now here is the hash table. When recording a list, it is added
989 to the slot whose index is the hash code mod the table size.
990 Note that the hash table is used for several kinds of lists.
991 While all these live in the same table, they are completely independent,
992 and the hash code is computed differently for each of these. */
994 #define TYPE_HASH_SIZE 59
995 static struct list_hash *list_hash_table[TYPE_HASH_SIZE];
997 /* Compute a hash code for a list (chain of TREE_LIST nodes
998 with goodies in the TREE_PURPOSE, TREE_VALUE, and bits of the
999 TREE_COMMON slots), by adding the hash codes of the individual entries. */
1002 list_hash (purpose, value, chain)
1003 tree purpose, value, chain;
1005 register int hashcode = 0;
1008 hashcode += TYPE_HASH (chain);
1011 hashcode += TYPE_HASH (value);
1015 hashcode += TYPE_HASH (purpose);
1021 /* Look in the type hash table for a type isomorphic to TYPE.
1022 If one is found, return it. Otherwise return 0. */
1025 list_hash_lookup (hashcode, via_public, via_protected, via_virtual,
1026 purpose, value, chain)
1027 int hashcode, via_public, via_virtual, via_protected;
1028 tree purpose, value, chain;
1030 register struct list_hash *h;
1032 for (h = list_hash_table[hashcode % TYPE_HASH_SIZE]; h; h = h->next)
1033 if (h->hashcode == hashcode
1034 && TREE_VIA_VIRTUAL (h->list) == via_virtual
1035 && TREE_VIA_PUBLIC (h->list) == via_public
1036 && TREE_VIA_PROTECTED (h->list) == via_protected
1037 && TREE_PURPOSE (h->list) == purpose
1038 && TREE_VALUE (h->list) == value
1039 && TREE_CHAIN (h->list) == chain)
1044 /* Add an entry to the list-hash-table
1045 for a list TYPE whose hash code is HASHCODE. */
1048 list_hash_add (hashcode, list)
1052 register struct list_hash *h;
1054 h = (struct list_hash *) obstack_alloc (&class_obstack, sizeof (struct list_hash));
1055 h->hashcode = hashcode;
1057 h->next = list_hash_table[hashcode % TYPE_HASH_SIZE];
1058 list_hash_table[hashcode % TYPE_HASH_SIZE] = h;
1061 /* Given TYPE, and HASHCODE its hash code, return the canonical
1062 object for an identical list if one already exists.
1063 Otherwise, return TYPE, and record it as the canonical object
1064 if it is a permanent object.
1066 To use this function, first create a list of the sort you want.
1067 Then compute its hash code from the fields of the list that
1068 make it different from other similar lists.
1069 Then call this function and use the value.
1070 This function frees the list you pass in if it is a duplicate. */
1072 /* Set to 1 to debug without canonicalization. Never set by program. */
1074 static int debug_no_list_hash = 0;
1077 hash_tree_cons (via_public, via_virtual, via_protected, purpose, value, chain)
1078 int via_public, via_virtual, via_protected;
1079 tree purpose, value, chain;
1081 struct obstack *ambient_obstack = current_obstack;
1085 if (! debug_no_list_hash)
1087 hashcode = list_hash (purpose, value, chain);
1088 t = list_hash_lookup (hashcode, via_public, via_protected, via_virtual,
1089 purpose, value, chain);
1094 current_obstack = &class_obstack;
1096 t = tree_cons (purpose, value, chain);
1097 TREE_VIA_PUBLIC (t) = via_public;
1098 TREE_VIA_PROTECTED (t) = via_protected;
1099 TREE_VIA_VIRTUAL (t) = via_virtual;
1101 /* If this is a new list, record it for later reuse. */
1102 if (! debug_no_list_hash)
1103 list_hash_add (hashcode, t);
1105 current_obstack = ambient_obstack;
1109 /* Constructor for hashed lists. */
1112 hash_tree_chain (value, chain)
1115 return hash_tree_cons (0, 0, 0, NULL_TREE, value, chain);
1118 /* Similar, but used for concatenating two lists. */
1121 hash_chainon (list1, list2)
1128 if (TREE_CHAIN (list1) == NULL_TREE)
1129 return hash_tree_chain (TREE_VALUE (list1), list2);
1130 return hash_tree_chain (TREE_VALUE (list1),
1131 hash_chainon (TREE_CHAIN (list1), list2));
1135 get_identifier_list (value)
1138 tree list = IDENTIFIER_AS_LIST (value);
1139 if (list != NULL_TREE
1140 && (TREE_CODE (list) != TREE_LIST
1141 || TREE_VALUE (list) != value))
1143 else if (IDENTIFIER_HAS_TYPE_VALUE (value)
1144 && TREE_CODE (IDENTIFIER_TYPE_VALUE (value)) == RECORD_TYPE
1145 && IDENTIFIER_TYPE_VALUE (value)
1146 == TYPE_MAIN_VARIANT (IDENTIFIER_TYPE_VALUE (value)))
1148 tree type = IDENTIFIER_TYPE_VALUE (value);
1150 if (TYPE_PTRMEMFUNC_P (type))
1152 else if (type == current_class_type)
1153 /* Don't mess up the constructor name. */
1154 list = tree_cons (NULL_TREE, value, NULL_TREE);
1157 if (! CLASSTYPE_ID_AS_LIST (type))
1158 CLASSTYPE_ID_AS_LIST (type)
1159 = perm_tree_cons (NULL_TREE, TYPE_IDENTIFIER (type), NULL_TREE);
1160 list = CLASSTYPE_ID_AS_LIST (type);
1167 get_decl_list (value)
1170 tree list = NULL_TREE;
1172 if (TREE_CODE (value) == IDENTIFIER_NODE)
1173 list = get_identifier_list (value);
1174 else if (TREE_CODE (value) == RECORD_TYPE
1175 && TYPE_LANG_SPECIFIC (value)
1176 && value == TYPE_MAIN_VARIANT (value))
1177 list = CLASSTYPE_AS_LIST (value);
1179 if (list != NULL_TREE)
1181 my_friendly_assert (TREE_CHAIN (list) == NULL_TREE, 301);
1185 return build_decl_list (NULL_TREE, value);
1188 /* Build an association between TYPE and some parameters:
1190 OFFSET is the offset added to `this' to convert it to a pointer
1193 BINFO is the base binfo to use, if we are deriving from one. This
1194 is necessary, as we want specialized parent binfos from base
1195 classes, so that the VTABLE_NAMEs of bases are for the most derived
1196 type, instead of the simple type.
1198 VTABLE is the virtual function table with which to initialize
1199 sub-objects of type TYPE.
1201 VIRTUALS are the virtual functions sitting in VTABLE.
1203 CHAIN are more associations we must retain. */
1206 make_binfo (offset, binfo, vtable, virtuals, chain)
1208 tree vtable, virtuals;
1211 tree new_binfo = make_tree_vec (7);
1214 if (TREE_CODE (binfo) == TREE_VEC)
1215 type = BINFO_TYPE (binfo);
1219 binfo = TYPE_BINFO (binfo);
1222 TREE_CHAIN (new_binfo) = chain;
1224 TREE_USED (new_binfo) = TREE_USED (chain);
1226 TREE_TYPE (new_binfo) = TYPE_MAIN_VARIANT (type);
1227 BINFO_OFFSET (new_binfo) = offset;
1228 BINFO_VTABLE (new_binfo) = vtable;
1229 BINFO_VIRTUALS (new_binfo) = virtuals;
1230 BINFO_VPTR_FIELD (new_binfo) = NULL_TREE;
1232 if (binfo && BINFO_BASETYPES (binfo) != NULL_TREE)
1233 BINFO_BASETYPES (new_binfo) = copy_node (BINFO_BASETYPES (binfo));
1237 /* Return the binfo value for ELEM in TYPE. */
1240 binfo_value (elem, type)
1244 if (get_base_distance (elem, type, 0, (tree *)0) == -2)
1245 compiler_error ("base class `%s' ambiguous in binfo_value",
1246 TYPE_NAME_STRING (elem));
1248 return TYPE_BINFO (type);
1249 if (TREE_CODE (elem) == RECORD_TYPE && TYPE_BINFO (elem) == type)
1251 return get_binfo (elem, type, 0);
1258 register tree prev = 0, tmp, next;
1259 for (tmp = path; tmp; tmp = next)
1261 next = BINFO_INHERITANCE_CHAIN (tmp);
1262 BINFO_INHERITANCE_CHAIN (tmp) = prev;
1272 unsigned HOST_WIDE_INT n;
1275 fprintf (stderr, "type \"%s\"; offset = %ld\n",
1276 TYPE_NAME_STRING (BINFO_TYPE (elem)),
1277 (long) TREE_INT_CST_LOW (BINFO_OFFSET (elem)));
1278 fprintf (stderr, "vtable type:\n");
1279 debug_tree (BINFO_TYPE (elem));
1280 if (BINFO_VTABLE (elem))
1281 fprintf (stderr, "vtable decl \"%s\"\n", IDENTIFIER_POINTER (DECL_NAME (BINFO_VTABLE (elem))));
1283 fprintf (stderr, "no vtable decl yet\n");
1284 fprintf (stderr, "virtuals:\n");
1285 virtuals = BINFO_VIRTUALS (elem);
1287 n = skip_rtti_stuff (&virtuals);
1291 tree fndecl = TREE_OPERAND (FNADDR_FROM_VTABLE_ENTRY (TREE_VALUE (virtuals)), 0);
1292 fprintf (stderr, "%s [%ld =? %ld]\n",
1293 IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (fndecl)),
1294 (long) n, (long) TREE_INT_CST_LOW (DECL_VINDEX (fndecl)));
1296 virtuals = TREE_CHAIN (virtuals);
1300 /* Initialize an CPLUS_BINDING node that does not live on an obstack. */
1304 struct tree_binding* node;
1306 static struct tree_binding* source;
1309 extern struct obstack permanent_obstack;
1310 push_obstacks (&permanent_obstack, &permanent_obstack);
1311 source = (struct tree_binding*)make_node (CPLUS_BINDING);
1315 TREE_PERMANENT ((tree)node) = 0;
1324 if (TREE_CODE (t) == FUNCTION_DECL)
1326 else if (TREE_CODE (t) == OVERLOAD)
1328 for (i=0; t; t = OVL_CHAIN (t))
1333 my_friendly_abort (359);
1338 is_overloaded_fn (x)
1341 /* XXX A baselink is also considered an overloaded function.
1342 As is a placeholder from push_class_decls. */
1343 if (TREE_CODE (x) == TREE_LIST)
1345 my_friendly_assert (TREE_CODE (TREE_PURPOSE (x)) == TREE_VEC
1346 || TREE_CODE (TREE_PURPOSE (x)) == IDENTIFIER_NODE,
1350 return (TREE_CODE (x) == FUNCTION_DECL
1351 || TREE_CODE (x) == TEMPLATE_ID_EXPR
1352 || DECL_FUNCTION_TEMPLATE_P (x)
1353 || TREE_CODE (x) == OVERLOAD);
1357 really_overloaded_fn (x)
1360 /* A baselink is also considered an overloaded function.
1361 This might also be an ambiguous class member. */
1362 if (TREE_CODE (x) == TREE_LIST)
1364 return (TREE_CODE (x) == OVERLOAD
1365 && (TREE_CHAIN (x) != NULL_TREE
1366 || DECL_FUNCTION_TEMPLATE_P (OVL_FUNCTION (x))));
1373 my_friendly_assert (is_overloaded_fn (from), 9);
1374 /* A baselink is also considered an overloaded function. */
1375 if (TREE_CODE (from) == TREE_LIST)
1376 from = TREE_VALUE (from);
1377 return OVL_CURRENT (from);
1380 /* Return a new OVL node, concatenating it with the old one. */
1383 ovl_cons (decl, chain)
1387 tree result = make_node (OVERLOAD);
1388 TREE_TYPE (result) = unknown_type_node;
1389 OVL_FUNCTION (result) = decl;
1390 TREE_CHAIN (result) = chain;
1395 /* Same as ovl_cons, but on the scratch_obstack. */
1398 scratch_ovl_cons (value, chain)
1402 register struct obstack *ambient_obstack = current_obstack;
1403 extern struct obstack *expression_obstack;
1404 current_obstack = expression_obstack;
1405 node = ovl_cons (value, chain);
1406 current_obstack = ambient_obstack;
1410 /* Build a new overloaded function. If this is the first one,
1411 just return it; otherwise, ovl_cons the _DECLs */
1414 build_overload (decl, chain)
1420 if (TREE_CODE (chain) != OVERLOAD)
1421 chain = ovl_cons (chain, NULL_TREE);
1422 return ovl_cons (decl, chain);
1425 /* True if fn is in ovl. */
1428 ovl_member (fn, ovl)
1432 if (ovl == NULL_TREE)
1434 if (TREE_CODE (ovl) != OVERLOAD)
1435 return decls_match (ovl, fn);
1436 for (; ovl; ovl = OVL_CHAIN (ovl))
1437 if (decls_match (OVL_FUNCTION (ovl), fn))
1443 is_aggr_type_2 (t1, t2)
1446 if (TREE_CODE (t1) != TREE_CODE (t2))
1448 return IS_AGGR_TYPE (t1) && IS_AGGR_TYPE (t2);
1451 #define PRINT_RING_SIZE 4
1454 lang_printable_name (decl, v)
1458 static tree decl_ring[PRINT_RING_SIZE];
1459 static char *print_ring[PRINT_RING_SIZE];
1460 static int ring_counter;
1463 /* Only cache functions. */
1465 || TREE_CODE (decl) != FUNCTION_DECL
1466 || DECL_LANG_SPECIFIC (decl) == 0)
1467 return lang_decl_name (decl, v);
1469 /* See if this print name is lying around. */
1470 for (i = 0; i < PRINT_RING_SIZE; i++)
1471 if (decl_ring[i] == decl)
1472 /* yes, so return it. */
1473 return print_ring[i];
1475 if (++ring_counter == PRINT_RING_SIZE)
1478 if (current_function_decl != NULL_TREE)
1480 if (decl_ring[ring_counter] == current_function_decl)
1482 if (ring_counter == PRINT_RING_SIZE)
1484 if (decl_ring[ring_counter] == current_function_decl)
1485 my_friendly_abort (106);
1488 if (print_ring[ring_counter])
1489 free (print_ring[ring_counter]);
1491 print_ring[ring_counter] = xstrdup (lang_decl_name (decl, v));
1492 decl_ring[ring_counter] = decl;
1493 return print_ring[ring_counter];
1496 /* Build the FUNCTION_TYPE or METHOD_TYPE which may throw exceptions
1497 listed in RAISES. */
1500 build_exception_variant (type, raises)
1504 tree v = TYPE_MAIN_VARIANT (type);
1505 int constp = TYPE_READONLY (type);
1506 int volatilep = TYPE_VOLATILE (type);
1508 for (; v; v = TYPE_NEXT_VARIANT (v))
1510 if (TYPE_READONLY (v) != constp
1511 || TYPE_VOLATILE (v) != volatilep)
1514 /* @@ This should do set equality, not exact match. */
1515 if (simple_cst_list_equal (TYPE_RAISES_EXCEPTIONS (v), raises))
1516 /* List of exceptions raised matches previously found list.
1518 @@ Nice to free up storage used in consing up the
1519 @@ list of exceptions raised. */
1523 /* Need to build a new variant. */
1524 v = build_type_copy (type);
1526 if (raises && ! TREE_PERMANENT (raises))
1528 push_obstacks_nochange ();
1529 end_temporary_allocation ();
1530 raises = copy_list (raises);
1534 TYPE_RAISES_EXCEPTIONS (v) = raises;
1538 /* Given a TEMPLATE_TEMPLATE_PARM node T, create a new one together with its
1539 lang_specific field and its corresponding TEMPLATE_DECL node */
1542 copy_template_template_parm (t)
1545 tree template = TYPE_NAME (t);
1546 tree t2 = make_lang_type (TEMPLATE_TEMPLATE_PARM);
1547 template = copy_node (template);
1548 copy_lang_decl (template);
1549 TREE_TYPE (template) = t2;
1550 TYPE_NAME (t2) = template;
1551 TYPE_STUB_DECL (t2) = template;
1553 /* No need to copy these */
1554 TYPE_FIELDS (t2) = TYPE_FIELDS (t);
1555 CLASSTYPE_TEMPLATE_INFO (t2) = CLASSTYPE_TEMPLATE_INFO (t);
1559 /* Walk through the tree structure T, applying func. If func ever returns
1560 non-null, return that value. */
1563 search_tree (t, func)
1565 tree (*func) PROTO((tree));
1567 #define TRY(ARG) if (tmp=search_tree (ARG, func), tmp != NULL_TREE) return tmp
1574 if (tmp = func (t), tmp != NULL_TREE)
1577 switch (TREE_CODE (t))
1582 case IDENTIFIER_NODE:
1589 case NAMESPACE_DECL:
1593 TRY (TREE_TYPE (t));
1597 TRY (TREE_TYPE (t));
1598 TRY (TREE_CHAIN (t));
1602 TRY (TREE_PURPOSE (t));
1603 TRY (TREE_VALUE (t));
1604 TRY (TREE_CHAIN (t));
1608 TRY (OVL_FUNCTION (t));
1609 TRY (OVL_CHAIN (t));
1614 int len = TREE_VEC_LENGTH (t);
1618 TRY (TREE_VEC_ELT (t, len));
1630 case AGGR_INIT_EXPR:
1632 TRY (TREE_OPERAND (t, 0));
1633 TRY (TREE_OPERAND (t, 1));
1634 TRY (TREE_OPERAND (t, 2));
1641 case TRUNC_DIV_EXPR:
1642 case TRUNC_MOD_EXPR:
1650 case BIT_ANDTC_EXPR:
1651 case TRUTH_ANDIF_EXPR:
1652 case TRUTH_ORIF_EXPR:
1660 case FLOOR_DIV_EXPR:
1661 case ROUND_DIV_EXPR:
1663 case FLOOR_MOD_EXPR:
1664 case ROUND_MOD_EXPR:
1666 case PREDECREMENT_EXPR:
1667 case PREINCREMENT_EXPR:
1668 case POSTDECREMENT_EXPR:
1669 case POSTINCREMENT_EXPR:
1672 case TRY_CATCH_EXPR:
1673 case WITH_CLEANUP_EXPR:
1675 TRY (TREE_OPERAND (t, 0));
1676 TRY (TREE_OPERAND (t, 1));
1685 case TRUTH_NOT_EXPR:
1687 case NON_LVALUE_EXPR:
1689 case CLEANUP_POINT_EXPR:
1693 TRY (TREE_OPERAND (t, 0));
1698 case REINTERPRET_CAST_EXPR:
1699 case CONST_CAST_EXPR:
1700 case STATIC_CAST_EXPR:
1701 case DYNAMIC_CAST_EXPR:
1708 TRY (TREE_REALPART (t));
1709 TRY (TREE_IMAGPART (t));
1713 TRY (CONSTRUCTOR_ELTS (t));
1716 case TEMPLATE_TEMPLATE_PARM:
1717 case TEMPLATE_PARM_INDEX:
1718 case TEMPLATE_TYPE_PARM:
1734 case REFERENCE_TYPE:
1735 TRY (TREE_TYPE (t));
1740 TRY (TREE_TYPE (t));
1741 TRY (TYPE_ARG_TYPES (t));
1745 TRY (TREE_TYPE (t));
1746 TRY (TYPE_DOMAIN (t));
1750 TRY (TYPE_MAX_VALUE (t));
1754 TRY (TREE_TYPE (t));
1755 TRY (TYPE_OFFSET_BASETYPE (t));
1759 if (TYPE_PTRMEMFUNC_P (t))
1760 TRY (TYPE_PTRMEMFUNC_FN_TYPE (t));
1763 /* This list is incomplete, but should suffice for now.
1764 It is very important that `sorry' not call
1765 `report_error_function'. That could cause an infinite loop. */
1767 sorry ("initializer contains unrecognized tree code");
1768 return error_mark_node;
1777 /* Passed to search_tree. Checks for the use of types with no linkage. */
1780 no_linkage_helper (t)
1784 && (IS_AGGR_TYPE (t) || TREE_CODE (t) == ENUMERAL_TYPE)
1785 && (decl_function_context (TYPE_MAIN_DECL (t))
1786 || ANON_AGGRNAME_P (TYPE_IDENTIFIER (t))))
1791 /* Check if the type T depends on a type with no linkage and if so, return
1795 no_linkage_check (t)
1798 t = search_tree (t, no_linkage_helper);
1799 if (t != error_mark_node)
1805 /* Subroutine of copy_to_permanent
1807 Assuming T is a node build bottom-up, make it all exist on
1808 permanent obstack, if it is not permanent already. */
1813 tree (*func) PROTO((tree));
1820 if (tmp = func (t), tmp != NULL_TREE)
1823 switch (TREE_CODE (t))
1826 return error_mark_node;
1831 /* Rather than aborting, return error_mark_node. This allows us
1832 to report a sensible error message on code like this:
1834 void g() { int i; f<i>(7); }
1838 void g() { const int i = 7; f<i>(7); }
1840 however, we must actually return the constant initializer. */
1841 tmp = decl_constant_value (t);
1843 return mapcar (tmp, func);
1845 return error_mark_node;
1849 tree chain = TREE_CHAIN (t);
1851 TREE_CHAIN (t) = mapcar (chain, func);
1852 TREE_TYPE (t) = mapcar (TREE_TYPE (t), func);
1853 DECL_INITIAL (t) = mapcar (DECL_INITIAL (t), func);
1854 DECL_SIZE (t) = mapcar (DECL_SIZE (t), func);
1860 tree chain = TREE_CHAIN (t);
1862 TREE_PURPOSE (t) = mapcar (TREE_PURPOSE (t), func);
1863 TREE_VALUE (t) = mapcar (TREE_VALUE (t), func);
1864 TREE_CHAIN (t) = mapcar (chain, func);
1870 tree chain = OVL_CHAIN (t);
1872 OVL_FUNCTION (t) = mapcar (OVL_FUNCTION (t), func);
1873 OVL_CHAIN (t) = mapcar (chain, func);
1879 int len = TREE_VEC_LENGTH (t);
1883 TREE_VEC_ELT (t, len) = mapcar (TREE_VEC_ELT (t, len), func);
1890 return copy_node (t);
1894 case AGGR_INIT_EXPR:
1896 TREE_OPERAND (t, 0) = mapcar (TREE_OPERAND (t, 0), func);
1897 TREE_OPERAND (t, 1) = mapcar (TREE_OPERAND (t, 1), func);
1898 TREE_OPERAND (t, 2) = mapcar (TREE_OPERAND (t, 2), func);
1903 TREE_OPERAND (t, 0) = mapcar (TREE_OPERAND (t, 0), func);
1910 case TRUNC_DIV_EXPR:
1911 case TRUNC_MOD_EXPR:
1919 case BIT_ANDTC_EXPR:
1920 case TRUTH_ANDIF_EXPR:
1921 case TRUTH_ORIF_EXPR:
1929 case FLOOR_DIV_EXPR:
1930 case ROUND_DIV_EXPR:
1932 case FLOOR_MOD_EXPR:
1933 case ROUND_MOD_EXPR:
1935 case PREDECREMENT_EXPR:
1936 case PREINCREMENT_EXPR:
1937 case POSTDECREMENT_EXPR:
1938 case POSTINCREMENT_EXPR:
1941 case TRY_CATCH_EXPR:
1942 case WITH_CLEANUP_EXPR:
1944 TREE_OPERAND (t, 0) = mapcar (TREE_OPERAND (t, 0), func);
1945 TREE_OPERAND (t, 1) = mapcar (TREE_OPERAND (t, 1), func);
1950 TREE_TYPE (t) = mapcar (TREE_TYPE (t), func);
1951 TREE_OPERAND (t, 0) = mapcar (TREE_OPERAND (t, 0), func);
1952 TREE_OPERAND (t, 1) = mapcar (TREE_OPERAND (t, 1), func);
1954 /* tree.def says that operand two is RTL, but
1955 build_call_declarator puts trees in there. */
1956 if (TREE_OPERAND (t, 2)
1957 && TREE_CODE (TREE_OPERAND (t, 2)) == TREE_LIST)
1958 TREE_OPERAND (t, 2) = mapcar (TREE_OPERAND (t, 2), func);
1960 TREE_OPERAND (t, 2) = NULL_TREE;
1968 case TRUTH_NOT_EXPR:
1971 case CLEANUP_POINT_EXPR:
1973 TREE_OPERAND (t, 0) = mapcar (TREE_OPERAND (t, 0), func);
1977 tmp = build_pointer_type (mapcar (TREE_TYPE (t), func));
1978 return cp_build_type_variant (tmp, TYPE_READONLY (t), TYPE_VOLATILE (t));
1979 case REFERENCE_TYPE:
1980 tmp = build_reference_type (mapcar (TREE_TYPE (t), func));
1981 return cp_build_type_variant (tmp, TYPE_READONLY (t), TYPE_VOLATILE (t));
1983 tmp = build_function_type (mapcar (TREE_TYPE (t), func),
1984 mapcar (TYPE_ARG_TYPES (t), func));
1985 return cp_build_type_variant (tmp, TYPE_READONLY (t), TYPE_VOLATILE (t));
1987 tmp = build_cplus_array_type (mapcar (TREE_TYPE (t), func),
1988 mapcar (TYPE_DOMAIN (t), func));
1989 return cp_build_type_variant (tmp, TYPE_READONLY (t), TYPE_VOLATILE (t));
1991 tmp = build_index_type (mapcar (TYPE_MAX_VALUE (t), func));
1992 return cp_build_type_variant (tmp, TYPE_READONLY (t), TYPE_VOLATILE (t));
1994 tmp = build_offset_type (mapcar (TYPE_OFFSET_BASETYPE (t), func),
1995 mapcar (TREE_TYPE (t), func));
1996 return cp_build_type_variant (tmp, TYPE_READONLY (t), TYPE_VOLATILE (t));
1998 tmp = build_cplus_method_type
1999 (mapcar (TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (t))), func),
2000 mapcar (TREE_TYPE (t), func),
2001 mapcar (TREE_CHAIN (TYPE_ARG_TYPES (t)), func));
2002 return cp_build_type_variant (tmp, TYPE_READONLY (t), TYPE_VOLATILE (t));
2006 TREE_REALPART (t) = mapcar (TREE_REALPART (t), func);
2007 TREE_IMAGPART (t) = mapcar (TREE_REALPART (t), func);
2012 CONSTRUCTOR_ELTS (t) = mapcar (CONSTRUCTOR_ELTS (t), func);
2015 case TEMPLATE_TEMPLATE_PARM:
2016 return copy_template_template_parm (t);
2020 TREE_OPERAND (t, 0) = mapcar (TREE_OPERAND (t, 0), func);
2021 TREE_OPERAND (t, 1) = mapcar (TREE_OPERAND (t, 1), func);
2022 TREE_OPERAND (t, 2) = NULL_TREE;
2027 TREE_OPERAND (t, 0) = mapcar (TREE_OPERAND (t, 0), func);
2028 TREE_OPERAND (t, 1) = mapcar (TREE_OPERAND (t, 1), func);
2029 TREE_OPERAND (t, 2) = mapcar (TREE_OPERAND (t, 2), func);
2034 TREE_OPERAND (t, 0) = mapcar (TREE_OPERAND (t, 0), func);
2038 if (TYPE_PTRMEMFUNC_P (t))
2039 return build_ptrmemfunc_type
2040 (mapcar (TYPE_PTRMEMFUNC_FN_TYPE (t), func));
2041 /* else fall through */
2043 /* This list is incomplete, but should suffice for now.
2044 It is very important that `sorry' not call
2045 `report_error_function'. That could cause an infinite loop. */
2047 sorry ("initializer contains unrecognized tree code");
2048 return error_mark_node;
2051 my_friendly_abort (107);
2060 if (TREE_PERMANENT (t))
2063 /* Support `void f () { extern int i; A<&i> a; }' */
2064 if ((TREE_CODE (t) == VAR_DECL || TREE_CODE (t) == FUNCTION_DECL)
2069 /* copy_rtx won't make a new SYMBOL_REF, so call make_decl_rtl again. */
2071 make_decl_rtl (t, NULL_PTR, 1);
2078 /* Assuming T is a node built bottom-up, make it all exist on
2079 permanent obstack, if it is not permanent already. */
2082 copy_to_permanent (t)
2085 if (t == NULL_TREE || TREE_PERMANENT (t))
2088 push_obstacks_nochange ();
2089 end_temporary_allocation ();
2091 t = mapcar (t, perm_manip);
2098 #ifdef GATHER_STATISTICS
2099 extern int depth_reached;
2103 print_lang_statistics ()
2105 extern struct obstack decl_obstack;
2106 print_obstack_statistics ("class_obstack", &class_obstack);
2107 print_obstack_statistics ("decl_obstack", &decl_obstack);
2108 print_search_statistics ();
2109 print_class_statistics ();
2110 #ifdef GATHER_STATISTICS
2111 fprintf (stderr, "maximum template instantiation depth reached: %d\n",
2116 /* This is used by the `assert' macro. It is provided in libgcc.a,
2117 which `cc' doesn't know how to link. Note that the C++ front-end
2118 no longer actually uses the `assert' macro (instead, it calls
2119 my_friendly_assert). But all of the back-end files still need this. */
2122 __eprintf (string, expression, line, filename)
2125 const char *expression;
2127 const char *filename;
2135 fprintf (stderr, string, expression, line, filename);
2140 /* Return, as an INTEGER_CST node, the number of elements for TYPE
2141 (which is an ARRAY_TYPE). This counts only elements of the top
2145 array_type_nelts_top (type)
2148 return fold (build (PLUS_EXPR, sizetype,
2149 array_type_nelts (type),
2153 /* Return, as an INTEGER_CST node, the number of elements for TYPE
2154 (which is an ARRAY_TYPE). This one is a recursive count of all
2155 ARRAY_TYPEs that are clumped together. */
2158 array_type_nelts_total (type)
2161 tree sz = array_type_nelts_top (type);
2162 type = TREE_TYPE (type);
2163 while (TREE_CODE (type) == ARRAY_TYPE)
2165 tree n = array_type_nelts_top (type);
2166 sz = fold (build (MULT_EXPR, sizetype, sz, n));
2167 type = TREE_TYPE (type);
2177 if (TREE_CODE (t) != TREE_LIST && ! TREE_SIDE_EFFECTS (t))
2179 else if (TREE_CODE (t) == TARGET_EXPR)
2181 if (TREE_CODE (TREE_OPERAND (t, 1)) == AGGR_INIT_EXPR)
2183 mark_used (TREE_OPERAND (TREE_OPERAND (TREE_OPERAND (t, 1), 0), 0));
2184 return build_cplus_new
2185 (TREE_TYPE (t), break_out_target_exprs (TREE_OPERAND (t, 1)));
2188 TREE_OPERAND (t, 0) = build (VAR_DECL, TREE_TYPE (t));
2189 layout_decl (TREE_OPERAND (t, 0), 0);
2192 else if (TREE_CODE (t) == CALL_EXPR)
2193 mark_used (TREE_OPERAND (TREE_OPERAND (t, 0), 0));
2198 /* Actually, we'll just clean out the target exprs for the moment. */
2201 break_out_target_exprs (t)
2204 return mapcar (t, bot_manip);
2207 /* Obstack used for allocating nodes in template function and variable
2210 /* Similar to `build_nt', except we build
2211 on the permanent_obstack, regardless. */
2214 build_min_nt VPROTO((enum tree_code code, ...))
2217 enum tree_code code;
2219 register struct obstack *ambient_obstack = expression_obstack;
2222 register int length;
2228 code = va_arg (p, enum tree_code);
2231 expression_obstack = &permanent_obstack;
2233 t = make_node (code);
2234 length = tree_code_length[(int) code];
2235 TREE_COMPLEXITY (t) = lineno;
2237 for (i = 0; i < length; i++)
2239 tree x = va_arg (p, tree);
2240 TREE_OPERAND (t, i) = copy_to_permanent (x);
2244 expression_obstack = ambient_obstack;
2248 /* Similar to `build', except we build
2249 on the permanent_obstack, regardless. */
2252 build_min VPROTO((enum tree_code code, tree tt, ...))
2255 enum tree_code code;
2258 register struct obstack *ambient_obstack = expression_obstack;
2261 register int length;
2267 code = va_arg (p, enum tree_code);
2268 tt = va_arg (p, tree);
2271 expression_obstack = &permanent_obstack;
2273 t = make_node (code);
2274 length = tree_code_length[(int) code];
2275 TREE_TYPE (t) = copy_to_permanent (tt);
2276 TREE_COMPLEXITY (t) = lineno;
2278 for (i = 0; i < length; i++)
2280 tree x = va_arg (p, tree);
2281 TREE_OPERAND (t, i) = copy_to_permanent (x);
2285 expression_obstack = ambient_obstack;
2289 /* Same as `tree_cons' but make a permanent object. */
2292 min_tree_cons (purpose, value, chain)
2293 tree purpose, value, chain;
2296 register struct obstack *ambient_obstack = current_obstack;
2297 current_obstack = &permanent_obstack;
2299 node = tree_cons (copy_to_permanent (purpose),
2300 copy_to_permanent (value), chain);
2301 current_obstack = ambient_obstack;
2309 if (TREE_CODE (t) == TYPE_DECL)
2311 if (TREE_CODE_CLASS (TREE_CODE (t)) == 't')
2312 return TYPE_STUB_DECL (t);
2314 my_friendly_abort (42);
2316 /* Stop compiler from complaining control reaches end of non-void function. */
2321 can_free (obstack, t)
2322 struct obstack *obstack;
2327 if (TREE_CODE (t) == TREE_VEC)
2328 size = (TREE_VEC_LENGTH (t)-1) * sizeof (tree) + sizeof (struct tree_vec);
2330 my_friendly_abort (42);
2332 #define ROUND(x) ((x + obstack_alignment_mask (obstack)) \
2333 & ~ obstack_alignment_mask (obstack))
2334 if ((char *)t + ROUND (size) == obstack_next_free (obstack))
2341 /* Return first vector element whose BINFO_TYPE is ELEM.
2342 Return 0 if ELEM is not in VEC. VEC may be NULL_TREE. */
2345 vec_binfo_member (elem, vec)
2351 for (i = 0; i < TREE_VEC_LENGTH (vec); ++i)
2352 if (comptypes (elem, BINFO_TYPE (TREE_VEC_ELT (vec, i)), 1))
2353 return TREE_VEC_ELT (vec, i);
2358 /* Kludge around the fact that DECL_CONTEXT for virtual functions returns
2359 the wrong thing for decl_function_context. Hopefully the uses in the
2360 backend won't matter, since we don't need a static chain for local class
2364 hack_decl_function_context (decl)
2367 if (TREE_CODE (decl) == FUNCTION_DECL && DECL_FUNCTION_MEMBER_P (decl))
2368 return decl_function_context (TYPE_MAIN_DECL (DECL_CLASS_CONTEXT (decl)));
2369 return decl_function_context (decl);
2372 /* Return truthvalue of whether T1 is the same tree structure as T2.
2373 Return 1 if they are the same.
2374 Return 0 if they are understandably different.
2375 Return -1 if either contains tree structure not understood by
2379 cp_tree_equal (t1, t2)
2382 register enum tree_code code1, code2;
2387 if (t1 == 0 || t2 == 0)
2390 code1 = TREE_CODE (t1);
2391 code2 = TREE_CODE (t2);
2393 if (code1 == NOP_EXPR || code1 == CONVERT_EXPR || code1 == NON_LVALUE_EXPR)
2395 if (code2 == NOP_EXPR || code2 == CONVERT_EXPR || code2 == NON_LVALUE_EXPR)
2396 return cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
2398 return cp_tree_equal (TREE_OPERAND (t1, 0), t2);
2400 else if (code2 == NOP_EXPR || code2 == CONVERT_EXPR
2401 || code2 == NON_LVALUE_EXPR)
2402 return cp_tree_equal (t1, TREE_OPERAND (t2, 0));
2410 return TREE_INT_CST_LOW (t1) == TREE_INT_CST_LOW (t2)
2411 && TREE_INT_CST_HIGH (t1) == TREE_INT_CST_HIGH (t2);
2414 return REAL_VALUES_EQUAL (TREE_REAL_CST (t1), TREE_REAL_CST (t2));
2417 return TREE_STRING_LENGTH (t1) == TREE_STRING_LENGTH (t2)
2418 && !bcmp (TREE_STRING_POINTER (t1), TREE_STRING_POINTER (t2),
2419 TREE_STRING_LENGTH (t1));
2422 /* We need to do this when determining whether or not two
2423 non-type pointer to member function template arguments
2425 if (!(comptypes (TREE_TYPE (t1), TREE_TYPE (t2), 1)
2426 /* The first operand is RTL. */
2427 && TREE_OPERAND (t1, 0) == TREE_OPERAND (t2, 0)))
2429 return cp_tree_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
2432 cmp = cp_tree_equal (TREE_PURPOSE (t1), TREE_PURPOSE (t2));
2435 cmp = cp_tree_equal (TREE_VALUE (t1), TREE_VALUE (t2));
2438 return cp_tree_equal (TREE_CHAIN (t1), TREE_CHAIN (t2));
2441 return cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
2444 cmp = cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
2447 return simple_cst_list_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
2450 /* Special case: if either target is an unallocated VAR_DECL,
2451 it means that it's going to be unified with whatever the
2452 TARGET_EXPR is really supposed to initialize, so treat it
2453 as being equivalent to anything. */
2454 if ((TREE_CODE (TREE_OPERAND (t1, 0)) == VAR_DECL
2455 && DECL_NAME (TREE_OPERAND (t1, 0)) == NULL_TREE
2456 && DECL_RTL (TREE_OPERAND (t1, 0)) == 0)
2457 || (TREE_CODE (TREE_OPERAND (t2, 0)) == VAR_DECL
2458 && DECL_NAME (TREE_OPERAND (t2, 0)) == NULL_TREE
2459 && DECL_RTL (TREE_OPERAND (t2, 0)) == 0))
2462 cmp = cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
2465 return cp_tree_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
2467 case WITH_CLEANUP_EXPR:
2468 cmp = cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
2471 return cp_tree_equal (TREE_OPERAND (t1, 2), TREE_OPERAND (t1, 2));
2474 if (TREE_OPERAND (t1, 1) == TREE_OPERAND (t2, 1))
2475 return cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
2484 case TEMPLATE_PARM_INDEX:
2485 return TEMPLATE_PARM_IDX (t1) == TEMPLATE_PARM_IDX (t2)
2486 && TEMPLATE_PARM_LEVEL (t1) == TEMPLATE_PARM_LEVEL (t2);
2490 if (TREE_CODE (TREE_OPERAND (t1, 0)) != TREE_CODE (TREE_OPERAND (t2, 0)))
2492 if (TREE_CODE_CLASS (TREE_CODE (TREE_OPERAND (t1, 0))) == 't')
2493 return comptypes (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0), 1);
2500 switch (TREE_CODE_CLASS (code1))
2510 for (i=0; i<tree_code_length[(int) code1]; ++i)
2512 cmp = cp_tree_equal (TREE_OPERAND (t1, i), TREE_OPERAND (t2, i));
2522 /* Similar to make_tree_vec, but build on a temporary obstack. */
2529 register struct obstack *ambient_obstack = current_obstack;
2530 current_obstack = expression_obstack;
2531 node = make_tree_vec (len);
2532 current_obstack = ambient_obstack;
2536 /* Build a wrapper around some pointer PTR so we can use it as a tree. */
2539 build_ptr_wrapper (ptr)
2542 tree t = make_node (WRAPPER);
2543 WRAPPER_PTR (t) = ptr;
2547 /* Same, but on the expression_obstack. */
2550 build_expr_ptr_wrapper (ptr)
2554 push_expression_obstack ();
2555 t = build_ptr_wrapper (ptr);
2560 /* Build a wrapper around some integer I so we can use it as a tree. */
2563 build_int_wrapper (i)
2566 tree t = make_node (WRAPPER);
2567 WRAPPER_INT (t) = i;
2572 build_srcloc (file, line)
2578 /* Make sure that we put these on the permanent obstack; up in
2579 add_pending_template, we pass this return value into perm_tree_cons,
2580 which also puts it on the permanent_obstack. However, this wasn't
2581 explicitly doing the same. */
2582 register struct obstack *ambient_obstack = current_obstack;
2583 current_obstack = &permanent_obstack;
2585 t = make_node (SRCLOC);
2586 SRCLOC_FILE (t) = file;
2587 SRCLOC_LINE (t) = line;
2589 current_obstack = ambient_obstack;
2595 build_srcloc_here ()
2597 return build_srcloc (input_filename, lineno);
2601 push_expression_obstack ()
2603 push_obstacks_nochange ();
2604 current_obstack = expression_obstack;
2607 /* The type of ARG when used as an lvalue. */
2613 tree type = TREE_TYPE (arg);
2614 if (TREE_CODE (arg) == OVERLOAD)
2615 type = unknown_type_node;
2616 else if (TREE_CODE (type) != ARRAY_TYPE)
2617 type = cp_build_type_variant
2618 (type, TREE_READONLY (arg), TREE_THIS_VOLATILE (arg));
2622 /* The type of ARG for printing error messages; denote lvalues with
2629 tree type = TREE_TYPE (arg);
2630 if (TREE_CODE (type) == ARRAY_TYPE)
2632 else if (real_lvalue_p (arg))
2633 type = build_reference_type (lvalue_type (arg));
2634 else if (IS_AGGR_TYPE (type))
2635 type = lvalue_type (arg);
2640 /* Does FUNCTION use a variable-length argument list? */
2643 varargs_function_p (function)
2646 tree parm = TYPE_ARG_TYPES (TREE_TYPE (function));
2647 for (; parm; parm = TREE_CHAIN (parm))
2648 if (TREE_VALUE (parm) == void_type_node)
2653 /* Returns 1 if decl is a member of a class. */
2659 tree ctx = DECL_CONTEXT (decl);
2660 return (ctx && TREE_CODE_CLASS (TREE_CODE (ctx)) == 't');