1 /* Language-dependent node constructors for parse phase of GNU compiler.
2 Copyright (C) 1987, 88, 92-98, 1999 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 static tree bot_manip PROTO((tree));
32 static tree perm_manip PROTO((tree));
33 static tree build_cplus_array_type_1 PROTO((tree, tree));
34 static void list_hash_add PROTO((int, tree));
35 static int list_hash PROTO((tree, tree, tree));
36 static tree list_hash_lookup PROTO((int, tree, tree, tree));
37 static void propagate_binfo_offsets PROTO((tree, tree));
38 static int avoid_overlap PROTO((tree, tree));
39 static int lvalue_p_1 PROTO((tree, int));
40 static int equal_functions PROTO((tree, tree));
41 static tree no_linkage_helper PROTO((tree));
42 static tree build_srcloc PROTO((char *, int));
44 #define CEIL(x,y) (((x) + (y) - 1) / (y))
46 /* Returns non-zero if REF is an lvalue. If
47 TREAT_CLASS_RVALUES_AS_LVALUES is non-zero, rvalues of class type
48 are considered lvalues. */
51 lvalue_p_1 (ref, treat_class_rvalues_as_lvalues)
53 int treat_class_rvalues_as_lvalues;
55 if (TREE_CODE (TREE_TYPE (ref)) == REFERENCE_TYPE)
58 if (ref == current_class_ptr && flag_this_is_variable <= 0)
61 switch (TREE_CODE (ref))
63 /* preincrements and predecrements are valid lvals, provided
64 what they refer to are valid lvals. */
65 case PREINCREMENT_EXPR:
66 case PREDECREMENT_EXPR:
71 case WITH_CLEANUP_EXPR:
74 return lvalue_p_1 (TREE_OPERAND (ref, 0),
75 treat_class_rvalues_as_lvalues);
81 if (TREE_READONLY (ref) && ! TREE_STATIC (ref)
82 && DECL_LANG_SPECIFIC (ref)
83 && DECL_IN_AGGR_P (ref))
89 if (TREE_CODE (TREE_TYPE (ref)) != METHOD_TYPE)
93 /* A currently unresolved scope ref. */
95 my_friendly_abort (103);
97 if (TREE_CODE (TREE_OPERAND (ref, 1)) == FUNCTION_DECL)
99 return (lvalue_p_1 (TREE_OPERAND (ref, 0),
100 treat_class_rvalues_as_lvalues)
101 && lvalue_p_1 (TREE_OPERAND (ref, 1),
102 treat_class_rvalues_as_lvalues));
106 return (lvalue_p_1 (TREE_OPERAND (ref, 1),
107 treat_class_rvalues_as_lvalues)
108 && lvalue_p_1 (TREE_OPERAND (ref, 2),
109 treat_class_rvalues_as_lvalues));
115 return lvalue_p_1 (TREE_OPERAND (ref, 1),
116 treat_class_rvalues_as_lvalues);
120 return (lvalue_p_1 (TREE_OPERAND (ref, 0),
121 treat_class_rvalues_as_lvalues)
122 && lvalue_p_1 (TREE_OPERAND (ref, 1),
123 treat_class_rvalues_as_lvalues));
126 return treat_class_rvalues_as_lvalues;
129 return (treat_class_rvalues_as_lvalues
130 && IS_AGGR_TYPE (TREE_TYPE (ref)));
133 /* All functions (except non-static-member functions) are
135 return !DECL_NONSTATIC_MEMBER_FUNCTION_P (ref);
144 /* Return nonzero if REF is an lvalue valid for this language.
145 Lvalues can be assigned, unless they have TREE_READONLY, or unless
146 they are FUNCTION_DECLs. Lvalues can have their address taken,
147 unless they have DECL_REGISTER. */
153 return lvalue_p_1 (ref, /*treat_class_rvalues_as_lvalues=*/0);
156 /* This differs from real_lvalue_p in that class rvalues are considered
163 return lvalue_p_1 (ref, /*treat_class_rvalues_as_lvalues=*/1);
166 /* Return nonzero if REF is an lvalue valid for this language;
167 otherwise, print an error message and return zero. */
170 lvalue_or_else (ref, string)
174 int win = lvalue_p (ref);
176 error ("non-lvalue in %s", string);
180 /* INIT is a CALL_EXPR which needs info about its target.
181 TYPE is the type that this initialization should appear to have.
183 Build an encapsulation of the initialization to perform
184 and return it so that it can be processed by language-independent
185 and language-specific expression expanders. */
188 build_cplus_new (type, init)
195 if (TREE_CODE (init) != CALL_EXPR && TREE_CODE (init) != AGGR_INIT_EXPR)
198 slot = build (VAR_DECL, type);
199 DECL_ARTIFICIAL (slot) = 1;
200 layout_decl (slot, 0);
201 rval = build (AGGR_INIT_EXPR, type,
202 TREE_OPERAND (init, 0), TREE_OPERAND (init, 1), slot);
203 TREE_SIDE_EFFECTS (rval) = 1;
204 rval = build (TARGET_EXPR, type, slot, rval, NULL_TREE, NULL_TREE);
205 TREE_SIDE_EFFECTS (rval) = 1;
210 /* Encapsulate the expression INIT in a TARGET_EXPR. */
213 get_target_expr (init)
219 slot = build (VAR_DECL, TREE_TYPE (init));
220 DECL_ARTIFICIAL (slot) = 1;
221 layout_decl (slot, 0);
222 rval = build (TARGET_EXPR, TREE_TYPE (init), slot, init,
223 NULL_TREE, NULL_TREE);
224 TREE_SIDE_EFFECTS (rval) = 1;
229 /* Recursively search EXP for CALL_EXPRs that need cleanups and replace
230 these CALL_EXPRs with tree nodes that will perform the cleanups. */
233 break_out_cleanups (exp)
238 if (TREE_CODE (tmp) == CALL_EXPR
239 && TYPE_NEEDS_DESTRUCTOR (TREE_TYPE (tmp)))
240 return build_cplus_new (TREE_TYPE (tmp), tmp);
242 while (TREE_CODE (tmp) == NOP_EXPR
243 || TREE_CODE (tmp) == CONVERT_EXPR
244 || TREE_CODE (tmp) == NON_LVALUE_EXPR)
246 if (TREE_CODE (TREE_OPERAND (tmp, 0)) == CALL_EXPR
247 && TYPE_NEEDS_DESTRUCTOR (TREE_TYPE (TREE_OPERAND (tmp, 0))))
249 TREE_OPERAND (tmp, 0)
250 = build_cplus_new (TREE_TYPE (TREE_OPERAND (tmp, 0)),
251 TREE_OPERAND (tmp, 0));
255 tmp = TREE_OPERAND (tmp, 0);
260 /* Recursively perform a preorder search EXP for CALL_EXPRs, making
261 copies where they are found. Returns a deep copy all nodes transitively
262 containing CALL_EXPRs. */
265 break_out_calls (exp)
268 register tree t1, t2 = NULL_TREE;
269 register enum tree_code code;
270 register int changed = 0;
273 if (exp == NULL_TREE)
276 code = TREE_CODE (exp);
278 if (code == CALL_EXPR)
279 return copy_node (exp);
281 /* Don't try and defeat a save_expr, as it should only be done once. */
282 if (code == SAVE_EXPR)
285 switch (TREE_CODE_CLASS (code))
290 case 'c': /* a constant */
291 case 't': /* a type node */
292 case 'x': /* something random, like an identifier or an ERROR_MARK. */
295 case 'd': /* A decl node */
296 #if 0 /* This is bogus. jason 9/21/94 */
298 t1 = break_out_calls (DECL_INITIAL (exp));
299 if (t1 != DECL_INITIAL (exp))
301 exp = copy_node (exp);
302 DECL_INITIAL (exp) = t1;
307 case 'b': /* A block node */
309 /* Don't know how to handle these correctly yet. Must do a
310 break_out_calls on all DECL_INITIAL values for local variables,
311 and also break_out_calls on all sub-blocks and sub-statements. */
316 case 'e': /* an expression */
317 case 'r': /* a reference */
318 case 's': /* an expression with side effects */
319 for (i = tree_code_length[(int) code] - 1; i >= 0; i--)
321 t1 = break_out_calls (TREE_OPERAND (exp, i));
322 if (t1 != TREE_OPERAND (exp, i))
324 exp = copy_node (exp);
325 TREE_OPERAND (exp, i) = t1;
330 case '<': /* a comparison expression */
331 case '2': /* a binary arithmetic expression */
332 t2 = break_out_calls (TREE_OPERAND (exp, 1));
333 if (t2 != TREE_OPERAND (exp, 1))
335 case '1': /* a unary arithmetic expression */
336 t1 = break_out_calls (TREE_OPERAND (exp, 0));
337 if (t1 != TREE_OPERAND (exp, 0))
341 if (tree_code_length[(int) code] == 1)
342 return build1 (code, TREE_TYPE (exp), t1);
344 return build (code, TREE_TYPE (exp), t1, t2);
351 extern struct obstack *current_obstack;
352 extern struct obstack permanent_obstack, class_obstack;
353 extern struct obstack *saveable_obstack;
354 extern struct obstack *expression_obstack;
356 /* Here is how primitive or already-canonicalized types' hash
357 codes are made. MUST BE CONSISTENT WITH tree.c !!! */
358 #define TYPE_HASH(TYPE) ((HOST_WIDE_INT) (TYPE) & 0777777)
360 /* Construct, lay out and return the type of methods belonging to class
361 BASETYPE and whose arguments are described by ARGTYPES and whose values
362 are described by RETTYPE. If each type exists already, reuse it. */
365 build_cplus_method_type (basetype, rettype, argtypes)
366 tree basetype, rettype, argtypes;
372 /* Make a node of the sort we want. */
373 t = make_node (METHOD_TYPE);
375 TYPE_METHOD_BASETYPE (t) = TYPE_MAIN_VARIANT (basetype);
376 TREE_TYPE (t) = rettype;
377 if (IS_SIGNATURE (basetype))
378 ptype = build_signature_pointer_type (basetype);
380 ptype = build_pointer_type (basetype);
382 /* The actual arglist for this function includes a "hidden" argument
383 which is "this". Put it into the list of argument types. */
385 argtypes = tree_cons (NULL_TREE, ptype, argtypes);
386 TYPE_ARG_TYPES (t) = argtypes;
387 TREE_SIDE_EFFECTS (argtypes) = 1; /* Mark first argtype as "artificial". */
389 /* If we already have such a type, use the old one and free this one.
390 Note that it also frees up the above cons cell if found. */
391 hashcode = TYPE_HASH (basetype) + TYPE_HASH (rettype) + type_hash_list (argtypes);
392 t = type_hash_canon (hashcode, t);
394 if (TYPE_SIZE (t) == 0)
401 build_cplus_array_type_1 (elt_type, index_type)
405 register struct obstack *ambient_obstack = current_obstack;
406 register struct obstack *ambient_saveable_obstack = saveable_obstack;
409 /* We need a new one. If both ELT_TYPE and INDEX_TYPE are permanent,
410 make this permanent too. */
411 if (TREE_PERMANENT (elt_type)
412 && (index_type == 0 || TREE_PERMANENT (index_type)))
414 current_obstack = &permanent_obstack;
415 saveable_obstack = &permanent_obstack;
418 if (processing_template_decl
419 || uses_template_parms (elt_type)
420 || uses_template_parms (index_type))
422 t = make_node (ARRAY_TYPE);
423 TREE_TYPE (t) = elt_type;
424 TYPE_DOMAIN (t) = index_type;
427 t = build_array_type (elt_type, index_type);
429 /* Push these needs up so that initialization takes place
431 TYPE_NEEDS_CONSTRUCTING (t) = TYPE_NEEDS_CONSTRUCTING (TYPE_MAIN_VARIANT (elt_type));
432 TYPE_NEEDS_DESTRUCTOR (t) = TYPE_NEEDS_DESTRUCTOR (TYPE_MAIN_VARIANT (elt_type));
433 current_obstack = ambient_obstack;
434 saveable_obstack = ambient_saveable_obstack;
439 build_cplus_array_type (elt_type, index_type)
444 int type_quals = CP_TYPE_QUALS (elt_type);
446 elt_type = TYPE_MAIN_VARIANT (elt_type);
448 t = build_cplus_array_type_1 (elt_type, index_type);
450 if (type_quals != TYPE_UNQUALIFIED)
451 t = cp_build_qualified_type (t, type_quals);
456 /* Make a variant type in the proper way for C/C++, propagating qualifiers
457 down to the element type of an array. */
460 cp_build_qualified_type (type, type_quals)
464 if (type == error_mark_node)
467 /* A restrict-qualified pointer type must be a pointer (or reference)
468 to object or incomplete type. */
469 if ((type_quals & TYPE_QUAL_RESTRICT)
470 && (!POINTER_TYPE_P (type)
471 || TYPE_PTRMEM_P (type)
472 || TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE))
474 cp_error ("`%T' cannot be `restrict'-qualified", type);
475 type_quals &= ~TYPE_QUAL_RESTRICT;
478 if (TREE_CODE (type) == ARRAY_TYPE)
480 tree real_main_variant = TYPE_MAIN_VARIANT (type);
482 push_obstacks (TYPE_OBSTACK (real_main_variant),
483 TYPE_OBSTACK (real_main_variant));
484 type = build_cplus_array_type_1 (cp_build_qualified_type
485 (TREE_TYPE (type), type_quals),
488 /* TYPE must be on same obstack as REAL_MAIN_VARIANT. If not,
489 make a copy. (TYPE might have come from the hash table and
490 REAL_MAIN_VARIANT might be in some function's obstack.) */
492 if (TYPE_OBSTACK (type) != TYPE_OBSTACK (real_main_variant))
494 type = copy_node (type);
495 TYPE_POINTER_TO (type) = TYPE_REFERENCE_TO (type) = 0;
498 TYPE_MAIN_VARIANT (type) = real_main_variant;
502 return build_qualified_type (type, type_quals);
505 /* Returns the canonical version of TYPE. In other words, if TYPE is
506 a typedef, returns the underlying type. The cv-qualification of
507 the type returned matches the type input; they will always be
511 canonical_type_variant (t)
514 return cp_build_qualified_type (TYPE_MAIN_VARIANT (t), CP_TYPE_QUALS (t));
517 /* Add OFFSET to all base types of T.
519 OFFSET, which is a type offset, is number of bytes.
521 Note that we don't have to worry about having two paths to the
522 same base type, since this type owns its association list. */
525 propagate_binfo_offsets (binfo, offset)
529 tree binfos = BINFO_BASETYPES (binfo);
530 int i, n_baselinks = binfos ? TREE_VEC_LENGTH (binfos) : 0;
532 for (i = 0; i < n_baselinks; /* note increment is done in the loop. */)
534 tree base_binfo = TREE_VEC_ELT (binfos, i);
536 if (TREE_VIA_VIRTUAL (base_binfo))
541 tree delta = NULL_TREE;
543 for (j = i+1; j < n_baselinks; j++)
544 if (! TREE_VIA_VIRTUAL (TREE_VEC_ELT (binfos, j)))
546 /* The next basetype offset must take into account the space
547 between the classes, not just the size of each class. */
548 delta = size_binop (MINUS_EXPR,
549 BINFO_OFFSET (TREE_VEC_ELT (binfos, j)),
550 BINFO_OFFSET (base_binfo));
555 if (BINFO_OFFSET_ZEROP (base_binfo))
556 BINFO_OFFSET (base_binfo) = offset;
558 BINFO_OFFSET (base_binfo)
559 = size_binop (PLUS_EXPR, BINFO_OFFSET (base_binfo), offset);
561 BINFO_OFFSET (base_binfo) = offset;
564 propagate_binfo_offsets (base_binfo, offset);
566 /* Go to our next class that counts for offset propagation. */
569 offset = size_binop (PLUS_EXPR, offset, delta);
574 /* Makes new binfos for the indirect bases under BINFO, and updates
575 BINFO_OFFSET for them and their bases. */
578 unshare_base_binfos (binfo)
581 tree binfos = BINFO_BASETYPES (binfo);
585 if (binfos == NULL_TREE)
588 /* Now unshare the structure beneath BINFO. */
589 for (j = TREE_VEC_LENGTH (binfos)-1;
592 tree base_binfo = TREE_VEC_ELT (binfos, j);
593 new_binfo = TREE_VEC_ELT (binfos, j)
594 = make_binfo (BINFO_OFFSET (base_binfo),
596 BINFO_VTABLE (base_binfo),
597 BINFO_VIRTUALS (base_binfo));
598 TREE_VIA_PUBLIC (new_binfo) = TREE_VIA_PUBLIC (base_binfo);
599 TREE_VIA_PROTECTED (new_binfo) = TREE_VIA_PROTECTED (base_binfo);
600 TREE_VIA_VIRTUAL (new_binfo) = TREE_VIA_VIRTUAL (base_binfo);
601 BINFO_INHERITANCE_CHAIN (new_binfo) = binfo;
602 unshare_base_binfos (new_binfo);
606 /* Finish the work of layout_record, now taking virtual bases into account.
607 Also compute the actual offsets that our base classes will have.
608 This must be performed after the fields are laid out, since virtual
609 baseclasses must lay down at the end of the record.
611 Returns the maximum number of virtual functions any of the
612 baseclasses provide. */
615 layout_basetypes (rec, max)
619 tree binfos = TYPE_BINFO_BASETYPES (rec);
620 int i, n_baseclasses = binfos ? TREE_VEC_LENGTH (binfos) : 0;
624 unsigned int record_align = MAX (BITS_PER_UNIT, TYPE_ALIGN (rec));
625 unsigned int desired_align;
627 /* Record size so far is CONST_SIZE bits, where CONST_SIZE is an integer. */
628 register unsigned int const_size = 0;
629 unsigned int nonvirtual_const_size;
631 #ifdef STRUCTURE_SIZE_BOUNDARY
632 /* Packed structures don't need to have minimum size. */
633 if (! TYPE_PACKED (rec))
634 record_align = MAX (record_align, STRUCTURE_SIZE_BOUNDARY);
637 /* Get all the virtual base types that this type uses. The
638 TREE_VALUE slot holds the virtual baseclass type. Note that
639 get_vbase_types makes copies of the virtual base BINFOs, so that
640 the vbase_types are unshared. */
641 vbase_types = CLASSTYPE_VBASECLASSES (rec);
643 my_friendly_assert (TREE_CODE (TYPE_SIZE (rec)) == INTEGER_CST, 19970302);
644 const_size = TREE_INT_CST_LOW (TYPE_SIZE (rec));
646 nonvirtual_const_size = const_size;
650 tree basetype = BINFO_TYPE (vbase_types);
653 desired_align = TYPE_ALIGN (basetype);
654 record_align = MAX (record_align, desired_align);
657 offset = integer_zero_node;
660 /* Give each virtual base type the alignment it wants. */
661 const_size = CEIL (const_size, desired_align) * desired_align;
662 offset = size_int (CEIL (const_size, BITS_PER_UNIT));
665 if (CLASSTYPE_VSIZE (basetype) > max)
666 max = CLASSTYPE_VSIZE (basetype);
667 BINFO_OFFSET (vbase_types) = offset;
669 /* Every virtual baseclass takes a least a UNIT, so that we can
670 take it's address and get something different for each base. */
671 const_size += MAX (BITS_PER_UNIT,
672 TREE_INT_CST_LOW (CLASSTYPE_SIZE (basetype)));
674 vbase_types = TREE_CHAIN (vbase_types);
679 /* Because a virtual base might take a single byte above,
680 we have to re-adjust the total size to make sure it is
681 a multiple of the alignment. */
682 /* Give the whole object the alignment it wants. */
683 const_size = CEIL (const_size, record_align) * record_align;
686 /* Set the alignment in the complete type. We don't set CLASSTYPE_ALIGN
687 here, as that is for this class, without any virtual base classes. */
688 TYPE_ALIGN (rec) = record_align;
689 if (const_size != nonvirtual_const_size)
691 TYPE_SIZE (rec) = size_int (const_size);
692 TYPE_SIZE_UNIT (rec) = size_binop (FLOOR_DIV_EXPR, TYPE_SIZE (rec),
693 size_int (BITS_PER_UNIT));
696 /* Now propagate offset information throughout the lattice. */
697 for (i = 0; i < n_baseclasses; i++)
699 register tree base_binfo = TREE_VEC_ELT (binfos, i);
700 register tree basetype = BINFO_TYPE (base_binfo);
701 tree field = TYPE_FIELDS (rec);
703 if (TREE_VIA_VIRTUAL (base_binfo))
706 my_friendly_assert (TREE_TYPE (field) == basetype, 23897);
708 if (get_base_distance (basetype, rec, 0, (tree*)0) == -2)
709 cp_warning ("direct base `%T' inaccessible in `%T' due to ambiguity",
712 BINFO_OFFSET (base_binfo)
713 = size_int (CEIL (TREE_INT_CST_LOW (DECL_FIELD_BITPOS (field)),
715 propagate_binfo_offsets (base_binfo, BINFO_OFFSET (base_binfo));
716 TYPE_FIELDS (rec) = TREE_CHAIN (field);
719 for (vbase_types = CLASSTYPE_VBASECLASSES (rec); vbase_types;
720 vbase_types = TREE_CHAIN (vbase_types))
722 BINFO_INHERITANCE_CHAIN (vbase_types) = TYPE_BINFO (rec);
723 unshare_base_binfos (vbase_types);
724 propagate_binfo_offsets (vbase_types, BINFO_OFFSET (vbase_types));
728 tree basetype = BINFO_TYPE (vbase_types);
729 if (get_base_distance (basetype, rec, 0, (tree*)0) == -2)
730 cp_warning ("virtual base `%T' inaccessible in `%T' due to ambiguity",
738 /* If the empty base field in DECL overlaps with a base of the same type in
739 NEWDECL, which is either another base field or the first data field of
740 the class, pad the base just before NEWDECL and return 1. Otherwise,
744 avoid_overlap (decl, newdecl)
749 if (newdecl == NULL_TREE
750 || ! types_overlap_p (TREE_TYPE (decl), TREE_TYPE (newdecl)))
753 for (field = decl; TREE_CHAIN (field) && TREE_CHAIN (field) != newdecl;
754 field = TREE_CHAIN (field))
757 DECL_SIZE (field) = integer_one_node;
762 /* Returns a list of fields to stand in for the base class subobjects
763 of REC. These fields are later removed by layout_basetypes. */
766 build_base_fields (rec)
769 /* Chain to hold all the new FIELD_DECLs which stand in for base class
771 tree base_decls = NULL_TREE;
772 tree binfos = TYPE_BINFO_BASETYPES (rec);
773 int n_baseclasses = binfos ? TREE_VEC_LENGTH (binfos) : 0;
775 int i, saw_empty = 0;
776 unsigned int base_align = 0;
778 for (i = 0; i < n_baseclasses; ++i)
780 register tree base_binfo = TREE_VEC_ELT (binfos, i);
781 register tree basetype = BINFO_TYPE (base_binfo);
783 if (TYPE_SIZE (basetype) == 0)
784 /* This error is now reported in xref_tag, thus giving better
785 location information. */
788 if (TREE_VIA_VIRTUAL (base_binfo))
791 decl = build_lang_field_decl (FIELD_DECL, NULL_TREE, basetype);
792 DECL_ARTIFICIAL (decl) = 1;
793 DECL_FIELD_CONTEXT (decl) = DECL_CLASS_CONTEXT (decl) = rec;
794 DECL_SIZE (decl) = CLASSTYPE_SIZE (basetype);
795 DECL_ALIGN (decl) = CLASSTYPE_ALIGN (basetype);
796 TREE_CHAIN (decl) = base_decls;
801 /* Brain damage for backwards compatibility. For no good reason,
802 the old layout_basetypes made every base at least as large as
803 the alignment for the bases up to that point, gratuitously
804 wasting space. So we do the same thing here. */
805 base_align = MAX (base_align, DECL_ALIGN (decl));
807 = size_int (MAX (TREE_INT_CST_LOW (DECL_SIZE (decl)),
810 else if (DECL_SIZE (decl) == integer_zero_node)
814 /* Reverse the list of fields so we allocate the bases in the proper
816 base_decls = nreverse (base_decls);
818 /* In the presence of empty base classes, we run the risk of allocating
819 two objects of the same class on top of one another. Avoid that. */
820 if (flag_new_abi && saw_empty)
821 for (decl = base_decls; decl; decl = TREE_CHAIN (decl))
823 if (DECL_SIZE (decl) == integer_zero_node)
825 /* First step through the following bases until we find
826 an overlap or a non-empty base. */
827 for (nextdecl = TREE_CHAIN (decl); nextdecl;
828 nextdecl = TREE_CHAIN (nextdecl))
830 if (avoid_overlap (decl, nextdecl)
831 || DECL_SIZE (nextdecl) != integer_zero_node)
835 /* If we're still looking, also check against the first
837 for (nextdecl = TYPE_FIELDS (rec);
838 nextdecl && TREE_CODE (nextdecl) != FIELD_DECL;
839 nextdecl = TREE_CHAIN (nextdecl))
841 avoid_overlap (decl, nextdecl);
849 /* Returns list of virtual base class pointers in a FIELD_DECL chain. */
852 build_vbase_pointer_fields (rec)
855 /* Chain to hold all the new FIELD_DECLs which point at virtual
857 tree vbase_decls = NULL_TREE;
858 tree binfos = TYPE_BINFO_BASETYPES (rec);
859 int n_baseclasses = binfos ? TREE_VEC_LENGTH (binfos) : 0;
863 /* Handle basetypes almost like fields, but record their
864 offsets differently. */
866 for (i = 0; i < n_baseclasses; i++)
868 register tree base_binfo = TREE_VEC_ELT (binfos, i);
869 register tree basetype = BINFO_TYPE (base_binfo);
871 if (TYPE_SIZE (basetype) == 0)
872 /* This error is now reported in xref_tag, thus giving better
873 location information. */
876 /* All basetypes are recorded in the association list of the
879 if (TREE_VIA_VIRTUAL (base_binfo))
884 /* The offset for a virtual base class is only used in computing
885 virtual function tables and for initializing virtual base
886 pointers. It is built once `get_vbase_types' is called. */
888 /* If this basetype can come from another vbase pointer
889 without an additional indirection, we will share
890 that pointer. If an indirection is involved, we
891 make our own pointer. */
892 for (j = 0; j < n_baseclasses; j++)
894 tree other_base_binfo = TREE_VEC_ELT (binfos, j);
895 if (! TREE_VIA_VIRTUAL (other_base_binfo)
896 && binfo_member (basetype,
897 CLASSTYPE_VBASECLASSES (BINFO_TYPE
902 FORMAT_VBASE_NAME (name, basetype);
903 decl = build_lang_field_decl (FIELD_DECL, get_identifier (name),
904 build_pointer_type (basetype));
905 /* If you change any of the below, take a look at all the
906 other VFIELD_BASEs and VTABLE_BASEs in the code, and change
908 DECL_ASSEMBLER_NAME (decl) = get_identifier (VTABLE_BASE);
909 DECL_VIRTUAL_P (decl) = 1;
910 DECL_ARTIFICIAL (decl) = 1;
911 DECL_FIELD_CONTEXT (decl) = rec;
912 DECL_CLASS_CONTEXT (decl) = rec;
913 DECL_FCONTEXT (decl) = basetype;
914 DECL_SAVED_INSNS (decl) = NULL_RTX;
915 DECL_FIELD_SIZE (decl) = 0;
916 DECL_ALIGN (decl) = TYPE_ALIGN (ptr_type_node);
917 TREE_CHAIN (decl) = vbase_decls;
918 BINFO_VPTR_FIELD (base_binfo) = decl;
922 /* The space this decl occupies has already been accounted for. */
930 /* Hashing of lists so that we don't make duplicates.
931 The entry point is `list_hash_canon'. */
933 /* Each hash table slot is a bucket containing a chain
934 of these structures. */
938 struct list_hash *next; /* Next structure in the bucket. */
939 int hashcode; /* Hash code of this list. */
940 tree list; /* The list recorded here. */
943 /* Now here is the hash table. When recording a list, it is added
944 to the slot whose index is the hash code mod the table size.
945 Note that the hash table is used for several kinds of lists.
946 While all these live in the same table, they are completely independent,
947 and the hash code is computed differently for each of these. */
949 #define TYPE_HASH_SIZE 59
950 static struct list_hash *list_hash_table[TYPE_HASH_SIZE];
952 /* Compute a hash code for a list (chain of TREE_LIST nodes
953 with goodies in the TREE_PURPOSE, TREE_VALUE, and bits of the
954 TREE_COMMON slots), by adding the hash codes of the individual entries. */
957 list_hash (purpose, value, chain)
958 tree purpose, value, chain;
960 register int hashcode = 0;
963 hashcode += TYPE_HASH (chain);
966 hashcode += TYPE_HASH (value);
970 hashcode += TYPE_HASH (purpose);
976 /* Look in the type hash table for a type isomorphic to TYPE.
977 If one is found, return it. Otherwise return 0. */
980 list_hash_lookup (hashcode, purpose, value, chain)
982 tree purpose, value, chain;
984 register struct list_hash *h;
986 for (h = list_hash_table[hashcode % TYPE_HASH_SIZE]; h; h = h->next)
987 if (h->hashcode == hashcode
988 && TREE_PURPOSE (h->list) == purpose
989 && TREE_VALUE (h->list) == value
990 && TREE_CHAIN (h->list) == chain)
995 /* Add an entry to the list-hash-table
996 for a list TYPE whose hash code is HASHCODE. */
999 list_hash_add (hashcode, list)
1003 register struct list_hash *h;
1005 h = (struct list_hash *) obstack_alloc (&class_obstack, sizeof (struct list_hash));
1006 h->hashcode = hashcode;
1008 h->next = list_hash_table[hashcode % TYPE_HASH_SIZE];
1009 list_hash_table[hashcode % TYPE_HASH_SIZE] = h;
1012 /* Given list components PURPOSE, VALUE, AND CHAIN, return the canonical
1013 object for an identical list if one already exists. Otherwise, build a
1014 new one, and record it as the canonical object. */
1016 /* Set to 1 to debug without canonicalization. Never set by program. */
1018 static int debug_no_list_hash = 0;
1021 hash_tree_cons (purpose, value, chain)
1022 tree purpose, value, chain;
1024 struct obstack *ambient_obstack = current_obstack;
1028 if (! debug_no_list_hash)
1030 hashcode = list_hash (purpose, value, chain);
1031 t = list_hash_lookup (hashcode, purpose, value, chain);
1036 current_obstack = &class_obstack;
1038 t = tree_cons (purpose, value, chain);
1040 /* If this is a new list, record it for later reuse. */
1041 if (! debug_no_list_hash)
1042 list_hash_add (hashcode, t);
1044 current_obstack = ambient_obstack;
1048 /* Constructor for hashed lists. */
1051 hash_tree_chain (value, chain)
1054 return hash_tree_cons (NULL_TREE, value, chain);
1057 /* Similar, but used for concatenating two lists. */
1060 hash_chainon (list1, list2)
1067 if (TREE_CHAIN (list1) == NULL_TREE)
1068 return hash_tree_chain (TREE_VALUE (list1), list2);
1069 return hash_tree_chain (TREE_VALUE (list1),
1070 hash_chainon (TREE_CHAIN (list1), list2));
1073 /* Build an association between TYPE and some parameters:
1075 OFFSET is the offset added to `this' to convert it to a pointer
1078 BINFO is the base binfo to use, if we are deriving from one. This
1079 is necessary, as we want specialized parent binfos from base
1080 classes, so that the VTABLE_NAMEs of bases are for the most derived
1081 type, instead of the simple type.
1083 VTABLE is the virtual function table with which to initialize
1084 sub-objects of type TYPE.
1086 VIRTUALS are the virtual functions sitting in VTABLE. */
1089 make_binfo (offset, binfo, vtable, virtuals)
1091 tree vtable, virtuals;
1093 tree new_binfo = make_tree_vec (7);
1096 if (TREE_CODE (binfo) == TREE_VEC)
1097 type = BINFO_TYPE (binfo);
1101 binfo = CLASS_TYPE_P (type) ? TYPE_BINFO (binfo) : NULL_TREE;
1104 TREE_TYPE (new_binfo) = TYPE_MAIN_VARIANT (type);
1105 BINFO_OFFSET (new_binfo) = offset;
1106 BINFO_VTABLE (new_binfo) = vtable;
1107 BINFO_VIRTUALS (new_binfo) = virtuals;
1108 BINFO_VPTR_FIELD (new_binfo) = NULL_TREE;
1110 if (binfo && BINFO_BASETYPES (binfo) != NULL_TREE)
1111 BINFO_BASETYPES (new_binfo) = copy_node (BINFO_BASETYPES (binfo));
1115 /* Return the binfo value for ELEM in TYPE. */
1118 binfo_value (elem, type)
1122 if (get_base_distance (elem, type, 0, (tree *)0) == -2)
1123 compiler_error ("base class `%s' ambiguous in binfo_value",
1124 TYPE_NAME_STRING (elem));
1126 return TYPE_BINFO (type);
1127 if (TREE_CODE (elem) == RECORD_TYPE && TYPE_BINFO (elem) == type)
1129 return get_binfo (elem, type, 0);
1132 /* Return a reversed copy of the BINFO-chain given by PATH. (If the
1133 BINFO_INHERITANCE_CHAIN points from base classes to derived
1134 classes, it will instead point from derived classes to base
1135 classes.) Returns the first node in the reversed chain. */
1141 register tree prev = NULL_TREE, cur;
1142 push_expression_obstack ();
1143 for (cur = path; cur; cur = BINFO_INHERITANCE_CHAIN (cur))
1145 tree r = copy_node (cur);
1146 BINFO_INHERITANCE_CHAIN (r) = prev;
1157 unsigned HOST_WIDE_INT n;
1160 fprintf (stderr, "type \"%s\"; offset = %ld\n",
1161 TYPE_NAME_STRING (BINFO_TYPE (elem)),
1162 (long) TREE_INT_CST_LOW (BINFO_OFFSET (elem)));
1163 fprintf (stderr, "vtable type:\n");
1164 debug_tree (BINFO_TYPE (elem));
1165 if (BINFO_VTABLE (elem))
1166 fprintf (stderr, "vtable decl \"%s\"\n", IDENTIFIER_POINTER (DECL_NAME (BINFO_VTABLE (elem))));
1168 fprintf (stderr, "no vtable decl yet\n");
1169 fprintf (stderr, "virtuals:\n");
1170 virtuals = BINFO_VIRTUALS (elem);
1172 n = skip_rtti_stuff (&virtuals, BINFO_TYPE (elem));
1176 tree fndecl = TREE_OPERAND (FNADDR_FROM_VTABLE_ENTRY (TREE_VALUE (virtuals)), 0);
1177 fprintf (stderr, "%s [%ld =? %ld]\n",
1178 IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (fndecl)),
1179 (long) n, (long) TREE_INT_CST_LOW (DECL_VINDEX (fndecl)));
1181 virtuals = TREE_CHAIN (virtuals);
1185 /* Initialize an CPLUS_BINDING node that does not live on an obstack. */
1189 struct tree_binding* node;
1191 static struct tree_binding* source;
1194 extern struct obstack permanent_obstack;
1195 push_obstacks (&permanent_obstack, &permanent_obstack);
1196 source = (struct tree_binding*)make_node (CPLUS_BINDING);
1200 TREE_PERMANENT ((tree)node) = 0;
1209 if (TREE_CODE (t) == FUNCTION_DECL)
1211 else if (TREE_CODE (t) == OVERLOAD)
1213 for (i=0; t; t = OVL_CHAIN (t))
1218 my_friendly_abort (359);
1223 is_overloaded_fn (x)
1226 /* A baselink is also considered an overloaded function. */
1229 return (TREE_CODE (x) == FUNCTION_DECL
1230 || TREE_CODE (x) == TEMPLATE_ID_EXPR
1231 || DECL_FUNCTION_TEMPLATE_P (x)
1232 || TREE_CODE (x) == OVERLOAD);
1236 really_overloaded_fn (x)
1239 /* A baselink is also considered an overloaded function. */
1242 return (TREE_CODE (x) == OVERLOAD
1243 && (TREE_CHAIN (x) != NULL_TREE
1244 || DECL_FUNCTION_TEMPLATE_P (OVL_FUNCTION (x))));
1251 my_friendly_assert (is_overloaded_fn (from), 9);
1252 /* A baselink is also considered an overloaded function. */
1253 if (BASELINK_P (from))
1254 from = TREE_VALUE (from);
1255 return OVL_CURRENT (from);
1258 /* Returns nonzero if T is a ->* or .* expression that refers to a
1265 return (TREE_CODE (t) == OFFSET_REF
1266 && TYPE_PTRMEMFUNC_P (TREE_TYPE (TREE_OPERAND (t, 1))));
1269 /* Return a new OVL node, concatenating it with the old one. */
1272 ovl_cons (decl, chain)
1276 tree result = make_node (OVERLOAD);
1277 TREE_TYPE (result) = unknown_type_node;
1278 OVL_FUNCTION (result) = decl;
1279 TREE_CHAIN (result) = chain;
1284 /* Same as ovl_cons, but on the scratch_obstack. */
1287 scratch_ovl_cons (value, chain)
1291 register struct obstack *ambient_obstack = current_obstack;
1292 extern struct obstack *expression_obstack;
1293 current_obstack = expression_obstack;
1294 node = ovl_cons (value, chain);
1295 current_obstack = ambient_obstack;
1299 /* Build a new overloaded function. If this is the first one,
1300 just return it; otherwise, ovl_cons the _DECLs */
1303 build_overload (decl, chain)
1307 if (! chain && TREE_CODE (decl) != TEMPLATE_DECL)
1309 if (chain && TREE_CODE (chain) != OVERLOAD)
1310 chain = ovl_cons (chain, NULL_TREE);
1311 return ovl_cons (decl, chain);
1314 /* Returns true iff functions are equivalent. Equivalent functions are
1315 not identical only if one is a function-local extern function.
1316 This assumes that function-locals don't have TREE_PERMANENT. */
1319 equal_functions (fn1, fn2)
1323 if (!TREE_PERMANENT (fn1) || !TREE_PERMANENT (fn2))
1324 return decls_match (fn1, fn2);
1328 /* True if fn is in ovl. */
1331 ovl_member (fn, ovl)
1335 if (ovl == NULL_TREE)
1337 if (TREE_CODE (ovl) != OVERLOAD)
1338 return equal_functions (ovl, fn);
1339 for (; ovl; ovl = OVL_CHAIN (ovl))
1340 if (equal_functions (OVL_FUNCTION (ovl), fn))
1346 is_aggr_type_2 (t1, t2)
1349 if (TREE_CODE (t1) != TREE_CODE (t2))
1351 return IS_AGGR_TYPE (t1) && IS_AGGR_TYPE (t2);
1354 #define PRINT_RING_SIZE 4
1357 lang_printable_name (decl, v)
1361 static tree decl_ring[PRINT_RING_SIZE];
1362 static char *print_ring[PRINT_RING_SIZE];
1363 static int ring_counter;
1366 /* Only cache functions. */
1368 || TREE_CODE (decl) != FUNCTION_DECL
1369 || DECL_LANG_SPECIFIC (decl) == 0)
1370 return lang_decl_name (decl, v);
1372 /* See if this print name is lying around. */
1373 for (i = 0; i < PRINT_RING_SIZE; i++)
1374 if (decl_ring[i] == decl)
1375 /* yes, so return it. */
1376 return print_ring[i];
1378 if (++ring_counter == PRINT_RING_SIZE)
1381 if (current_function_decl != NULL_TREE)
1383 if (decl_ring[ring_counter] == current_function_decl)
1385 if (ring_counter == PRINT_RING_SIZE)
1387 if (decl_ring[ring_counter] == current_function_decl)
1388 my_friendly_abort (106);
1391 if (print_ring[ring_counter])
1392 free (print_ring[ring_counter]);
1394 print_ring[ring_counter] = xstrdup (lang_decl_name (decl, v));
1395 decl_ring[ring_counter] = decl;
1396 return print_ring[ring_counter];
1399 /* Build the FUNCTION_TYPE or METHOD_TYPE which may throw exceptions
1400 listed in RAISES. */
1403 build_exception_variant (type, raises)
1407 tree v = TYPE_MAIN_VARIANT (type);
1408 int type_quals = TYPE_QUALS (type);
1410 for (; v; v = TYPE_NEXT_VARIANT (v))
1415 if (TYPE_QUALS (v) != type_quals)
1418 for (t = TYPE_RAISES_EXCEPTIONS (v), u = raises;
1419 t != NULL_TREE && u != NULL_TREE;
1420 t = TREE_CHAIN (t), u = TREE_CHAIN (v))
1421 if (((TREE_VALUE (t) != NULL_TREE)
1422 != (TREE_VALUE (u) != NULL_TREE))
1423 || !same_type_p (TREE_VALUE (t), TREE_VALUE (u)))
1427 /* There's a memory leak here; RAISES is not freed. */
1431 /* Need to build a new variant. */
1432 v = build_type_copy (type);
1434 if (raises && ! TREE_PERMANENT (raises))
1435 raises = copy_to_permanent (raises);
1437 TYPE_RAISES_EXCEPTIONS (v) = raises;
1441 /* Given a TEMPLATE_TEMPLATE_PARM node T, create a new one together with its
1442 lang_specific field and its corresponding TEMPLATE_DECL node */
1445 copy_template_template_parm (t)
1448 tree template = TYPE_NAME (t);
1451 /* Make sure these end up on the permanent_obstack. */
1452 push_obstacks_nochange ();
1453 end_temporary_allocation ();
1455 t2 = make_lang_type (TEMPLATE_TEMPLATE_PARM);
1456 template = copy_node (template);
1457 copy_lang_decl (template);
1461 TREE_TYPE (template) = t2;
1462 TYPE_NAME (t2) = template;
1463 TYPE_STUB_DECL (t2) = template;
1465 /* No need to copy these */
1466 TYPE_FIELDS (t2) = TYPE_FIELDS (t);
1467 TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (t2)
1468 = TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (t);
1472 /* Walk through the tree structure T, applying func. If func ever returns
1473 non-null, return that value. */
1476 search_tree (t, func)
1478 tree (*func) PROTO((tree));
1480 #define TRY(ARG) if (tmp=search_tree (ARG, func), tmp != NULL_TREE) return tmp
1487 if (tmp = func (t), tmp != NULL_TREE)
1490 switch (TREE_CODE (t))
1495 case IDENTIFIER_NODE:
1502 case NAMESPACE_DECL:
1506 TRY (TREE_TYPE (t));
1510 TRY (TREE_TYPE (t));
1511 TRY (TREE_CHAIN (t));
1515 TRY (TREE_PURPOSE (t));
1516 TRY (TREE_VALUE (t));
1517 TRY (TREE_CHAIN (t));
1521 TRY (OVL_FUNCTION (t));
1522 TRY (OVL_CHAIN (t));
1527 int len = TREE_VEC_LENGTH (t);
1531 TRY (TREE_VEC_ELT (t, len));
1542 TRY (TREE_TYPE (t));
1547 case AGGR_INIT_EXPR:
1549 TRY (TREE_OPERAND (t, 0));
1550 TRY (TREE_OPERAND (t, 1));
1551 TRY (TREE_OPERAND (t, 2));
1558 case TRUNC_DIV_EXPR:
1559 case TRUNC_MOD_EXPR:
1567 case BIT_ANDTC_EXPR:
1568 case TRUTH_ANDIF_EXPR:
1569 case TRUTH_ORIF_EXPR:
1577 case FLOOR_DIV_EXPR:
1578 case ROUND_DIV_EXPR:
1580 case FLOOR_MOD_EXPR:
1581 case ROUND_MOD_EXPR:
1583 case PREDECREMENT_EXPR:
1584 case PREINCREMENT_EXPR:
1585 case POSTDECREMENT_EXPR:
1586 case POSTINCREMENT_EXPR:
1589 case TRY_CATCH_EXPR:
1590 case WITH_CLEANUP_EXPR:
1592 TRY (TREE_OPERAND (t, 0));
1593 TRY (TREE_OPERAND (t, 1));
1602 case TRUTH_NOT_EXPR:
1604 case NON_LVALUE_EXPR:
1606 case CLEANUP_POINT_EXPR:
1610 TRY (TREE_OPERAND (t, 0));
1615 case REINTERPRET_CAST_EXPR:
1616 case CONST_CAST_EXPR:
1617 case STATIC_CAST_EXPR:
1618 case DYNAMIC_CAST_EXPR:
1625 TRY (TREE_REALPART (t));
1626 TRY (TREE_IMAGPART (t));
1630 TRY (CONSTRUCTOR_ELTS (t));
1633 case TEMPLATE_TEMPLATE_PARM:
1634 case TEMPLATE_PARM_INDEX:
1635 case TEMPLATE_TYPE_PARM:
1652 case REFERENCE_TYPE:
1653 TRY (TREE_TYPE (t));
1658 TRY (TREE_TYPE (t));
1659 TRY (TYPE_ARG_TYPES (t));
1663 TRY (TREE_TYPE (t));
1664 TRY (TYPE_DOMAIN (t));
1668 TRY (TYPE_MAX_VALUE (t));
1672 TRY (TREE_TYPE (t));
1673 TRY (TYPE_OFFSET_BASETYPE (t));
1677 if (TYPE_PTRMEMFUNC_P (t))
1678 TRY (TYPE_PTRMEMFUNC_FN_TYPE (t));
1681 /* This list is incomplete, but should suffice for now.
1682 It is very important that `sorry' not call
1683 `report_error_function'. That could cause an infinite loop. */
1685 sorry ("initializer contains unrecognized tree code");
1686 return error_mark_node;
1695 /* Passed to search_tree. Checks for the use of types with no linkage. */
1698 no_linkage_helper (t)
1702 && (IS_AGGR_TYPE (t) || TREE_CODE (t) == ENUMERAL_TYPE)
1703 && (decl_function_context (TYPE_MAIN_DECL (t))
1704 || ANON_AGGRNAME_P (TYPE_IDENTIFIER (t))))
1709 /* Check if the type T depends on a type with no linkage and if so, return
1713 no_linkage_check (t)
1716 t = search_tree (t, no_linkage_helper);
1717 if (t != error_mark_node)
1723 /* Subroutine of copy_to_permanent
1725 Assuming T is a node build bottom-up, make it all exist on
1726 permanent obstack, if it is not permanent already. */
1731 tree (*func) PROTO((tree));
1738 if (tmp = func (t), tmp != NULL_TREE)
1741 switch (TREE_CODE (t))
1744 return error_mark_node;
1749 /* Rather than aborting, return error_mark_node. This allows us
1750 to report a sensible error message on code like this:
1752 void g() { int i; f<i>(7); }
1756 void g() { const int i = 7; f<i>(7); }
1758 however, we must actually return the constant initializer. */
1759 if (TREE_READONLY_DECL_P (t))
1761 tmp = decl_constant_value (t);
1763 return mapcar (tmp, func);
1765 return error_mark_node;
1769 tree chain = TREE_CHAIN (t);
1771 TREE_CHAIN (t) = mapcar (chain, func);
1772 TREE_TYPE (t) = mapcar (TREE_TYPE (t), func);
1773 DECL_INITIAL (t) = mapcar (DECL_INITIAL (t), func);
1774 DECL_SIZE (t) = mapcar (DECL_SIZE (t), func);
1780 tree chain = TREE_CHAIN (t);
1782 TREE_PURPOSE (t) = mapcar (TREE_PURPOSE (t), func);
1783 TREE_VALUE (t) = mapcar (TREE_VALUE (t), func);
1784 TREE_CHAIN (t) = mapcar (chain, func);
1790 tree chain = OVL_CHAIN (t);
1792 OVL_FUNCTION (t) = mapcar (OVL_FUNCTION (t), func);
1793 OVL_CHAIN (t) = mapcar (chain, func);
1799 int len = TREE_VEC_LENGTH (t);
1803 TREE_VEC_ELT (t, len) = mapcar (TREE_VEC_ELT (t, len), func);
1810 return copy_node (t);
1814 TREE_TYPE (t) = mapcar (TREE_TYPE (t), func);
1815 PTRMEM_CST_MEMBER (t) = mapcar (PTRMEM_CST_MEMBER (t), func);
1820 case AGGR_INIT_EXPR:
1822 TREE_OPERAND (t, 0) = mapcar (TREE_OPERAND (t, 0), func);
1823 TREE_OPERAND (t, 1) = mapcar (TREE_OPERAND (t, 1), func);
1824 TREE_OPERAND (t, 2) = mapcar (TREE_OPERAND (t, 2), func);
1829 TREE_OPERAND (t, 0) = mapcar (TREE_OPERAND (t, 0), func);
1836 case TRUNC_DIV_EXPR:
1837 case TRUNC_MOD_EXPR:
1845 case BIT_ANDTC_EXPR:
1846 case TRUTH_ANDIF_EXPR:
1847 case TRUTH_ORIF_EXPR:
1855 case FLOOR_DIV_EXPR:
1856 case ROUND_DIV_EXPR:
1858 case FLOOR_MOD_EXPR:
1859 case ROUND_MOD_EXPR:
1861 case PREDECREMENT_EXPR:
1862 case PREINCREMENT_EXPR:
1863 case POSTDECREMENT_EXPR:
1864 case POSTINCREMENT_EXPR:
1867 case TRY_CATCH_EXPR:
1868 case WITH_CLEANUP_EXPR:
1870 TREE_OPERAND (t, 0) = mapcar (TREE_OPERAND (t, 0), func);
1871 TREE_OPERAND (t, 1) = mapcar (TREE_OPERAND (t, 1), func);
1876 TREE_TYPE (t) = mapcar (TREE_TYPE (t), func);
1877 TREE_OPERAND (t, 0) = mapcar (TREE_OPERAND (t, 0), func);
1878 TREE_OPERAND (t, 1) = mapcar (TREE_OPERAND (t, 1), func);
1880 /* tree.def says that operand two is RTL, but
1881 make_call_declarator puts trees in there. */
1882 if (TREE_OPERAND (t, 2)
1883 && TREE_CODE (TREE_OPERAND (t, 2)) == TREE_LIST)
1884 TREE_OPERAND (t, 2) = mapcar (TREE_OPERAND (t, 2), func);
1886 TREE_OPERAND (t, 2) = NULL_TREE;
1894 case TRUTH_NOT_EXPR:
1897 case CLEANUP_POINT_EXPR:
1899 TREE_TYPE (t) = mapcar (TREE_TYPE (t), func);
1900 TREE_OPERAND (t, 0) = mapcar (TREE_OPERAND (t, 0), func);
1904 tmp = build_pointer_type (mapcar (TREE_TYPE (t), func));
1905 return cp_build_qualified_type (tmp, TYPE_QUALS (t));
1906 case REFERENCE_TYPE:
1907 tmp = build_reference_type (mapcar (TREE_TYPE (t), func));
1908 return cp_build_qualified_type (tmp, TYPE_QUALS (t));
1910 tmp = build_function_type (mapcar (TREE_TYPE (t), func),
1911 mapcar (TYPE_ARG_TYPES (t), func));
1912 return cp_build_qualified_type (tmp, TYPE_QUALS (t));
1914 tmp = build_cplus_array_type (mapcar (TREE_TYPE (t), func),
1915 mapcar (TYPE_DOMAIN (t), func));
1916 return cp_build_qualified_type (tmp, CP_TYPE_QUALS (t));
1918 tmp = build_index_type (mapcar (TYPE_MAX_VALUE (t), func));
1919 return cp_build_qualified_type (tmp, TYPE_QUALS (t));
1921 tmp = build_offset_type (mapcar (TYPE_OFFSET_BASETYPE (t), func),
1922 mapcar (TREE_TYPE (t), func));
1923 return cp_build_qualified_type (tmp, TYPE_QUALS (t));
1925 tmp = build_cplus_method_type
1926 (mapcar (TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (t))), func),
1927 mapcar (TREE_TYPE (t), func),
1928 mapcar (TREE_CHAIN (TYPE_ARG_TYPES (t)), func));
1929 return cp_build_qualified_type (tmp, TYPE_QUALS (t));
1933 TREE_REALPART (t) = mapcar (TREE_REALPART (t), func);
1934 TREE_IMAGPART (t) = mapcar (TREE_REALPART (t), func);
1939 CONSTRUCTOR_ELTS (t) = mapcar (CONSTRUCTOR_ELTS (t), func);
1942 case TEMPLATE_TEMPLATE_PARM:
1943 return copy_template_template_parm (t);
1947 TREE_OPERAND (t, 0) = mapcar (TREE_OPERAND (t, 0), func);
1948 TREE_OPERAND (t, 1) = mapcar (TREE_OPERAND (t, 1), func);
1949 TREE_OPERAND (t, 2) = NULL_TREE;
1954 TREE_OPERAND (t, 0) = mapcar (TREE_OPERAND (t, 0), func);
1955 TREE_OPERAND (t, 1) = mapcar (TREE_OPERAND (t, 1), func);
1956 TREE_OPERAND (t, 2) = mapcar (TREE_OPERAND (t, 2), func);
1961 TREE_OPERAND (t, 0) = mapcar (TREE_OPERAND (t, 0), func);
1965 if (TYPE_PTRMEMFUNC_P (t))
1966 return build_ptrmemfunc_type
1967 (mapcar (TYPE_PTRMEMFUNC_FN_TYPE (t), func));
1968 /* else fall through */
1970 /* This list is incomplete, but should suffice for now.
1971 It is very important that `sorry' not call
1972 `report_error_function'. That could cause an infinite loop. */
1974 sorry ("initializer contains unrecognized tree code");
1975 return error_mark_node;
1978 my_friendly_abort (107);
1987 if (TREE_PERMANENT (t))
1990 /* Support `void f () { extern int i; A<&i> a; }' */
1991 if ((TREE_CODE (t) == VAR_DECL || TREE_CODE (t) == FUNCTION_DECL)
1996 /* copy_rtx won't make a new SYMBOL_REF, so call make_decl_rtl again. */
1998 make_decl_rtl (t, NULL_PTR, 1);
2005 /* Assuming T is a node built bottom-up, make it all exist on
2006 permanent obstack, if it is not permanent already. */
2009 copy_to_permanent (t)
2012 if (t == NULL_TREE || TREE_PERMANENT (t))
2015 push_obstacks_nochange ();
2016 end_temporary_allocation ();
2018 t = mapcar (t, perm_manip);
2025 #ifdef GATHER_STATISTICS
2026 extern int depth_reached;
2030 print_lang_statistics ()
2032 extern struct obstack decl_obstack;
2033 print_obstack_statistics ("class_obstack", &class_obstack);
2034 print_obstack_statistics ("decl_obstack", &decl_obstack);
2035 print_search_statistics ();
2036 print_class_statistics ();
2037 #ifdef GATHER_STATISTICS
2038 fprintf (stderr, "maximum template instantiation depth reached: %d\n",
2043 /* This is used by the `assert' macro. It is provided in libgcc.a,
2044 which `cc' doesn't know how to link. Note that the C++ front-end
2045 no longer actually uses the `assert' macro (instead, it calls
2046 my_friendly_assert). But all of the back-end files still need this. */
2049 __eprintf (string, expression, line, filename)
2051 const char *expression;
2053 const char *filename;
2055 fprintf (stderr, string, expression, line, filename);
2060 /* Return, as an INTEGER_CST node, the number of elements for TYPE
2061 (which is an ARRAY_TYPE). This counts only elements of the top
2065 array_type_nelts_top (type)
2068 return fold (build (PLUS_EXPR, sizetype,
2069 array_type_nelts (type),
2073 /* Return, as an INTEGER_CST node, the number of elements for TYPE
2074 (which is an ARRAY_TYPE). This one is a recursive count of all
2075 ARRAY_TYPEs that are clumped together. */
2078 array_type_nelts_total (type)
2081 tree sz = array_type_nelts_top (type);
2082 type = TREE_TYPE (type);
2083 while (TREE_CODE (type) == ARRAY_TYPE)
2085 tree n = array_type_nelts_top (type);
2086 sz = fold (build (MULT_EXPR, sizetype, sz, n));
2087 type = TREE_TYPE (type);
2097 if (TREE_CODE (t) != TREE_LIST && ! TREE_SIDE_EFFECTS (t))
2099 else if (TREE_CODE (t) == TARGET_EXPR)
2101 if (TREE_CODE (TREE_OPERAND (t, 1)) == AGGR_INIT_EXPR)
2103 mark_used (TREE_OPERAND (TREE_OPERAND (TREE_OPERAND (t, 1), 0), 0));
2104 return build_cplus_new
2105 (TREE_TYPE (t), break_out_target_exprs (TREE_OPERAND (t, 1)));
2108 TREE_OPERAND (t, 0) = build (VAR_DECL, TREE_TYPE (t));
2109 layout_decl (TREE_OPERAND (t, 0), 0);
2112 else if (TREE_CODE (t) == CALL_EXPR)
2113 mark_used (TREE_OPERAND (TREE_OPERAND (t, 0), 0));
2118 /* Actually, we'll just clean out the target exprs for the moment. */
2121 break_out_target_exprs (t)
2124 return mapcar (t, bot_manip);
2127 /* Obstack used for allocating nodes in template function and variable
2130 /* Similar to `build_nt', except we build
2131 on the permanent_obstack, regardless. */
2134 build_min_nt VPROTO((enum tree_code code, ...))
2137 enum tree_code code;
2139 register struct obstack *ambient_obstack = expression_obstack;
2142 register int length;
2148 code = va_arg (p, enum tree_code);
2151 expression_obstack = &permanent_obstack;
2153 t = make_node (code);
2154 length = tree_code_length[(int) code];
2155 TREE_COMPLEXITY (t) = lineno;
2157 for (i = 0; i < length; i++)
2159 tree x = va_arg (p, tree);
2160 TREE_OPERAND (t, i) = copy_to_permanent (x);
2164 expression_obstack = ambient_obstack;
2168 /* Similar to `build', except we build
2169 on the permanent_obstack, regardless. */
2172 build_min VPROTO((enum tree_code code, tree tt, ...))
2175 enum tree_code code;
2178 register struct obstack *ambient_obstack = expression_obstack;
2181 register int length;
2187 code = va_arg (p, enum tree_code);
2188 tt = va_arg (p, tree);
2191 expression_obstack = &permanent_obstack;
2193 t = make_node (code);
2194 length = tree_code_length[(int) code];
2195 TREE_TYPE (t) = copy_to_permanent (tt);
2196 TREE_COMPLEXITY (t) = lineno;
2198 for (i = 0; i < length; i++)
2200 tree x = va_arg (p, tree);
2201 TREE_OPERAND (t, i) = copy_to_permanent (x);
2205 expression_obstack = ambient_obstack;
2209 /* Same as `tree_cons' but make a permanent object. */
2212 min_tree_cons (purpose, value, chain)
2213 tree purpose, value, chain;
2216 register struct obstack *ambient_obstack = current_obstack;
2217 current_obstack = &permanent_obstack;
2219 node = tree_cons (copy_to_permanent (purpose),
2220 copy_to_permanent (value), chain);
2221 current_obstack = ambient_obstack;
2229 if (TREE_CODE (t) == TYPE_DECL)
2231 if (TREE_CODE_CLASS (TREE_CODE (t)) == 't')
2232 return TYPE_STUB_DECL (t);
2234 my_friendly_abort (42);
2236 /* Stop compiler from complaining control reaches end of non-void function. */
2241 can_free (obstack, t)
2242 struct obstack *obstack;
2247 if (TREE_CODE (t) == TREE_VEC)
2248 size = (TREE_VEC_LENGTH (t)-1) * sizeof (tree) + sizeof (struct tree_vec);
2250 my_friendly_abort (42);
2252 #define ROUND(x) ((x + obstack_alignment_mask (obstack)) \
2253 & ~ obstack_alignment_mask (obstack))
2254 if ((char *)t + ROUND (size) == obstack_next_free (obstack))
2261 /* Return first vector element whose BINFO_TYPE is ELEM.
2262 Return 0 if ELEM is not in VEC. VEC may be NULL_TREE. */
2265 vec_binfo_member (elem, vec)
2271 for (i = 0; i < TREE_VEC_LENGTH (vec); ++i)
2272 if (same_type_p (elem, BINFO_TYPE (TREE_VEC_ELT (vec, i))))
2273 return TREE_VEC_ELT (vec, i);
2278 /* Kludge around the fact that DECL_CONTEXT for virtual functions returns
2279 the wrong thing for decl_function_context. Hopefully the uses in the
2280 backend won't matter, since we don't need a static chain for local class
2284 hack_decl_function_context (decl)
2287 if (TREE_CODE (decl) == FUNCTION_DECL && DECL_FUNCTION_MEMBER_P (decl))
2288 return decl_function_context (TYPE_MAIN_DECL (DECL_CLASS_CONTEXT (decl)));
2289 return decl_function_context (decl);
2292 /* Returns the namespace that contains DECL, whether directly or
2296 decl_namespace_context (decl)
2301 if (TREE_CODE (decl) == NAMESPACE_DECL)
2303 else if (TYPE_P (decl))
2304 decl = CP_DECL_CONTEXT (TYPE_MAIN_DECL (decl));
2306 decl = CP_DECL_CONTEXT (decl);
2310 /* Return truthvalue of whether T1 is the same tree structure as T2.
2311 Return 1 if they are the same.
2312 Return 0 if they are understandably different.
2313 Return -1 if either contains tree structure not understood by
2317 cp_tree_equal (t1, t2)
2320 register enum tree_code code1, code2;
2325 if (t1 == 0 || t2 == 0)
2328 code1 = TREE_CODE (t1);
2329 code2 = TREE_CODE (t2);
2331 if (code1 == NOP_EXPR || code1 == CONVERT_EXPR || code1 == NON_LVALUE_EXPR)
2333 if (code2 == NOP_EXPR || code2 == CONVERT_EXPR || code2 == NON_LVALUE_EXPR)
2334 return cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
2336 return cp_tree_equal (TREE_OPERAND (t1, 0), t2);
2338 else if (code2 == NOP_EXPR || code2 == CONVERT_EXPR
2339 || code2 == NON_LVALUE_EXPR)
2340 return cp_tree_equal (t1, TREE_OPERAND (t2, 0));
2348 return TREE_INT_CST_LOW (t1) == TREE_INT_CST_LOW (t2)
2349 && TREE_INT_CST_HIGH (t1) == TREE_INT_CST_HIGH (t2);
2352 return REAL_VALUES_EQUAL (TREE_REAL_CST (t1), TREE_REAL_CST (t2));
2355 return TREE_STRING_LENGTH (t1) == TREE_STRING_LENGTH (t2)
2356 && !bcmp (TREE_STRING_POINTER (t1), TREE_STRING_POINTER (t2),
2357 TREE_STRING_LENGTH (t1));
2360 /* We need to do this when determining whether or not two
2361 non-type pointer to member function template arguments
2363 if (!(same_type_p (TREE_TYPE (t1), TREE_TYPE (t2))
2364 /* The first operand is RTL. */
2365 && TREE_OPERAND (t1, 0) == TREE_OPERAND (t2, 0)))
2367 return cp_tree_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
2370 cmp = cp_tree_equal (TREE_PURPOSE (t1), TREE_PURPOSE (t2));
2373 cmp = cp_tree_equal (TREE_VALUE (t1), TREE_VALUE (t2));
2376 return cp_tree_equal (TREE_CHAIN (t1), TREE_CHAIN (t2));
2379 return cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
2382 cmp = cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
2385 return simple_cst_list_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
2388 /* Special case: if either target is an unallocated VAR_DECL,
2389 it means that it's going to be unified with whatever the
2390 TARGET_EXPR is really supposed to initialize, so treat it
2391 as being equivalent to anything. */
2392 if ((TREE_CODE (TREE_OPERAND (t1, 0)) == VAR_DECL
2393 && DECL_NAME (TREE_OPERAND (t1, 0)) == NULL_TREE
2394 && DECL_RTL (TREE_OPERAND (t1, 0)) == 0)
2395 || (TREE_CODE (TREE_OPERAND (t2, 0)) == VAR_DECL
2396 && DECL_NAME (TREE_OPERAND (t2, 0)) == NULL_TREE
2397 && DECL_RTL (TREE_OPERAND (t2, 0)) == 0))
2400 cmp = cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
2403 return cp_tree_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
2405 case WITH_CLEANUP_EXPR:
2406 cmp = cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
2409 return cp_tree_equal (TREE_OPERAND (t1, 2), TREE_OPERAND (t1, 2));
2412 if (TREE_OPERAND (t1, 1) == TREE_OPERAND (t2, 1))
2413 return cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
2422 case TEMPLATE_PARM_INDEX:
2423 return TEMPLATE_PARM_IDX (t1) == TEMPLATE_PARM_IDX (t2)
2424 && TEMPLATE_PARM_LEVEL (t1) == TEMPLATE_PARM_LEVEL (t2);
2428 if (TREE_CODE (TREE_OPERAND (t1, 0)) != TREE_CODE (TREE_OPERAND (t2, 0)))
2430 if (TREE_CODE_CLASS (TREE_CODE (TREE_OPERAND (t1, 0))) == 't')
2431 return same_type_p (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
2435 /* Two pointer-to-members are the same if they point to the same
2436 field or function in the same class. */
2437 return (PTRMEM_CST_MEMBER (t1) == PTRMEM_CST_MEMBER (t2)
2438 && same_type_p (PTRMEM_CST_CLASS (t1), PTRMEM_CST_CLASS (t2)));
2444 switch (TREE_CODE_CLASS (code1))
2454 for (i=0; i<tree_code_length[(int) code1]; ++i)
2456 cmp = cp_tree_equal (TREE_OPERAND (t1, i), TREE_OPERAND (t2, i));
2466 /* Similar to make_tree_vec, but build on the momentary_obstack.
2467 Thus, these vectors are really and truly temporary. */
2474 push_expression_obstack ();
2475 node = make_tree_vec (len);
2480 /* Build a wrapper around some pointer PTR so we can use it as a tree. */
2483 build_ptr_wrapper (ptr)
2486 tree t = make_node (WRAPPER);
2487 WRAPPER_PTR (t) = ptr;
2491 /* Same, but on the expression_obstack. */
2494 build_expr_ptr_wrapper (ptr)
2498 push_expression_obstack ();
2499 t = build_ptr_wrapper (ptr);
2504 /* Build a wrapper around some integer I so we can use it as a tree. */
2507 build_int_wrapper (i)
2510 tree t = make_node (WRAPPER);
2511 WRAPPER_INT (t) = i;
2516 build_srcloc (file, line)
2522 /* Make sure that we put these on the permanent obstack; up in
2523 add_pending_template, we pass this return value into perm_tree_cons,
2524 which also puts it on the permanent_obstack. However, this wasn't
2525 explicitly doing the same. */
2526 register struct obstack *ambient_obstack = current_obstack;
2527 current_obstack = &permanent_obstack;
2529 t = make_node (SRCLOC);
2530 SRCLOC_FILE (t) = file;
2531 SRCLOC_LINE (t) = line;
2533 current_obstack = ambient_obstack;
2539 build_srcloc_here ()
2541 return build_srcloc (input_filename, lineno);
2545 push_expression_obstack ()
2547 push_obstacks_nochange ();
2548 current_obstack = expression_obstack;
2551 /* The type of ARG when used as an lvalue. */
2557 tree type = TREE_TYPE (arg);
2558 if (TREE_CODE (arg) == OVERLOAD)
2559 type = unknown_type_node;
2563 /* The type of ARG for printing error messages; denote lvalues with
2570 tree type = TREE_TYPE (arg);
2571 if (TREE_CODE (type) == ARRAY_TYPE)
2573 else if (real_lvalue_p (arg))
2574 type = build_reference_type (lvalue_type (arg));
2575 else if (IS_AGGR_TYPE (type))
2576 type = lvalue_type (arg);
2581 /* Does FUNCTION use a variable-length argument list? */
2584 varargs_function_p (function)
2587 tree parm = TYPE_ARG_TYPES (TREE_TYPE (function));
2588 for (; parm; parm = TREE_CHAIN (parm))
2589 if (TREE_VALUE (parm) == void_type_node)
2594 /* Returns 1 if decl is a member of a class. */
2600 tree ctx = DECL_CONTEXT (decl);
2601 return (ctx && TREE_CODE_CLASS (TREE_CODE (ctx)) == 't');
2604 /* Create a placeholder for member access where we don't actually have an
2605 object that the access is against. */
2608 build_dummy_object (type)
2611 tree decl = build1 (NOP_EXPR, build_pointer_type (type), void_zero_node);
2612 return build_indirect_ref (decl, NULL_PTR);
2615 /* We've gotten a reference to a member of TYPE. Return *this if appropriate,
2616 or a dummy object otherwise. If BINFOP is non-0, it is filled with the
2617 binfo path from current_class_type to TYPE, or 0. */
2620 maybe_dummy_object (type, binfop)
2626 if (current_class_type
2627 && get_base_distance (type, current_class_type, 0, binfop) != -1)
2628 context = current_class_type;
2631 /* Reference from a nested class member function. */
2634 *binfop = TYPE_BINFO (type);
2637 if (current_class_ref && context == current_class_type)
2638 decl = current_class_ref;
2640 decl = build_dummy_object (context);
2645 /* Returns 1 if OB is a placeholder object, or a pointer to one. */
2648 is_dummy_object (ob)
2651 if (TREE_CODE (ob) == INDIRECT_REF)
2652 ob = TREE_OPERAND (ob, 0);
2653 return (TREE_CODE (ob) == NOP_EXPR
2654 && TREE_OPERAND (ob, 0) == void_zero_node);
2657 /* Returns 1 iff type T is a POD type, as defined in [basic.types]. */
2665 while (TREE_CODE (t) == ARRAY_TYPE)
2668 if (! IS_AGGR_TYPE (t))
2671 if (CLASSTYPE_NON_AGGREGATE (t)
2672 || TYPE_HAS_COMPLEX_ASSIGN_REF (t)
2673 || TYPE_HAS_DESTRUCTOR (t))
2676 for (f = TYPE_FIELDS (t); f; f = TREE_CHAIN (f))
2678 if (TREE_CODE (f) != FIELD_DECL)
2681 if (TREE_CODE (TREE_TYPE (f)) == REFERENCE_TYPE
2682 || TYPE_PTRMEMFUNC_P (TREE_TYPE (f))
2683 || TYPE_PTRMEM_P (TREE_TYPE (f)))
2690 /* A list of objects which have constructors or destructors
2691 which reside in the global scope. The decl is stored in
2692 the TREE_VALUE slot and the initializer is stored
2693 in the TREE_PURPOSE slot. */
2694 tree static_aggregates_initp;
2696 /* Return a 1 if ATTR_NAME and ATTR_ARGS denote a valid C++-specific
2697 attribute for either declaration DECL or type TYPE and 0 otherwise.
2698 Plugged into valid_lang_attribute. */
2701 cp_valid_lang_attribute (attr_name, attr_args, decl, type)
2703 tree attr_args ATTRIBUTE_UNUSED;
2704 tree decl ATTRIBUTE_UNUSED;
2705 tree type ATTRIBUTE_UNUSED;
2707 if (is_attribute_p ("com_interface", attr_name))
2709 if (! flag_vtable_thunks)
2711 error ("`com_interface' only supported with -fvtable-thunks");
2715 if (attr_args != NULL_TREE
2716 || decl != NULL_TREE
2717 || ! CLASS_TYPE_P (type)
2718 || type != TYPE_MAIN_VARIANT (type))
2720 warning ("`com_interface' attribute can only be applied to class definitions");
2724 CLASSTYPE_COM_INTERFACE (type) = 1;
2727 else if (is_attribute_p ("init_priority", attr_name))
2729 tree initp_expr = (attr_args ? TREE_VALUE (attr_args): NULL_TREE);
2733 STRIP_NOPS (initp_expr);
2735 if (!initp_expr || TREE_CODE (initp_expr) != INTEGER_CST)
2737 error ("requested init_priority is not an integer constant");
2741 pri = TREE_INT_CST_LOW (initp_expr);
2743 while (TREE_CODE (type) == ARRAY_TYPE)
2744 type = TREE_TYPE (type);
2746 if (decl == NULL_TREE
2747 || TREE_CODE (decl) != VAR_DECL
2748 || ! TREE_STATIC (decl)
2749 || DECL_EXTERNAL (decl)
2750 || (TREE_CODE (type) != RECORD_TYPE
2751 && TREE_CODE (type) != UNION_TYPE)
2752 /* Static objects in functions are initialized the
2753 first time control passes through that
2754 function. This is not precise enough to pin down an
2755 init_priority value, so don't allow it. */
2756 || current_function_decl)
2758 error ("can only use init_priority attribute on file-scope definitions of objects of class type");
2762 if (pri > MAX_INIT_PRIORITY || pri <= 0)
2764 error ("requested init_priority is out of range");
2768 /* Check for init_priorities that are reserved for
2769 language and runtime support implementations.*/
2770 if (pri <= MAX_RESERVED_INIT_PRIORITY)
2773 ("requested init_priority is reserved for internal use");
2776 static_aggregates_initp
2777 = perm_tree_cons (initp_expr, decl, static_aggregates_initp);