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:
75 return lvalue_p_1 (TREE_OPERAND (ref, 0),
76 treat_class_rvalues_as_lvalues);
82 if (TREE_READONLY (ref) && ! TREE_STATIC (ref)
83 && DECL_LANG_SPECIFIC (ref)
84 && DECL_IN_AGGR_P (ref))
90 if (TREE_CODE (TREE_TYPE (ref)) != METHOD_TYPE)
94 /* A currently unresolved scope ref. */
96 my_friendly_abort (103);
98 if (TREE_CODE (TREE_OPERAND (ref, 1)) == FUNCTION_DECL)
100 return (lvalue_p_1 (TREE_OPERAND (ref, 0),
101 treat_class_rvalues_as_lvalues)
102 && lvalue_p_1 (TREE_OPERAND (ref, 1),
103 treat_class_rvalues_as_lvalues));
107 return (lvalue_p_1 (TREE_OPERAND (ref, 1),
108 treat_class_rvalues_as_lvalues)
109 && lvalue_p_1 (TREE_OPERAND (ref, 2),
110 treat_class_rvalues_as_lvalues));
116 return lvalue_p_1 (TREE_OPERAND (ref, 1),
117 treat_class_rvalues_as_lvalues);
121 return (lvalue_p_1 (TREE_OPERAND (ref, 0),
122 treat_class_rvalues_as_lvalues)
123 && lvalue_p_1 (TREE_OPERAND (ref, 1),
124 treat_class_rvalues_as_lvalues));
127 return treat_class_rvalues_as_lvalues;
130 return (treat_class_rvalues_as_lvalues
131 && IS_AGGR_TYPE (TREE_TYPE (ref)));
134 /* All functions (except non-static-member functions) are
136 return !DECL_NONSTATIC_MEMBER_FUNCTION_P (ref);
145 /* Return nonzero if REF is an lvalue valid for this language.
146 Lvalues can be assigned, unless they have TREE_READONLY, or unless
147 they are FUNCTION_DECLs. Lvalues can have their address taken,
148 unless they have DECL_REGISTER. */
154 return lvalue_p_1 (ref, /*treat_class_rvalues_as_lvalues=*/0);
157 /* This differs from real_lvalue_p in that class rvalues are considered
164 return lvalue_p_1 (ref, /*treat_class_rvalues_as_lvalues=*/1);
167 /* Return nonzero if REF is an lvalue valid for this language;
168 otherwise, print an error message and return zero. */
171 lvalue_or_else (ref, string)
175 int win = lvalue_p (ref);
177 error ("non-lvalue in %s", string);
181 /* INIT is a CALL_EXPR which needs info about its target.
182 TYPE is the type that this initialization should appear to have.
184 Build an encapsulation of the initialization to perform
185 and return it so that it can be processed by language-independent
186 and language-specific expression expanders. */
189 build_cplus_new (type, init)
196 if (TREE_CODE (init) != CALL_EXPR && TREE_CODE (init) != AGGR_INIT_EXPR)
197 return convert (type, init);
199 slot = build (VAR_DECL, type);
200 DECL_ARTIFICIAL (slot) = 1;
201 layout_decl (slot, 0);
202 rval = build (AGGR_INIT_EXPR, type,
203 TREE_OPERAND (init, 0), TREE_OPERAND (init, 1), slot);
204 TREE_SIDE_EFFECTS (rval) = 1;
205 rval = build (TARGET_EXPR, type, slot, rval, NULL_TREE, NULL_TREE);
206 TREE_SIDE_EFFECTS (rval) = 1;
211 /* Encapsulate the expression INIT in a TARGET_EXPR. */
214 get_target_expr (init)
220 slot = build (VAR_DECL, TREE_TYPE (init));
221 DECL_ARTIFICIAL (slot) = 1;
222 layout_decl (slot, 0);
223 rval = build (TARGET_EXPR, TREE_TYPE (init), slot, init,
224 NULL_TREE, NULL_TREE);
225 TREE_SIDE_EFFECTS (rval) = 1;
230 /* Recursively search EXP for CALL_EXPRs that need cleanups and replace
231 these CALL_EXPRs with tree nodes that will perform the cleanups. */
234 break_out_cleanups (exp)
239 if (TREE_CODE (tmp) == CALL_EXPR
240 && TYPE_NEEDS_DESTRUCTOR (TREE_TYPE (tmp)))
241 return build_cplus_new (TREE_TYPE (tmp), tmp);
243 while (TREE_CODE (tmp) == NOP_EXPR
244 || TREE_CODE (tmp) == CONVERT_EXPR
245 || TREE_CODE (tmp) == NON_LVALUE_EXPR)
247 if (TREE_CODE (TREE_OPERAND (tmp, 0)) == CALL_EXPR
248 && TYPE_NEEDS_DESTRUCTOR (TREE_TYPE (TREE_OPERAND (tmp, 0))))
250 TREE_OPERAND (tmp, 0)
251 = build_cplus_new (TREE_TYPE (TREE_OPERAND (tmp, 0)),
252 TREE_OPERAND (tmp, 0));
256 tmp = TREE_OPERAND (tmp, 0);
261 /* Recursively perform a preorder search EXP for CALL_EXPRs, making
262 copies where they are found. Returns a deep copy all nodes transitively
263 containing CALL_EXPRs. */
266 break_out_calls (exp)
269 register tree t1, t2 = NULL_TREE;
270 register enum tree_code code;
271 register int changed = 0;
274 if (exp == NULL_TREE)
277 code = TREE_CODE (exp);
279 if (code == CALL_EXPR)
280 return copy_node (exp);
282 /* Don't try and defeat a save_expr, as it should only be done once. */
283 if (code == SAVE_EXPR)
286 switch (TREE_CODE_CLASS (code))
291 case 'c': /* a constant */
292 case 't': /* a type node */
293 case 'x': /* something random, like an identifier or an ERROR_MARK. */
296 case 'd': /* A decl node */
297 #if 0 /* This is bogus. jason 9/21/94 */
299 t1 = break_out_calls (DECL_INITIAL (exp));
300 if (t1 != DECL_INITIAL (exp))
302 exp = copy_node (exp);
303 DECL_INITIAL (exp) = t1;
308 case 'b': /* A block node */
310 /* Don't know how to handle these correctly yet. Must do a
311 break_out_calls on all DECL_INITIAL values for local variables,
312 and also break_out_calls on all sub-blocks and sub-statements. */
317 case 'e': /* an expression */
318 case 'r': /* a reference */
319 case 's': /* an expression with side effects */
320 for (i = tree_code_length[(int) code] - 1; i >= 0; i--)
322 t1 = break_out_calls (TREE_OPERAND (exp, i));
323 if (t1 != TREE_OPERAND (exp, i))
325 exp = copy_node (exp);
326 TREE_OPERAND (exp, i) = t1;
331 case '<': /* a comparison expression */
332 case '2': /* a binary arithmetic expression */
333 t2 = break_out_calls (TREE_OPERAND (exp, 1));
334 if (t2 != TREE_OPERAND (exp, 1))
336 case '1': /* a unary arithmetic expression */
337 t1 = break_out_calls (TREE_OPERAND (exp, 0));
338 if (t1 != TREE_OPERAND (exp, 0))
342 if (tree_code_length[(int) code] == 1)
343 return build1 (code, TREE_TYPE (exp), t1);
345 return build (code, TREE_TYPE (exp), t1, t2);
352 extern struct obstack *current_obstack;
353 extern struct obstack permanent_obstack, class_obstack;
354 extern struct obstack *saveable_obstack;
355 extern struct obstack *expression_obstack;
357 /* Here is how primitive or already-canonicalized types' hash
358 codes are made. MUST BE CONSISTENT WITH tree.c !!! */
359 #define TYPE_HASH(TYPE) ((HOST_WIDE_INT) (TYPE) & 0777777)
361 /* Construct, lay out and return the type of methods belonging to class
362 BASETYPE and whose arguments are described by ARGTYPES and whose values
363 are described by RETTYPE. If each type exists already, reuse it. */
366 build_cplus_method_type (basetype, rettype, argtypes)
367 tree basetype, rettype, argtypes;
373 /* Make a node of the sort we want. */
374 t = make_node (METHOD_TYPE);
376 TYPE_METHOD_BASETYPE (t) = TYPE_MAIN_VARIANT (basetype);
377 TREE_TYPE (t) = rettype;
378 if (IS_SIGNATURE (basetype))
379 ptype = build_signature_pointer_type (basetype);
381 ptype = build_pointer_type (basetype);
383 /* The actual arglist for this function includes a "hidden" argument
384 which is "this". Put it into the list of argument types. */
386 argtypes = tree_cons (NULL_TREE, ptype, argtypes);
387 TYPE_ARG_TYPES (t) = argtypes;
388 TREE_SIDE_EFFECTS (argtypes) = 1; /* Mark first argtype as "artificial". */
390 /* If we already have such a type, use the old one and free this one.
391 Note that it also frees up the above cons cell if found. */
392 hashcode = TYPE_HASH (basetype) + TYPE_HASH (rettype) + type_hash_list (argtypes);
393 t = type_hash_canon (hashcode, t);
395 if (TYPE_SIZE (t) == 0)
402 build_cplus_array_type_1 (elt_type, index_type)
406 register struct obstack *ambient_obstack = current_obstack;
407 register struct obstack *ambient_saveable_obstack = saveable_obstack;
410 /* We need a new one. If both ELT_TYPE and INDEX_TYPE are permanent,
411 make this permanent too. */
412 if (TREE_PERMANENT (elt_type)
413 && (index_type == 0 || TREE_PERMANENT (index_type)))
415 current_obstack = &permanent_obstack;
416 saveable_obstack = &permanent_obstack;
419 if (processing_template_decl
420 || uses_template_parms (elt_type)
421 || uses_template_parms (index_type))
423 t = make_node (ARRAY_TYPE);
424 TREE_TYPE (t) = elt_type;
425 TYPE_DOMAIN (t) = index_type;
428 t = build_array_type (elt_type, index_type);
430 /* Push these needs up so that initialization takes place
432 TYPE_NEEDS_CONSTRUCTING (t) = TYPE_NEEDS_CONSTRUCTING (TYPE_MAIN_VARIANT (elt_type));
433 TYPE_NEEDS_DESTRUCTOR (t) = TYPE_NEEDS_DESTRUCTOR (TYPE_MAIN_VARIANT (elt_type));
434 current_obstack = ambient_obstack;
435 saveable_obstack = ambient_saveable_obstack;
440 build_cplus_array_type (elt_type, index_type)
445 int type_quals = CP_TYPE_QUALS (elt_type);
447 elt_type = TYPE_MAIN_VARIANT (elt_type);
449 t = build_cplus_array_type_1 (elt_type, index_type);
451 if (type_quals != TYPE_UNQUALIFIED)
452 t = cp_build_qualified_type (t, type_quals);
457 /* Make a variant type in the proper way for C/C++, propagating qualifiers
458 down to the element type of an array. */
461 cp_build_qualified_type (type, type_quals)
465 if (type == error_mark_node)
468 /* A restrict-qualified pointer type must be a pointer (or reference)
469 to object or incomplete type. */
470 if ((type_quals & TYPE_QUAL_RESTRICT)
471 && (!POINTER_TYPE_P (type)
472 || TYPE_PTRMEM_P (type)
473 || TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE))
475 cp_error ("`%T' cannot be `restrict'-qualified", type);
476 type_quals &= ~TYPE_QUAL_RESTRICT;
479 if (TREE_CODE (type) == ARRAY_TYPE)
481 tree real_main_variant = TYPE_MAIN_VARIANT (type);
483 push_obstacks (TYPE_OBSTACK (real_main_variant),
484 TYPE_OBSTACK (real_main_variant));
485 type = build_cplus_array_type_1 (cp_build_qualified_type
486 (TREE_TYPE (type), type_quals),
489 /* TYPE must be on same obstack as REAL_MAIN_VARIANT. If not,
490 make a copy. (TYPE might have come from the hash table and
491 REAL_MAIN_VARIANT might be in some function's obstack.) */
493 if (TYPE_OBSTACK (type) != TYPE_OBSTACK (real_main_variant))
495 type = copy_node (type);
496 TYPE_POINTER_TO (type) = TYPE_REFERENCE_TO (type) = 0;
499 TYPE_MAIN_VARIANT (type) = real_main_variant;
503 return build_qualified_type (type, type_quals);
506 /* Returns the canonical version of TYPE. In other words, if TYPE is
507 a typedef, returns the underlying type. The cv-qualification of
508 the type returned matches the type input; they will always be
512 canonical_type_variant (t)
515 return cp_build_qualified_type (TYPE_MAIN_VARIANT (t), CP_TYPE_QUALS (t));
518 /* Add OFFSET to all base types of T.
520 OFFSET, which is a type offset, is number of bytes.
522 Note that we don't have to worry about having two paths to the
523 same base type, since this type owns its association list. */
526 propagate_binfo_offsets (binfo, offset)
530 tree binfos = BINFO_BASETYPES (binfo);
531 int i, n_baselinks = binfos ? TREE_VEC_LENGTH (binfos) : 0;
533 for (i = 0; i < n_baselinks; /* note increment is done in the loop. */)
535 tree base_binfo = TREE_VEC_ELT (binfos, i);
537 if (TREE_VIA_VIRTUAL (base_binfo))
542 tree delta = NULL_TREE;
544 for (j = i+1; j < n_baselinks; j++)
545 if (! TREE_VIA_VIRTUAL (TREE_VEC_ELT (binfos, j)))
547 /* The next basetype offset must take into account the space
548 between the classes, not just the size of each class. */
549 delta = size_binop (MINUS_EXPR,
550 BINFO_OFFSET (TREE_VEC_ELT (binfos, j)),
551 BINFO_OFFSET (base_binfo));
556 if (BINFO_OFFSET_ZEROP (base_binfo))
557 BINFO_OFFSET (base_binfo) = offset;
559 BINFO_OFFSET (base_binfo)
560 = size_binop (PLUS_EXPR, BINFO_OFFSET (base_binfo), offset);
562 BINFO_OFFSET (base_binfo) = offset;
565 propagate_binfo_offsets (base_binfo, offset);
567 /* Go to our next class that counts for offset propagation. */
570 offset = size_binop (PLUS_EXPR, offset, delta);
575 /* Makes new binfos for the indirect bases under BINFO, and updates
576 BINFO_OFFSET for them and their bases. */
579 unshare_base_binfos (binfo)
582 tree binfos = BINFO_BASETYPES (binfo);
586 if (binfos == NULL_TREE)
589 /* Now unshare the structure beneath BINFO. */
590 for (j = TREE_VEC_LENGTH (binfos)-1;
593 tree base_binfo = TREE_VEC_ELT (binfos, j);
594 new_binfo = TREE_VEC_ELT (binfos, j)
595 = make_binfo (BINFO_OFFSET (base_binfo),
597 BINFO_VTABLE (base_binfo),
598 BINFO_VIRTUALS (base_binfo));
599 TREE_VIA_PUBLIC (new_binfo) = TREE_VIA_PUBLIC (base_binfo);
600 TREE_VIA_PROTECTED (new_binfo) = TREE_VIA_PROTECTED (base_binfo);
601 TREE_VIA_VIRTUAL (new_binfo) = TREE_VIA_VIRTUAL (base_binfo);
602 BINFO_INHERITANCE_CHAIN (new_binfo) = binfo;
603 unshare_base_binfos (new_binfo);
607 /* Finish the work of layout_record, now taking virtual bases into account.
608 Also compute the actual offsets that our base classes will have.
609 This must be performed after the fields are laid out, since virtual
610 baseclasses must lay down at the end of the record.
612 Returns the maximum number of virtual functions any of the
613 baseclasses provide. */
616 layout_basetypes (rec, max)
620 tree binfos = TYPE_BINFO_BASETYPES (rec);
621 int i, n_baseclasses = binfos ? TREE_VEC_LENGTH (binfos) : 0;
625 unsigned int record_align = MAX (BITS_PER_UNIT, TYPE_ALIGN (rec));
626 unsigned int desired_align;
628 /* Record size so far is CONST_SIZE bits, where CONST_SIZE is an integer. */
629 register unsigned int const_size = 0;
630 unsigned int nonvirtual_const_size;
632 #ifdef STRUCTURE_SIZE_BOUNDARY
633 /* Packed structures don't need to have minimum size. */
634 if (! TYPE_PACKED (rec))
635 record_align = MAX (record_align, STRUCTURE_SIZE_BOUNDARY);
638 /* Get all the virtual base types that this type uses. The
639 TREE_VALUE slot holds the virtual baseclass type. Note that
640 get_vbase_types makes copies of the virtual base BINFOs, so that
641 the vbase_types are unshared. */
642 vbase_types = CLASSTYPE_VBASECLASSES (rec);
644 my_friendly_assert (TREE_CODE (TYPE_SIZE (rec)) == INTEGER_CST, 19970302);
645 const_size = TREE_INT_CST_LOW (TYPE_SIZE (rec));
647 nonvirtual_const_size = const_size;
651 tree basetype = BINFO_TYPE (vbase_types);
654 desired_align = TYPE_ALIGN (basetype);
655 record_align = MAX (record_align, desired_align);
658 offset = integer_zero_node;
661 /* Give each virtual base type the alignment it wants. */
662 const_size = CEIL (const_size, desired_align) * desired_align;
663 offset = size_int (CEIL (const_size, BITS_PER_UNIT));
666 if (CLASSTYPE_VSIZE (basetype) > max)
667 max = CLASSTYPE_VSIZE (basetype);
668 BINFO_OFFSET (vbase_types) = offset;
670 /* Every virtual baseclass takes a least a UNIT, so that we can
671 take it's address and get something different for each base. */
672 const_size += MAX (BITS_PER_UNIT,
673 TREE_INT_CST_LOW (CLASSTYPE_SIZE (basetype)));
675 vbase_types = TREE_CHAIN (vbase_types);
680 /* Because a virtual base might take a single byte above,
681 we have to re-adjust the total size to make sure it is
682 a multiple of the alignment. */
683 /* Give the whole object the alignment it wants. */
684 const_size = CEIL (const_size, record_align) * record_align;
687 /* Set the alignment in the complete type. We don't set CLASSTYPE_ALIGN
688 here, as that is for this class, without any virtual base classes. */
689 TYPE_ALIGN (rec) = record_align;
690 if (const_size != nonvirtual_const_size)
692 TYPE_SIZE (rec) = size_int (const_size);
693 TYPE_SIZE_UNIT (rec) = size_binop (FLOOR_DIV_EXPR, TYPE_SIZE (rec),
694 size_int (BITS_PER_UNIT));
697 /* Now propagate offset information throughout the lattice. */
698 for (i = 0; i < n_baseclasses; i++)
700 register tree base_binfo = TREE_VEC_ELT (binfos, i);
701 register tree basetype = BINFO_TYPE (base_binfo);
702 tree field = TYPE_FIELDS (rec);
704 if (TREE_VIA_VIRTUAL (base_binfo))
707 my_friendly_assert (TREE_TYPE (field) == basetype, 23897);
709 if (get_base_distance (basetype, rec, 0, (tree*)0) == -2)
710 cp_warning ("direct base `%T' inaccessible in `%T' due to ambiguity",
713 BINFO_OFFSET (base_binfo)
714 = size_int (CEIL (TREE_INT_CST_LOW (DECL_FIELD_BITPOS (field)),
716 propagate_binfo_offsets (base_binfo, BINFO_OFFSET (base_binfo));
717 TYPE_FIELDS (rec) = TREE_CHAIN (field);
720 for (vbase_types = CLASSTYPE_VBASECLASSES (rec); vbase_types;
721 vbase_types = TREE_CHAIN (vbase_types))
723 BINFO_INHERITANCE_CHAIN (vbase_types) = TYPE_BINFO (rec);
724 unshare_base_binfos (vbase_types);
725 propagate_binfo_offsets (vbase_types, BINFO_OFFSET (vbase_types));
729 tree basetype = BINFO_TYPE (vbase_types);
730 if (get_base_distance (basetype, rec, 0, (tree*)0) == -2)
731 cp_warning ("virtual base `%T' inaccessible in `%T' due to ambiguity",
739 /* If the empty base field in DECL overlaps with a base of the same type in
740 NEWDECL, which is either another base field or the first data field of
741 the class, pad the base just before NEWDECL and return 1. Otherwise,
745 avoid_overlap (decl, newdecl)
750 if (newdecl == NULL_TREE
751 || ! types_overlap_p (TREE_TYPE (decl), TREE_TYPE (newdecl)))
754 for (field = decl; TREE_CHAIN (field) && TREE_CHAIN (field) != newdecl;
755 field = TREE_CHAIN (field))
758 DECL_SIZE (field) = integer_one_node;
763 /* Returns a list of fields to stand in for the base class subobjects
764 of REC. These fields are later removed by layout_basetypes. */
767 build_base_fields (rec)
770 /* Chain to hold all the new FIELD_DECLs which stand in for base class
772 tree base_decls = NULL_TREE;
773 tree binfos = TYPE_BINFO_BASETYPES (rec);
774 int n_baseclasses = binfos ? TREE_VEC_LENGTH (binfos) : 0;
776 int i, saw_empty = 0;
777 unsigned int base_align = 0;
779 for (i = 0; i < n_baseclasses; ++i)
781 register tree base_binfo = TREE_VEC_ELT (binfos, i);
782 register tree basetype = BINFO_TYPE (base_binfo);
784 if (TYPE_SIZE (basetype) == 0)
785 /* This error is now reported in xref_tag, thus giving better
786 location information. */
789 if (TREE_VIA_VIRTUAL (base_binfo))
792 decl = build_lang_field_decl (FIELD_DECL, NULL_TREE, basetype);
793 DECL_ARTIFICIAL (decl) = 1;
794 DECL_FIELD_CONTEXT (decl) = DECL_CLASS_CONTEXT (decl) = rec;
795 DECL_SIZE (decl) = CLASSTYPE_SIZE (basetype);
796 DECL_ALIGN (decl) = CLASSTYPE_ALIGN (basetype);
797 TREE_CHAIN (decl) = base_decls;
802 /* Brain damage for backwards compatibility. For no good reason,
803 the old layout_basetypes made every base at least as large as
804 the alignment for the bases up to that point, gratuitously
805 wasting space. So we do the same thing here. */
806 base_align = MAX (base_align, DECL_ALIGN (decl));
808 = size_int (MAX (TREE_INT_CST_LOW (DECL_SIZE (decl)),
811 else if (DECL_SIZE (decl) == integer_zero_node)
815 /* Reverse the list of fields so we allocate the bases in the proper
817 base_decls = nreverse (base_decls);
819 /* In the presence of empty base classes, we run the risk of allocating
820 two objects of the same class on top of one another. Avoid that. */
821 if (flag_new_abi && saw_empty)
822 for (decl = base_decls; decl; decl = TREE_CHAIN (decl))
824 if (DECL_SIZE (decl) == integer_zero_node)
826 /* First step through the following bases until we find
827 an overlap or a non-empty base. */
828 for (nextdecl = TREE_CHAIN (decl); nextdecl;
829 nextdecl = TREE_CHAIN (nextdecl))
831 if (avoid_overlap (decl, nextdecl)
832 || DECL_SIZE (nextdecl) != integer_zero_node)
836 /* If we're still looking, also check against the first
838 for (nextdecl = TYPE_FIELDS (rec);
839 nextdecl && TREE_CODE (nextdecl) != FIELD_DECL;
840 nextdecl = TREE_CHAIN (nextdecl))
842 avoid_overlap (decl, nextdecl);
850 /* Returns list of virtual base class pointers in a FIELD_DECL chain. */
853 build_vbase_pointer_fields (rec)
856 /* Chain to hold all the new FIELD_DECLs which point at virtual
858 tree vbase_decls = NULL_TREE;
859 tree binfos = TYPE_BINFO_BASETYPES (rec);
860 int n_baseclasses = binfos ? TREE_VEC_LENGTH (binfos) : 0;
864 /* Handle basetypes almost like fields, but record their
865 offsets differently. */
867 for (i = 0; i < n_baseclasses; i++)
869 register tree base_binfo = TREE_VEC_ELT (binfos, i);
870 register tree basetype = BINFO_TYPE (base_binfo);
872 if (TYPE_SIZE (basetype) == 0)
873 /* This error is now reported in xref_tag, thus giving better
874 location information. */
877 /* All basetypes are recorded in the association list of the
880 if (TREE_VIA_VIRTUAL (base_binfo))
885 /* The offset for a virtual base class is only used in computing
886 virtual function tables and for initializing virtual base
887 pointers. It is built once `get_vbase_types' is called. */
889 /* If this basetype can come from another vbase pointer
890 without an additional indirection, we will share
891 that pointer. If an indirection is involved, we
892 make our own pointer. */
893 for (j = 0; j < n_baseclasses; j++)
895 tree other_base_binfo = TREE_VEC_ELT (binfos, j);
896 if (! TREE_VIA_VIRTUAL (other_base_binfo)
897 && binfo_member (basetype,
898 CLASSTYPE_VBASECLASSES (BINFO_TYPE
903 FORMAT_VBASE_NAME (name, basetype);
904 decl = build_lang_field_decl (FIELD_DECL, get_identifier (name),
905 build_pointer_type (basetype));
906 /* If you change any of the below, take a look at all the
907 other VFIELD_BASEs and VTABLE_BASEs in the code, and change
909 DECL_ASSEMBLER_NAME (decl) = get_identifier (VTABLE_BASE);
910 DECL_VIRTUAL_P (decl) = 1;
911 DECL_ARTIFICIAL (decl) = 1;
912 DECL_FIELD_CONTEXT (decl) = rec;
913 DECL_CLASS_CONTEXT (decl) = rec;
914 DECL_FCONTEXT (decl) = basetype;
915 DECL_SAVED_INSNS (decl) = NULL_RTX;
916 DECL_FIELD_SIZE (decl) = 0;
917 DECL_ALIGN (decl) = TYPE_ALIGN (ptr_type_node);
918 TREE_CHAIN (decl) = vbase_decls;
919 BINFO_VPTR_FIELD (base_binfo) = decl;
923 /* The space this decl occupies has already been accounted for. */
931 /* Hashing of lists so that we don't make duplicates.
932 The entry point is `list_hash_canon'. */
934 /* Each hash table slot is a bucket containing a chain
935 of these structures. */
939 struct list_hash *next; /* Next structure in the bucket. */
940 int hashcode; /* Hash code of this list. */
941 tree list; /* The list recorded here. */
944 /* Now here is the hash table. When recording a list, it is added
945 to the slot whose index is the hash code mod the table size.
946 Note that the hash table is used for several kinds of lists.
947 While all these live in the same table, they are completely independent,
948 and the hash code is computed differently for each of these. */
950 #define TYPE_HASH_SIZE 59
951 static struct list_hash *list_hash_table[TYPE_HASH_SIZE];
953 /* Compute a hash code for a list (chain of TREE_LIST nodes
954 with goodies in the TREE_PURPOSE, TREE_VALUE, and bits of the
955 TREE_COMMON slots), by adding the hash codes of the individual entries. */
958 list_hash (purpose, value, chain)
959 tree purpose, value, chain;
961 register int hashcode = 0;
964 hashcode += TYPE_HASH (chain);
967 hashcode += TYPE_HASH (value);
971 hashcode += TYPE_HASH (purpose);
977 /* Look in the type hash table for a type isomorphic to TYPE.
978 If one is found, return it. Otherwise return 0. */
981 list_hash_lookup (hashcode, purpose, value, chain)
983 tree purpose, value, chain;
985 register struct list_hash *h;
987 for (h = list_hash_table[hashcode % TYPE_HASH_SIZE]; h; h = h->next)
988 if (h->hashcode == hashcode
989 && TREE_PURPOSE (h->list) == purpose
990 && TREE_VALUE (h->list) == value
991 && TREE_CHAIN (h->list) == chain)
996 /* Add an entry to the list-hash-table
997 for a list TYPE whose hash code is HASHCODE. */
1000 list_hash_add (hashcode, list)
1004 register struct list_hash *h;
1006 h = (struct list_hash *) obstack_alloc (&class_obstack, sizeof (struct list_hash));
1007 h->hashcode = hashcode;
1009 h->next = list_hash_table[hashcode % TYPE_HASH_SIZE];
1010 list_hash_table[hashcode % TYPE_HASH_SIZE] = h;
1013 /* Given list components PURPOSE, VALUE, AND CHAIN, return the canonical
1014 object for an identical list if one already exists. Otherwise, build a
1015 new one, and record it as the canonical object. */
1017 /* Set to 1 to debug without canonicalization. Never set by program. */
1019 static int debug_no_list_hash = 0;
1022 hash_tree_cons (purpose, value, chain)
1023 tree purpose, value, chain;
1025 struct obstack *ambient_obstack = current_obstack;
1029 if (! debug_no_list_hash)
1031 hashcode = list_hash (purpose, value, chain);
1032 t = list_hash_lookup (hashcode, purpose, value, chain);
1037 current_obstack = &class_obstack;
1039 t = tree_cons (purpose, value, chain);
1041 /* If this is a new list, record it for later reuse. */
1042 if (! debug_no_list_hash)
1043 list_hash_add (hashcode, t);
1045 current_obstack = ambient_obstack;
1049 /* Constructor for hashed lists. */
1052 hash_tree_chain (value, chain)
1055 return hash_tree_cons (NULL_TREE, value, chain);
1058 /* Similar, but used for concatenating two lists. */
1061 hash_chainon (list1, list2)
1068 if (TREE_CHAIN (list1) == NULL_TREE)
1069 return hash_tree_chain (TREE_VALUE (list1), list2);
1070 return hash_tree_chain (TREE_VALUE (list1),
1071 hash_chainon (TREE_CHAIN (list1), list2));
1074 /* Build an association between TYPE and some parameters:
1076 OFFSET is the offset added to `this' to convert it to a pointer
1079 BINFO is the base binfo to use, if we are deriving from one. This
1080 is necessary, as we want specialized parent binfos from base
1081 classes, so that the VTABLE_NAMEs of bases are for the most derived
1082 type, instead of the simple type.
1084 VTABLE is the virtual function table with which to initialize
1085 sub-objects of type TYPE.
1087 VIRTUALS are the virtual functions sitting in VTABLE. */
1090 make_binfo (offset, binfo, vtable, virtuals)
1092 tree vtable, virtuals;
1094 tree new_binfo = make_tree_vec (7);
1097 if (TREE_CODE (binfo) == TREE_VEC)
1098 type = BINFO_TYPE (binfo);
1102 binfo = CLASS_TYPE_P (type) ? TYPE_BINFO (binfo) : NULL_TREE;
1105 TREE_TYPE (new_binfo) = TYPE_MAIN_VARIANT (type);
1106 BINFO_OFFSET (new_binfo) = offset;
1107 BINFO_VTABLE (new_binfo) = vtable;
1108 BINFO_VIRTUALS (new_binfo) = virtuals;
1109 BINFO_VPTR_FIELD (new_binfo) = NULL_TREE;
1111 if (binfo && BINFO_BASETYPES (binfo) != NULL_TREE)
1112 BINFO_BASETYPES (new_binfo) = copy_node (BINFO_BASETYPES (binfo));
1116 /* Return the binfo value for ELEM in TYPE. */
1119 binfo_value (elem, type)
1123 if (get_base_distance (elem, type, 0, (tree *)0) == -2)
1124 compiler_error ("base class `%s' ambiguous in binfo_value",
1125 TYPE_NAME_STRING (elem));
1127 return TYPE_BINFO (type);
1128 if (TREE_CODE (elem) == RECORD_TYPE && TYPE_BINFO (elem) == type)
1130 return get_binfo (elem, type, 0);
1133 /* Return a reversed copy of the BINFO-chain given by PATH. (If the
1134 BINFO_INHERITANCE_CHAIN points from base classes to derived
1135 classes, it will instead point from derived classes to base
1136 classes.) Returns the first node in the reversed chain. */
1142 register tree prev = NULL_TREE, cur;
1143 push_expression_obstack ();
1144 for (cur = path; cur; cur = BINFO_INHERITANCE_CHAIN (cur))
1146 tree r = copy_node (cur);
1147 BINFO_INHERITANCE_CHAIN (r) = prev;
1158 unsigned HOST_WIDE_INT n;
1161 fprintf (stderr, "type \"%s\"; offset = %ld\n",
1162 TYPE_NAME_STRING (BINFO_TYPE (elem)),
1163 (long) TREE_INT_CST_LOW (BINFO_OFFSET (elem)));
1164 fprintf (stderr, "vtable type:\n");
1165 debug_tree (BINFO_TYPE (elem));
1166 if (BINFO_VTABLE (elem))
1167 fprintf (stderr, "vtable decl \"%s\"\n", IDENTIFIER_POINTER (DECL_NAME (BINFO_VTABLE (elem))));
1169 fprintf (stderr, "no vtable decl yet\n");
1170 fprintf (stderr, "virtuals:\n");
1171 virtuals = BINFO_VIRTUALS (elem);
1173 n = skip_rtti_stuff (&virtuals, BINFO_TYPE (elem));
1177 tree fndecl = TREE_OPERAND (FNADDR_FROM_VTABLE_ENTRY (TREE_VALUE (virtuals)), 0);
1178 fprintf (stderr, "%s [%ld =? %ld]\n",
1179 IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (fndecl)),
1180 (long) n, (long) TREE_INT_CST_LOW (DECL_VINDEX (fndecl)));
1182 virtuals = TREE_CHAIN (virtuals);
1186 /* Initialize an CPLUS_BINDING node that does not live on an obstack. */
1190 struct tree_binding* node;
1192 static struct tree_binding* source;
1195 extern struct obstack permanent_obstack;
1196 push_obstacks (&permanent_obstack, &permanent_obstack);
1197 source = (struct tree_binding*)make_node (CPLUS_BINDING);
1201 TREE_PERMANENT ((tree)node) = 0;
1210 if (TREE_CODE (t) == FUNCTION_DECL)
1212 else if (TREE_CODE (t) == OVERLOAD)
1214 for (i=0; t; t = OVL_CHAIN (t))
1219 my_friendly_abort (359);
1224 is_overloaded_fn (x)
1227 /* A baselink is also considered an overloaded function. */
1228 if (TREE_CODE (x) == OFFSET_REF)
1229 x = TREE_OPERAND (x, 1);
1232 return (TREE_CODE (x) == FUNCTION_DECL
1233 || TREE_CODE (x) == TEMPLATE_ID_EXPR
1234 || DECL_FUNCTION_TEMPLATE_P (x)
1235 || TREE_CODE (x) == OVERLOAD);
1239 really_overloaded_fn (x)
1242 /* A baselink is also considered an overloaded function. */
1243 if (TREE_CODE (x) == OFFSET_REF)
1244 x = TREE_OPERAND (x, 1);
1247 return (TREE_CODE (x) == OVERLOAD
1248 && (TREE_CHAIN (x) != NULL_TREE
1249 || DECL_FUNCTION_TEMPLATE_P (OVL_FUNCTION (x))));
1256 my_friendly_assert (is_overloaded_fn (from), 9);
1257 /* A baselink is also considered an overloaded function. */
1258 if (BASELINK_P (from))
1259 from = TREE_VALUE (from);
1260 return OVL_CURRENT (from);
1263 /* Returns nonzero if T is a ->* or .* expression that refers to a
1270 return (TREE_CODE (t) == OFFSET_REF
1271 && TYPE_PTRMEMFUNC_P (TREE_TYPE (TREE_OPERAND (t, 1))));
1274 /* Return a new OVL node, concatenating it with the old one. */
1277 ovl_cons (decl, chain)
1281 tree result = make_node (OVERLOAD);
1282 TREE_TYPE (result) = unknown_type_node;
1283 OVL_FUNCTION (result) = decl;
1284 TREE_CHAIN (result) = chain;
1289 /* Same as ovl_cons, but on the scratch_obstack. */
1292 scratch_ovl_cons (value, chain)
1296 register struct obstack *ambient_obstack = current_obstack;
1297 extern struct obstack *expression_obstack;
1298 current_obstack = expression_obstack;
1299 node = ovl_cons (value, chain);
1300 current_obstack = ambient_obstack;
1304 /* Build a new overloaded function. If this is the first one,
1305 just return it; otherwise, ovl_cons the _DECLs */
1308 build_overload (decl, chain)
1312 if (! chain && TREE_CODE (decl) != TEMPLATE_DECL)
1314 if (chain && TREE_CODE (chain) != OVERLOAD)
1315 chain = ovl_cons (chain, NULL_TREE);
1316 return ovl_cons (decl, chain);
1319 /* Returns true iff functions are equivalent. Equivalent functions are
1320 not identical only if one is a function-local extern function.
1321 This assumes that function-locals don't have TREE_PERMANENT. */
1324 equal_functions (fn1, fn2)
1328 if (!TREE_PERMANENT (fn1) || !TREE_PERMANENT (fn2))
1329 return decls_match (fn1, fn2);
1333 /* True if fn is in ovl. */
1336 ovl_member (fn, ovl)
1340 if (ovl == NULL_TREE)
1342 if (TREE_CODE (ovl) != OVERLOAD)
1343 return equal_functions (ovl, fn);
1344 for (; ovl; ovl = OVL_CHAIN (ovl))
1345 if (equal_functions (OVL_FUNCTION (ovl), fn))
1351 is_aggr_type_2 (t1, t2)
1354 if (TREE_CODE (t1) != TREE_CODE (t2))
1356 return IS_AGGR_TYPE (t1) && IS_AGGR_TYPE (t2);
1359 #define PRINT_RING_SIZE 4
1362 lang_printable_name (decl, v)
1366 static tree decl_ring[PRINT_RING_SIZE];
1367 static char *print_ring[PRINT_RING_SIZE];
1368 static int ring_counter;
1371 /* Only cache functions. */
1373 || TREE_CODE (decl) != FUNCTION_DECL
1374 || DECL_LANG_SPECIFIC (decl) == 0)
1375 return lang_decl_name (decl, v);
1377 /* See if this print name is lying around. */
1378 for (i = 0; i < PRINT_RING_SIZE; i++)
1379 if (decl_ring[i] == decl)
1380 /* yes, so return it. */
1381 return print_ring[i];
1383 if (++ring_counter == PRINT_RING_SIZE)
1386 if (current_function_decl != NULL_TREE)
1388 if (decl_ring[ring_counter] == current_function_decl)
1390 if (ring_counter == PRINT_RING_SIZE)
1392 if (decl_ring[ring_counter] == current_function_decl)
1393 my_friendly_abort (106);
1396 if (print_ring[ring_counter])
1397 free (print_ring[ring_counter]);
1399 print_ring[ring_counter] = xstrdup (lang_decl_name (decl, v));
1400 decl_ring[ring_counter] = decl;
1401 return print_ring[ring_counter];
1404 /* Build the FUNCTION_TYPE or METHOD_TYPE which may throw exceptions
1405 listed in RAISES. */
1408 build_exception_variant (type, raises)
1412 tree v = TYPE_MAIN_VARIANT (type);
1413 int type_quals = TYPE_QUALS (type);
1415 for (; v; v = TYPE_NEXT_VARIANT (v))
1420 if (TYPE_QUALS (v) != type_quals)
1423 for (t = TYPE_RAISES_EXCEPTIONS (v), u = raises;
1424 t != NULL_TREE && u != NULL_TREE;
1425 t = TREE_CHAIN (t), u = TREE_CHAIN (u))
1426 if (((TREE_VALUE (t) != NULL_TREE)
1427 != (TREE_VALUE (u) != NULL_TREE))
1428 || !same_type_p (TREE_VALUE (t), TREE_VALUE (u)))
1432 /* There's a memory leak here; RAISES is not freed. */
1436 /* Need to build a new variant. */
1437 v = build_type_copy (type);
1439 if (raises && ! TREE_PERMANENT (raises))
1440 raises = copy_to_permanent (raises);
1442 TYPE_RAISES_EXCEPTIONS (v) = raises;
1446 /* Given a TEMPLATE_TEMPLATE_PARM node T, create a new one together with its
1447 lang_specific field and its corresponding TEMPLATE_DECL node */
1450 copy_template_template_parm (t)
1453 tree template = TYPE_NAME (t);
1456 /* Make sure these end up on the permanent_obstack. */
1457 push_obstacks_nochange ();
1458 end_temporary_allocation ();
1460 t2 = make_lang_type (TEMPLATE_TEMPLATE_PARM);
1461 template = copy_node (template);
1462 copy_lang_decl (template);
1466 TREE_TYPE (template) = t2;
1467 TYPE_NAME (t2) = template;
1468 TYPE_STUB_DECL (t2) = template;
1470 /* No need to copy these */
1471 TYPE_FIELDS (t2) = TYPE_FIELDS (t);
1472 TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (t2)
1473 = TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (t);
1477 /* Walk through the tree structure T, applying func. If func ever returns
1478 non-null, return that value. */
1481 search_tree (t, func)
1483 tree (*func) PROTO((tree));
1485 #define TRY(ARG) if (tmp=search_tree (ARG, func), tmp != NULL_TREE) return tmp
1492 if (tmp = func (t), tmp != NULL_TREE)
1495 switch (TREE_CODE (t))
1500 case IDENTIFIER_NODE:
1507 case NAMESPACE_DECL:
1511 TRY (TREE_TYPE (t));
1515 TRY (TREE_TYPE (t));
1516 TRY (TREE_CHAIN (t));
1520 TRY (TREE_PURPOSE (t));
1521 TRY (TREE_VALUE (t));
1522 TRY (TREE_CHAIN (t));
1526 TRY (OVL_FUNCTION (t));
1527 TRY (OVL_CHAIN (t));
1532 int len = TREE_VEC_LENGTH (t);
1536 TRY (TREE_VEC_ELT (t, len));
1547 TRY (TREE_TYPE (t));
1552 case AGGR_INIT_EXPR:
1554 TRY (TREE_OPERAND (t, 0));
1555 TRY (TREE_OPERAND (t, 1));
1556 TRY (TREE_OPERAND (t, 2));
1563 case TRUNC_DIV_EXPR:
1564 case TRUNC_MOD_EXPR:
1572 case BIT_ANDTC_EXPR:
1573 case TRUTH_ANDIF_EXPR:
1574 case TRUTH_ORIF_EXPR:
1582 case FLOOR_DIV_EXPR:
1583 case ROUND_DIV_EXPR:
1585 case FLOOR_MOD_EXPR:
1586 case ROUND_MOD_EXPR:
1588 case PREDECREMENT_EXPR:
1589 case PREINCREMENT_EXPR:
1590 case POSTDECREMENT_EXPR:
1591 case POSTINCREMENT_EXPR:
1594 case TRY_CATCH_EXPR:
1595 case WITH_CLEANUP_EXPR:
1597 TRY (TREE_OPERAND (t, 0));
1598 TRY (TREE_OPERAND (t, 1));
1607 case TRUTH_NOT_EXPR:
1609 case NON_LVALUE_EXPR:
1611 case CLEANUP_POINT_EXPR:
1615 TRY (TREE_OPERAND (t, 0));
1620 case REINTERPRET_CAST_EXPR:
1621 case CONST_CAST_EXPR:
1622 case STATIC_CAST_EXPR:
1623 case DYNAMIC_CAST_EXPR:
1630 TRY (TREE_REALPART (t));
1631 TRY (TREE_IMAGPART (t));
1635 TRY (CONSTRUCTOR_ELTS (t));
1638 case TEMPLATE_TEMPLATE_PARM:
1639 case TEMPLATE_PARM_INDEX:
1640 case TEMPLATE_TYPE_PARM:
1657 case REFERENCE_TYPE:
1658 TRY (TREE_TYPE (t));
1663 TRY (TREE_TYPE (t));
1664 TRY (TYPE_ARG_TYPES (t));
1668 TRY (TREE_TYPE (t));
1669 TRY (TYPE_DOMAIN (t));
1673 TRY (TYPE_MAX_VALUE (t));
1677 TRY (TREE_TYPE (t));
1678 TRY (TYPE_OFFSET_BASETYPE (t));
1682 if (TYPE_PTRMEMFUNC_P (t))
1683 TRY (TYPE_PTRMEMFUNC_FN_TYPE (t));
1686 /* This list is incomplete, but should suffice for now.
1687 It is very important that `sorry' not call
1688 `report_error_function'. That could cause an infinite loop. */
1690 sorry ("initializer contains unrecognized tree code");
1691 return error_mark_node;
1700 /* Passed to search_tree. Checks for the use of types with no linkage. */
1703 no_linkage_helper (t)
1707 && (IS_AGGR_TYPE (t) || TREE_CODE (t) == ENUMERAL_TYPE)
1708 && (decl_function_context (TYPE_MAIN_DECL (t))
1709 || ANON_AGGRNAME_P (TYPE_IDENTIFIER (t))))
1714 /* Check if the type T depends on a type with no linkage and if so, return
1718 no_linkage_check (t)
1721 t = search_tree (t, no_linkage_helper);
1722 if (t != error_mark_node)
1728 /* Make copies of all the nodes below T. If FUNC is non-NULL, call it
1734 tree (*func) PROTO((tree));
1748 switch (TREE_CODE (t))
1751 return error_mark_node;
1756 /* Rather than aborting, return error_mark_node. This allows us
1757 to report a sensible error message on code like this:
1759 void g() { int i; f<i>(7); }
1763 void g() { const int i = 7; f<i>(7); }
1765 however, we must actually return the constant initializer. */
1766 if (TREE_READONLY_DECL_P (t))
1768 tmp = decl_constant_value (t);
1770 return mapcar (tmp, func);
1772 return error_mark_node;
1776 tree chain = TREE_CHAIN (t);
1778 TREE_CHAIN (t) = mapcar (chain, func);
1779 TREE_TYPE (t) = mapcar (TREE_TYPE (t), func);
1780 DECL_INITIAL (t) = mapcar (DECL_INITIAL (t), func);
1781 DECL_SIZE (t) = mapcar (DECL_SIZE (t), func);
1787 tree chain = TREE_CHAIN (t);
1789 TREE_PURPOSE (t) = mapcar (TREE_PURPOSE (t), func);
1790 TREE_VALUE (t) = mapcar (TREE_VALUE (t), func);
1791 TREE_CHAIN (t) = mapcar (chain, func);
1797 tree chain = OVL_CHAIN (t);
1799 OVL_FUNCTION (t) = mapcar (OVL_FUNCTION (t), func);
1800 OVL_CHAIN (t) = mapcar (chain, func);
1806 int len = TREE_VEC_LENGTH (t);
1810 TREE_VEC_ELT (t, len) = mapcar (TREE_VEC_ELT (t, len), func);
1817 return copy_node (t);
1821 TREE_TYPE (t) = mapcar (TREE_TYPE (t), func);
1822 PTRMEM_CST_MEMBER (t) = mapcar (PTRMEM_CST_MEMBER (t), func);
1827 case AGGR_INIT_EXPR:
1829 TREE_OPERAND (t, 0) = mapcar (TREE_OPERAND (t, 0), func);
1830 TREE_OPERAND (t, 1) = mapcar (TREE_OPERAND (t, 1), func);
1831 TREE_OPERAND (t, 2) = mapcar (TREE_OPERAND (t, 2), func);
1836 TREE_OPERAND (t, 0) = mapcar (TREE_OPERAND (t, 0), func);
1843 case TRUNC_DIV_EXPR:
1844 case TRUNC_MOD_EXPR:
1852 case BIT_ANDTC_EXPR:
1853 case TRUTH_ANDIF_EXPR:
1854 case TRUTH_ORIF_EXPR:
1862 case FLOOR_DIV_EXPR:
1863 case ROUND_DIV_EXPR:
1865 case FLOOR_MOD_EXPR:
1866 case ROUND_MOD_EXPR:
1868 case PREDECREMENT_EXPR:
1869 case PREINCREMENT_EXPR:
1870 case POSTDECREMENT_EXPR:
1871 case POSTINCREMENT_EXPR:
1874 case TRY_CATCH_EXPR:
1875 case WITH_CLEANUP_EXPR:
1877 TREE_OPERAND (t, 0) = mapcar (TREE_OPERAND (t, 0), func);
1878 TREE_OPERAND (t, 1) = mapcar (TREE_OPERAND (t, 1), func);
1883 TREE_TYPE (t) = mapcar (TREE_TYPE (t), func);
1884 TREE_OPERAND (t, 0) = mapcar (TREE_OPERAND (t, 0), func);
1885 TREE_OPERAND (t, 1) = mapcar (TREE_OPERAND (t, 1), func);
1887 /* tree.def says that operand two is RTL, but
1888 make_call_declarator puts trees in there. */
1889 if (TREE_OPERAND (t, 2)
1890 && TREE_CODE (TREE_OPERAND (t, 2)) == TREE_LIST)
1891 TREE_OPERAND (t, 2) = mapcar (TREE_OPERAND (t, 2), func);
1893 TREE_OPERAND (t, 2) = NULL_TREE;
1901 case TRUTH_NOT_EXPR:
1904 case CLEANUP_POINT_EXPR:
1905 case NON_LVALUE_EXPR:
1907 TREE_TYPE (t) = mapcar (TREE_TYPE (t), func);
1908 TREE_OPERAND (t, 0) = mapcar (TREE_OPERAND (t, 0), func);
1912 tmp = build_pointer_type (mapcar (TREE_TYPE (t), func));
1913 return cp_build_qualified_type (tmp, TYPE_QUALS (t));
1914 case REFERENCE_TYPE:
1915 tmp = build_reference_type (mapcar (TREE_TYPE (t), func));
1916 return cp_build_qualified_type (tmp, TYPE_QUALS (t));
1918 tmp = build_function_type (mapcar (TREE_TYPE (t), func),
1919 mapcar (TYPE_ARG_TYPES (t), func));
1920 return cp_build_qualified_type (tmp, TYPE_QUALS (t));
1922 tmp = build_cplus_array_type (mapcar (TREE_TYPE (t), func),
1923 mapcar (TYPE_DOMAIN (t), func));
1924 return cp_build_qualified_type (tmp, CP_TYPE_QUALS (t));
1926 tmp = build_index_type (mapcar (TYPE_MAX_VALUE (t), func));
1927 return cp_build_qualified_type (tmp, TYPE_QUALS (t));
1929 tmp = build_offset_type (mapcar (TYPE_OFFSET_BASETYPE (t), func),
1930 mapcar (TREE_TYPE (t), func));
1931 return cp_build_qualified_type (tmp, TYPE_QUALS (t));
1933 tmp = build_cplus_method_type
1934 (mapcar (TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (t))), func),
1935 mapcar (TREE_TYPE (t), func),
1936 mapcar (TREE_CHAIN (TYPE_ARG_TYPES (t)), func));
1937 return cp_build_qualified_type (tmp, TYPE_QUALS (t));
1941 TREE_REALPART (t) = mapcar (TREE_REALPART (t), func);
1942 TREE_IMAGPART (t) = mapcar (TREE_REALPART (t), func);
1947 CONSTRUCTOR_ELTS (t) = mapcar (CONSTRUCTOR_ELTS (t), func);
1950 case TEMPLATE_TEMPLATE_PARM:
1951 return copy_template_template_parm (t);
1955 TREE_OPERAND (t, 0) = mapcar (TREE_OPERAND (t, 0), func);
1956 TREE_OPERAND (t, 1) = mapcar (TREE_OPERAND (t, 1), func);
1957 TREE_OPERAND (t, 2) = NULL_TREE;
1962 TREE_OPERAND (t, 0) = mapcar (TREE_OPERAND (t, 0), func);
1963 TREE_OPERAND (t, 1) = mapcar (TREE_OPERAND (t, 1), func);
1964 TREE_OPERAND (t, 2) = mapcar (TREE_OPERAND (t, 2), func);
1969 TREE_OPERAND (t, 0) = mapcar (TREE_OPERAND (t, 0), func);
1973 if (TYPE_PTRMEMFUNC_P (t))
1974 return build_ptrmemfunc_type
1975 (mapcar (TYPE_PTRMEMFUNC_FN_TYPE (t), func));
1976 /* else fall through */
1978 /* This list is incomplete, but should suffice for now.
1979 It is very important that `sorry' not call
1980 `report_error_function'. That could cause an infinite loop. */
1982 sorry ("initializer contains unrecognized tree code");
1983 return error_mark_node;
1986 my_friendly_abort (107);
1991 /* Returns T if T is allocated on the permanent obstack, NULL_TREE
1998 return TREE_PERMANENT (t) ? t : NULL_TREE;
2005 if (TREE_PERMANENT (t))
2008 /* Support `void f () { extern int i; A<&i> a; }' */
2009 if ((TREE_CODE (t) == VAR_DECL || TREE_CODE (t) == FUNCTION_DECL)
2014 /* copy_rtx won't make a new SYMBOL_REF, so call make_decl_rtl again. */
2016 make_decl_rtl (t, NULL_PTR, 1);
2023 /* Assuming T is a node built bottom-up, make it all exist on
2024 permanent obstack, if it is not permanent already. */
2027 copy_to_permanent (t)
2030 if (t == NULL_TREE || TREE_PERMANENT (t))
2033 push_obstacks_nochange ();
2034 end_temporary_allocation ();
2036 t = mapcar (t, perm_manip);
2043 #ifdef GATHER_STATISTICS
2044 extern int depth_reached;
2048 print_lang_statistics ()
2050 extern struct obstack decl_obstack;
2051 print_obstack_statistics ("class_obstack", &class_obstack);
2052 print_obstack_statistics ("decl_obstack", &decl_obstack);
2053 print_search_statistics ();
2054 print_class_statistics ();
2055 #ifdef GATHER_STATISTICS
2056 fprintf (stderr, "maximum template instantiation depth reached: %d\n",
2061 /* This is used by the `assert' macro. It is provided in libgcc.a,
2062 which `cc' doesn't know how to link. Note that the C++ front-end
2063 no longer actually uses the `assert' macro (instead, it calls
2064 my_friendly_assert). But all of the back-end files still need this. */
2067 __eprintf (string, expression, line, filename)
2069 const char *expression;
2071 const char *filename;
2073 fprintf (stderr, string, expression, line, filename);
2078 /* Return, as an INTEGER_CST node, the number of elements for TYPE
2079 (which is an ARRAY_TYPE). This counts only elements of the top
2083 array_type_nelts_top (type)
2086 return fold (build (PLUS_EXPR, sizetype,
2087 array_type_nelts (type),
2091 /* Return, as an INTEGER_CST node, the number of elements for TYPE
2092 (which is an ARRAY_TYPE). This one is a recursive count of all
2093 ARRAY_TYPEs that are clumped together. */
2096 array_type_nelts_total (type)
2099 tree sz = array_type_nelts_top (type);
2100 type = TREE_TYPE (type);
2101 while (TREE_CODE (type) == ARRAY_TYPE)
2103 tree n = array_type_nelts_top (type);
2104 sz = fold (build (MULT_EXPR, sizetype, sz, n));
2105 type = TREE_TYPE (type);
2115 if (TREE_CODE (t) != TREE_LIST && ! TREE_SIDE_EFFECTS (t))
2117 else if (TREE_CODE (t) == TARGET_EXPR)
2119 if (TREE_CODE (TREE_OPERAND (t, 1)) == AGGR_INIT_EXPR)
2121 mark_used (TREE_OPERAND (TREE_OPERAND (TREE_OPERAND (t, 1), 0), 0));
2122 return build_cplus_new
2123 (TREE_TYPE (t), break_out_target_exprs (TREE_OPERAND (t, 1)));
2126 TREE_OPERAND (t, 0) = build (VAR_DECL, TREE_TYPE (t));
2127 layout_decl (TREE_OPERAND (t, 0), 0);
2130 else if (TREE_CODE (t) == CALL_EXPR)
2131 mark_used (TREE_OPERAND (TREE_OPERAND (t, 0), 0));
2136 /* Actually, we'll just clean out the target exprs for the moment. */
2139 break_out_target_exprs (t)
2142 return mapcar (t, bot_manip);
2145 /* Obstack used for allocating nodes in template function and variable
2148 /* Similar to `build_nt', except we build
2149 on the permanent_obstack, regardless. */
2152 build_min_nt VPROTO((enum tree_code code, ...))
2155 enum tree_code code;
2157 register struct obstack *ambient_obstack = expression_obstack;
2160 register int length;
2166 code = va_arg (p, enum tree_code);
2169 expression_obstack = &permanent_obstack;
2171 t = make_node (code);
2172 length = tree_code_length[(int) code];
2173 TREE_COMPLEXITY (t) = lineno;
2175 for (i = 0; i < length; i++)
2177 tree x = va_arg (p, tree);
2178 TREE_OPERAND (t, i) = copy_to_permanent (x);
2182 expression_obstack = ambient_obstack;
2186 /* Similar to `build', except we build
2187 on the permanent_obstack, regardless. */
2190 build_min VPROTO((enum tree_code code, tree tt, ...))
2193 enum tree_code code;
2196 register struct obstack *ambient_obstack = expression_obstack;
2199 register int length;
2205 code = va_arg (p, enum tree_code);
2206 tt = va_arg (p, tree);
2209 expression_obstack = &permanent_obstack;
2211 t = make_node (code);
2212 length = tree_code_length[(int) code];
2213 TREE_TYPE (t) = copy_to_permanent (tt);
2214 TREE_COMPLEXITY (t) = lineno;
2216 for (i = 0; i < length; i++)
2218 tree x = va_arg (p, tree);
2219 TREE_OPERAND (t, i) = copy_to_permanent (x);
2223 expression_obstack = ambient_obstack;
2227 /* Same as `tree_cons' but make a permanent object. */
2230 min_tree_cons (purpose, value, chain)
2231 tree purpose, value, chain;
2234 register struct obstack *ambient_obstack = current_obstack;
2235 current_obstack = &permanent_obstack;
2237 node = tree_cons (copy_to_permanent (purpose),
2238 copy_to_permanent (value), chain);
2239 current_obstack = ambient_obstack;
2247 if (TREE_CODE (t) == TYPE_DECL)
2249 if (TREE_CODE_CLASS (TREE_CODE (t)) == 't')
2250 return TYPE_STUB_DECL (t);
2252 my_friendly_abort (42);
2254 /* Stop compiler from complaining control reaches end of non-void function. */
2259 can_free (obstack, t)
2260 struct obstack *obstack;
2265 if (TREE_CODE (t) == TREE_VEC)
2266 size = (TREE_VEC_LENGTH (t)-1) * sizeof (tree) + sizeof (struct tree_vec);
2268 my_friendly_abort (42);
2270 #define ROUND(x) ((x + obstack_alignment_mask (obstack)) \
2271 & ~ obstack_alignment_mask (obstack))
2272 if ((char *)t + ROUND (size) == obstack_next_free (obstack))
2279 /* Return first vector element whose BINFO_TYPE is ELEM.
2280 Return 0 if ELEM is not in VEC. VEC may be NULL_TREE. */
2283 vec_binfo_member (elem, vec)
2289 for (i = 0; i < TREE_VEC_LENGTH (vec); ++i)
2290 if (same_type_p (elem, BINFO_TYPE (TREE_VEC_ELT (vec, i))))
2291 return TREE_VEC_ELT (vec, i);
2296 /* Kludge around the fact that DECL_CONTEXT for virtual functions returns
2297 the wrong thing for decl_function_context. Hopefully the uses in the
2298 backend won't matter, since we don't need a static chain for local class
2302 hack_decl_function_context (decl)
2305 if (TREE_CODE (decl) == FUNCTION_DECL && DECL_FUNCTION_MEMBER_P (decl))
2306 return decl_function_context (TYPE_MAIN_DECL (DECL_CLASS_CONTEXT (decl)));
2307 return decl_function_context (decl);
2310 /* Returns the namespace that contains DECL, whether directly or
2314 decl_namespace_context (decl)
2319 if (TREE_CODE (decl) == NAMESPACE_DECL)
2321 else if (TYPE_P (decl))
2322 decl = CP_DECL_CONTEXT (TYPE_MAIN_DECL (decl));
2324 decl = CP_DECL_CONTEXT (decl);
2328 /* Return truthvalue of whether T1 is the same tree structure as T2.
2329 Return 1 if they are the same.
2330 Return 0 if they are understandably different.
2331 Return -1 if either contains tree structure not understood by
2335 cp_tree_equal (t1, t2)
2338 register enum tree_code code1, code2;
2343 if (t1 == 0 || t2 == 0)
2346 code1 = TREE_CODE (t1);
2347 code2 = TREE_CODE (t2);
2349 if (code1 == NOP_EXPR || code1 == CONVERT_EXPR || code1 == NON_LVALUE_EXPR)
2351 if (code2 == NOP_EXPR || code2 == CONVERT_EXPR || code2 == NON_LVALUE_EXPR)
2352 return cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
2354 return cp_tree_equal (TREE_OPERAND (t1, 0), t2);
2356 else if (code2 == NOP_EXPR || code2 == CONVERT_EXPR
2357 || code2 == NON_LVALUE_EXPR)
2358 return cp_tree_equal (t1, TREE_OPERAND (t2, 0));
2366 return TREE_INT_CST_LOW (t1) == TREE_INT_CST_LOW (t2)
2367 && TREE_INT_CST_HIGH (t1) == TREE_INT_CST_HIGH (t2);
2370 return REAL_VALUES_EQUAL (TREE_REAL_CST (t1), TREE_REAL_CST (t2));
2373 return TREE_STRING_LENGTH (t1) == TREE_STRING_LENGTH (t2)
2374 && !bcmp (TREE_STRING_POINTER (t1), TREE_STRING_POINTER (t2),
2375 TREE_STRING_LENGTH (t1));
2378 /* We need to do this when determining whether or not two
2379 non-type pointer to member function template arguments
2381 if (!(same_type_p (TREE_TYPE (t1), TREE_TYPE (t2))
2382 /* The first operand is RTL. */
2383 && TREE_OPERAND (t1, 0) == TREE_OPERAND (t2, 0)))
2385 return cp_tree_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
2388 cmp = cp_tree_equal (TREE_PURPOSE (t1), TREE_PURPOSE (t2));
2391 cmp = cp_tree_equal (TREE_VALUE (t1), TREE_VALUE (t2));
2394 return cp_tree_equal (TREE_CHAIN (t1), TREE_CHAIN (t2));
2397 return cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
2400 cmp = cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
2403 return simple_cst_list_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
2406 /* Special case: if either target is an unallocated VAR_DECL,
2407 it means that it's going to be unified with whatever the
2408 TARGET_EXPR is really supposed to initialize, so treat it
2409 as being equivalent to anything. */
2410 if ((TREE_CODE (TREE_OPERAND (t1, 0)) == VAR_DECL
2411 && DECL_NAME (TREE_OPERAND (t1, 0)) == NULL_TREE
2412 && DECL_RTL (TREE_OPERAND (t1, 0)) == 0)
2413 || (TREE_CODE (TREE_OPERAND (t2, 0)) == VAR_DECL
2414 && DECL_NAME (TREE_OPERAND (t2, 0)) == NULL_TREE
2415 && DECL_RTL (TREE_OPERAND (t2, 0)) == 0))
2418 cmp = cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
2421 return cp_tree_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
2423 case WITH_CLEANUP_EXPR:
2424 cmp = cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
2427 return cp_tree_equal (TREE_OPERAND (t1, 2), TREE_OPERAND (t1, 2));
2430 if (TREE_OPERAND (t1, 1) == TREE_OPERAND (t2, 1))
2431 return cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
2440 case TEMPLATE_PARM_INDEX:
2441 return TEMPLATE_PARM_IDX (t1) == TEMPLATE_PARM_IDX (t2)
2442 && TEMPLATE_PARM_LEVEL (t1) == TEMPLATE_PARM_LEVEL (t2);
2446 if (TREE_CODE (TREE_OPERAND (t1, 0)) != TREE_CODE (TREE_OPERAND (t2, 0)))
2448 if (TREE_CODE_CLASS (TREE_CODE (TREE_OPERAND (t1, 0))) == 't')
2449 return same_type_p (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
2453 /* Two pointer-to-members are the same if they point to the same
2454 field or function in the same class. */
2455 return (PTRMEM_CST_MEMBER (t1) == PTRMEM_CST_MEMBER (t2)
2456 && same_type_p (PTRMEM_CST_CLASS (t1), PTRMEM_CST_CLASS (t2)));
2462 switch (TREE_CODE_CLASS (code1))
2472 for (i=0; i<tree_code_length[(int) code1]; ++i)
2474 cmp = cp_tree_equal (TREE_OPERAND (t1, i), TREE_OPERAND (t2, i));
2484 /* Similar to make_tree_vec, but build on the momentary_obstack.
2485 Thus, these vectors are really and truly temporary. */
2492 push_expression_obstack ();
2493 node = make_tree_vec (len);
2498 /* Build a wrapper around some pointer PTR so we can use it as a tree. */
2501 build_ptr_wrapper (ptr)
2504 tree t = make_node (WRAPPER);
2505 WRAPPER_PTR (t) = ptr;
2509 /* Same, but on the expression_obstack. */
2512 build_expr_ptr_wrapper (ptr)
2516 push_expression_obstack ();
2517 t = build_ptr_wrapper (ptr);
2522 /* Build a wrapper around some integer I so we can use it as a tree. */
2525 build_int_wrapper (i)
2528 tree t = make_node (WRAPPER);
2529 WRAPPER_INT (t) = i;
2534 build_srcloc (file, line)
2540 /* Make sure that we put these on the permanent obstack; up in
2541 add_pending_template, we pass this return value into perm_tree_cons,
2542 which also puts it on the permanent_obstack. However, this wasn't
2543 explicitly doing the same. */
2544 register struct obstack *ambient_obstack = current_obstack;
2545 current_obstack = &permanent_obstack;
2547 t = make_node (SRCLOC);
2548 SRCLOC_FILE (t) = file;
2549 SRCLOC_LINE (t) = line;
2551 current_obstack = ambient_obstack;
2557 build_srcloc_here ()
2559 return build_srcloc (input_filename, lineno);
2563 push_expression_obstack ()
2565 push_obstacks_nochange ();
2566 current_obstack = expression_obstack;
2569 /* The type of ARG when used as an lvalue. */
2575 tree type = TREE_TYPE (arg);
2576 if (TREE_CODE (arg) == OVERLOAD)
2577 type = unknown_type_node;
2581 /* The type of ARG for printing error messages; denote lvalues with
2588 tree type = TREE_TYPE (arg);
2589 if (TREE_CODE (type) == ARRAY_TYPE)
2591 else if (real_lvalue_p (arg))
2592 type = build_reference_type (lvalue_type (arg));
2593 else if (IS_AGGR_TYPE (type))
2594 type = lvalue_type (arg);
2599 /* Does FUNCTION use a variable-length argument list? */
2602 varargs_function_p (function)
2605 tree parm = TYPE_ARG_TYPES (TREE_TYPE (function));
2606 for (; parm; parm = TREE_CHAIN (parm))
2607 if (TREE_VALUE (parm) == void_type_node)
2612 /* Returns 1 if decl is a member of a class. */
2618 tree ctx = DECL_CONTEXT (decl);
2619 return (ctx && TREE_CODE_CLASS (TREE_CODE (ctx)) == 't');
2622 /* Create a placeholder for member access where we don't actually have an
2623 object that the access is against. */
2626 build_dummy_object (type)
2629 tree decl = build1 (NOP_EXPR, build_pointer_type (type), void_zero_node);
2630 return build_indirect_ref (decl, NULL_PTR);
2633 /* We've gotten a reference to a member of TYPE. Return *this if appropriate,
2634 or a dummy object otherwise. If BINFOP is non-0, it is filled with the
2635 binfo path from current_class_type to TYPE, or 0. */
2638 maybe_dummy_object (type, binfop)
2644 if (current_class_type
2645 && get_base_distance (type, current_class_type, 0, binfop) != -1)
2646 context = current_class_type;
2649 /* Reference from a nested class member function. */
2652 *binfop = TYPE_BINFO (type);
2655 if (current_class_ref && context == current_class_type)
2656 decl = current_class_ref;
2658 decl = build_dummy_object (context);
2663 /* Returns 1 if OB is a placeholder object, or a pointer to one. */
2666 is_dummy_object (ob)
2669 if (TREE_CODE (ob) == INDIRECT_REF)
2670 ob = TREE_OPERAND (ob, 0);
2671 return (TREE_CODE (ob) == NOP_EXPR
2672 && TREE_OPERAND (ob, 0) == void_zero_node);
2675 /* Returns 1 iff type T is a POD type, as defined in [basic.types]. */
2683 while (TREE_CODE (t) == ARRAY_TYPE)
2686 if (! IS_AGGR_TYPE (t))
2689 if (CLASSTYPE_NON_AGGREGATE (t)
2690 || TYPE_HAS_COMPLEX_ASSIGN_REF (t)
2691 || TYPE_HAS_DESTRUCTOR (t))
2694 for (f = TYPE_FIELDS (t); f; f = TREE_CHAIN (f))
2696 if (TREE_CODE (f) != FIELD_DECL)
2699 if (TREE_CODE (TREE_TYPE (f)) == REFERENCE_TYPE
2700 || TYPE_PTRMEMFUNC_P (TREE_TYPE (f))
2701 || TYPE_PTRMEM_P (TREE_TYPE (f)))
2708 /* Return a 1 if ATTR_NAME and ATTR_ARGS denote a valid C++-specific
2709 attribute for either declaration DECL or type TYPE and 0 otherwise.
2710 Plugged into valid_lang_attribute. */
2713 cp_valid_lang_attribute (attr_name, attr_args, decl, type)
2715 tree attr_args ATTRIBUTE_UNUSED;
2716 tree decl ATTRIBUTE_UNUSED;
2717 tree type ATTRIBUTE_UNUSED;
2719 if (is_attribute_p ("com_interface", attr_name))
2721 if (! flag_vtable_thunks)
2723 error ("`com_interface' only supported with -fvtable-thunks");
2727 if (attr_args != NULL_TREE
2728 || decl != NULL_TREE
2729 || ! CLASS_TYPE_P (type)
2730 || type != TYPE_MAIN_VARIANT (type))
2732 warning ("`com_interface' attribute can only be applied to class definitions");
2736 CLASSTYPE_COM_INTERFACE (type) = 1;
2739 else if (is_attribute_p ("init_priority", attr_name))
2741 tree initp_expr = (attr_args ? TREE_VALUE (attr_args): NULL_TREE);
2745 STRIP_NOPS (initp_expr);
2747 if (!initp_expr || TREE_CODE (initp_expr) != INTEGER_CST)
2749 error ("requested init_priority is not an integer constant");
2753 pri = TREE_INT_CST_LOW (initp_expr);
2755 while (TREE_CODE (type) == ARRAY_TYPE)
2756 type = TREE_TYPE (type);
2758 if (decl == NULL_TREE
2759 || TREE_CODE (decl) != VAR_DECL
2760 || ! TREE_STATIC (decl)
2761 || DECL_EXTERNAL (decl)
2762 || (TREE_CODE (type) != RECORD_TYPE
2763 && TREE_CODE (type) != UNION_TYPE)
2764 /* Static objects in functions are initialized the
2765 first time control passes through that
2766 function. This is not precise enough to pin down an
2767 init_priority value, so don't allow it. */
2768 || current_function_decl)
2770 error ("can only use init_priority attribute on file-scope definitions of objects of class type");
2774 if (pri > MAX_INIT_PRIORITY || pri <= 0)
2776 error ("requested init_priority is out of range");
2780 /* Check for init_priorities that are reserved for
2781 language and runtime support implementations.*/
2782 if (pri <= MAX_RESERVED_INIT_PRIORITY)
2785 ("requested init_priority is reserved for internal use");
2788 DECL_INIT_PRIORITY (decl) = pri;
2795 /* Return a new PTRMEM_CST of the indicated TYPE. The MEMBER is the
2796 thing pointed to by the constant. */
2799 make_ptrmem_cst (type, member)
2803 tree ptrmem_cst = make_node (PTRMEM_CST);
2804 /* If would seem a great convenience if make_node would set
2805 TREE_CONSTANT for things of class `c', but it does not. */
2806 TREE_CONSTANT (ptrmem_cst) = 1;
2807 TREE_TYPE (ptrmem_cst) = type;
2808 PTRMEM_CST_MEMBER (ptrmem_cst) = member;