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 if (elt_type == error_mark_node || index_type == error_mark_node)
411 return error_mark_node;
413 /* We need a new one. If both ELT_TYPE and INDEX_TYPE are permanent,
414 make this permanent too. */
415 if (TREE_PERMANENT (elt_type)
416 && (index_type == 0 || TREE_PERMANENT (index_type)))
418 current_obstack = &permanent_obstack;
419 saveable_obstack = &permanent_obstack;
422 if (processing_template_decl
423 || uses_template_parms (elt_type)
424 || uses_template_parms (index_type))
426 t = make_node (ARRAY_TYPE);
427 TREE_TYPE (t) = elt_type;
428 TYPE_DOMAIN (t) = index_type;
431 t = build_array_type (elt_type, index_type);
433 /* Push these needs up so that initialization takes place
435 TYPE_NEEDS_CONSTRUCTING (t) = TYPE_NEEDS_CONSTRUCTING (TYPE_MAIN_VARIANT (elt_type));
436 TYPE_NEEDS_DESTRUCTOR (t) = TYPE_NEEDS_DESTRUCTOR (TYPE_MAIN_VARIANT (elt_type));
437 current_obstack = ambient_obstack;
438 saveable_obstack = ambient_saveable_obstack;
443 build_cplus_array_type (elt_type, index_type)
448 int type_quals = CP_TYPE_QUALS (elt_type);
450 elt_type = TYPE_MAIN_VARIANT (elt_type);
452 t = build_cplus_array_type_1 (elt_type, index_type);
454 if (type_quals != TYPE_UNQUALIFIED)
455 t = cp_build_qualified_type (t, type_quals);
460 /* Make a variant of TYPE, qualified with the TYPE_QUALS. Handles
461 arrays correctly. In particular, if TYPE is an array of T's, and
462 TYPE_QUALS is non-empty, returns an array of qualified T's. If
463 at attempt is made to qualify a type illegally, and COMPLAIN is
464 non-zero, an error is issued. If COMPLAIN is zero, error_mark_node
468 cp_build_qualified_type_real (type, type_quals, complain)
473 if (type == error_mark_node)
476 /* A restrict-qualified pointer type must be a pointer (or reference)
477 to object or incomplete type. */
478 if ((type_quals & TYPE_QUAL_RESTRICT)
479 && TREE_CODE (type) != TEMPLATE_TYPE_PARM
480 && (!POINTER_TYPE_P (type)
481 || TYPE_PTRMEM_P (type)
482 || TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE))
485 cp_error ("`%T' cannot be `restrict'-qualified", type);
487 return error_mark_node;
489 type_quals &= ~TYPE_QUAL_RESTRICT;
492 if (type_quals != TYPE_UNQUALIFIED
493 && TREE_CODE (type) == FUNCTION_TYPE)
496 cp_error ("`%T' cannot be `const'-, `volatile'-, or `restrict'-qualified", type);
498 return error_mark_node;
499 type_quals = TYPE_UNQUALIFIED;
501 else if (TREE_CODE (type) == ARRAY_TYPE)
503 tree real_main_variant = TYPE_MAIN_VARIANT (type);
504 tree element_type = cp_build_qualified_type_real (TREE_TYPE (type),
507 push_obstacks (TYPE_OBSTACK (real_main_variant),
508 TYPE_OBSTACK (real_main_variant));
509 type = build_cplus_array_type_1 (element_type,
511 if (type == error_mark_node)
512 return error_mark_node;
514 /* TYPE must be on same obstack as REAL_MAIN_VARIANT. If not,
515 make a copy. (TYPE might have come from the hash table and
516 REAL_MAIN_VARIANT might be in some function's obstack.) */
518 if (TYPE_OBSTACK (type) != TYPE_OBSTACK (real_main_variant))
520 type = copy_node (type);
521 TYPE_POINTER_TO (type) = TYPE_REFERENCE_TO (type) = 0;
524 TYPE_MAIN_VARIANT (type) = real_main_variant;
528 return build_qualified_type (type, type_quals);
531 /* Returns the canonical version of TYPE. In other words, if TYPE is
532 a typedef, returns the underlying type. The cv-qualification of
533 the type returned matches the type input; they will always be
537 canonical_type_variant (t)
540 return cp_build_qualified_type (TYPE_MAIN_VARIANT (t), CP_TYPE_QUALS (t));
543 /* Add OFFSET to all base types of T.
545 OFFSET, which is a type offset, is number of bytes.
547 Note that we don't have to worry about having two paths to the
548 same base type, since this type owns its association list. */
551 propagate_binfo_offsets (binfo, offset)
555 tree binfos = BINFO_BASETYPES (binfo);
556 int i, n_baselinks = binfos ? TREE_VEC_LENGTH (binfos) : 0;
558 for (i = 0; i < n_baselinks; /* note increment is done in the loop. */)
560 tree base_binfo = TREE_VEC_ELT (binfos, i);
562 if (TREE_VIA_VIRTUAL (base_binfo))
567 tree delta = NULL_TREE;
569 for (j = i+1; j < n_baselinks; j++)
570 if (! TREE_VIA_VIRTUAL (TREE_VEC_ELT (binfos, j)))
572 /* The next basetype offset must take into account the space
573 between the classes, not just the size of each class. */
574 delta = size_binop (MINUS_EXPR,
575 BINFO_OFFSET (TREE_VEC_ELT (binfos, j)),
576 BINFO_OFFSET (base_binfo));
581 if (BINFO_OFFSET_ZEROP (base_binfo))
582 BINFO_OFFSET (base_binfo) = offset;
584 BINFO_OFFSET (base_binfo)
585 = size_binop (PLUS_EXPR, BINFO_OFFSET (base_binfo), offset);
587 BINFO_OFFSET (base_binfo) = offset;
590 propagate_binfo_offsets (base_binfo, offset);
592 /* Go to our next class that counts for offset propagation. */
595 offset = size_binop (PLUS_EXPR, offset, delta);
600 /* Makes new binfos for the indirect bases under BINFO, and updates
601 BINFO_OFFSET for them and their bases. */
604 unshare_base_binfos (binfo)
607 tree binfos = BINFO_BASETYPES (binfo);
611 if (binfos == NULL_TREE)
614 /* Now unshare the structure beneath BINFO. */
615 for (j = TREE_VEC_LENGTH (binfos)-1;
618 tree base_binfo = TREE_VEC_ELT (binfos, j);
619 new_binfo = TREE_VEC_ELT (binfos, j)
620 = make_binfo (BINFO_OFFSET (base_binfo),
622 BINFO_VTABLE (base_binfo),
623 BINFO_VIRTUALS (base_binfo));
624 TREE_VIA_PUBLIC (new_binfo) = TREE_VIA_PUBLIC (base_binfo);
625 TREE_VIA_PROTECTED (new_binfo) = TREE_VIA_PROTECTED (base_binfo);
626 TREE_VIA_VIRTUAL (new_binfo) = TREE_VIA_VIRTUAL (base_binfo);
627 BINFO_INHERITANCE_CHAIN (new_binfo) = binfo;
628 unshare_base_binfos (new_binfo);
632 /* Finish the work of layout_record, now taking virtual bases into account.
633 Also compute the actual offsets that our base classes will have.
634 This must be performed after the fields are laid out, since virtual
635 baseclasses must lay down at the end of the record.
637 Returns the maximum number of virtual functions any of the
638 baseclasses provide. */
641 layout_basetypes (rec, max)
645 tree binfos = TYPE_BINFO_BASETYPES (rec);
646 int i, n_baseclasses = binfos ? TREE_VEC_LENGTH (binfos) : 0;
650 unsigned int record_align = MAX (BITS_PER_UNIT, TYPE_ALIGN (rec));
651 unsigned int desired_align;
653 /* Record size so far is CONST_SIZE bits, where CONST_SIZE is an integer. */
654 register unsigned int const_size = 0;
655 unsigned int nonvirtual_const_size;
657 #ifdef STRUCTURE_SIZE_BOUNDARY
658 /* Packed structures don't need to have minimum size. */
659 if (! TYPE_PACKED (rec))
660 record_align = MAX (record_align, STRUCTURE_SIZE_BOUNDARY);
663 /* Get all the virtual base types that this type uses. The
664 TREE_VALUE slot holds the virtual baseclass type. Note that
665 get_vbase_types makes copies of the virtual base BINFOs, so that
666 the vbase_types are unshared. */
667 vbase_types = CLASSTYPE_VBASECLASSES (rec);
669 my_friendly_assert (TREE_CODE (TYPE_SIZE (rec)) == INTEGER_CST, 19970302);
670 const_size = TREE_INT_CST_LOW (TYPE_SIZE (rec));
672 nonvirtual_const_size = const_size;
676 tree basetype = BINFO_TYPE (vbase_types);
679 desired_align = TYPE_ALIGN (basetype);
680 record_align = MAX (record_align, desired_align);
683 offset = integer_zero_node;
686 /* Give each virtual base type the alignment it wants. */
687 const_size = CEIL (const_size, desired_align) * desired_align;
688 offset = size_int (CEIL (const_size, BITS_PER_UNIT));
691 if (CLASSTYPE_VSIZE (basetype) > max)
692 max = CLASSTYPE_VSIZE (basetype);
693 BINFO_OFFSET (vbase_types) = offset;
695 /* Every virtual baseclass takes a least a UNIT, so that we can
696 take it's address and get something different for each base. */
697 const_size += MAX (BITS_PER_UNIT,
698 TREE_INT_CST_LOW (CLASSTYPE_SIZE (basetype)));
700 vbase_types = TREE_CHAIN (vbase_types);
705 /* Because a virtual base might take a single byte above,
706 we have to re-adjust the total size to make sure it is
707 a multiple of the alignment. */
708 /* Give the whole object the alignment it wants. */
709 const_size = CEIL (const_size, record_align) * record_align;
712 /* Set the alignment in the complete type. We don't set CLASSTYPE_ALIGN
713 here, as that is for this class, without any virtual base classes. */
714 TYPE_ALIGN (rec) = record_align;
715 if (const_size != nonvirtual_const_size)
717 TYPE_SIZE (rec) = size_int (const_size);
718 TYPE_SIZE_UNIT (rec) = size_binop (FLOOR_DIV_EXPR, TYPE_SIZE (rec),
719 size_int (BITS_PER_UNIT));
722 /* Now propagate offset information throughout the lattice. */
723 for (i = 0; i < n_baseclasses; i++)
725 register tree base_binfo = TREE_VEC_ELT (binfos, i);
726 register tree basetype = BINFO_TYPE (base_binfo);
727 tree field = TYPE_FIELDS (rec);
729 if (TREE_VIA_VIRTUAL (base_binfo))
732 my_friendly_assert (TREE_TYPE (field) == basetype, 23897);
734 if (get_base_distance (basetype, rec, 0, (tree*)0) == -2)
735 cp_warning ("direct base `%T' inaccessible in `%T' due to ambiguity",
738 BINFO_OFFSET (base_binfo)
739 = size_int (CEIL (TREE_INT_CST_LOW (DECL_FIELD_BITPOS (field)),
741 propagate_binfo_offsets (base_binfo, BINFO_OFFSET (base_binfo));
742 TYPE_FIELDS (rec) = TREE_CHAIN (field);
745 for (vbase_types = CLASSTYPE_VBASECLASSES (rec); vbase_types;
746 vbase_types = TREE_CHAIN (vbase_types))
748 BINFO_INHERITANCE_CHAIN (vbase_types) = TYPE_BINFO (rec);
749 unshare_base_binfos (vbase_types);
750 propagate_binfo_offsets (vbase_types, BINFO_OFFSET (vbase_types));
754 tree basetype = BINFO_TYPE (vbase_types);
755 if (get_base_distance (basetype, rec, 0, (tree*)0) == -2)
756 cp_warning ("virtual base `%T' inaccessible in `%T' due to ambiguity",
764 /* If the empty base field in DECL overlaps with a base of the same type in
765 NEWDECL, which is either another base field or the first data field of
766 the class, pad the base just before NEWDECL and return 1. Otherwise,
770 avoid_overlap (decl, newdecl)
775 if (newdecl == NULL_TREE
776 || ! types_overlap_p (TREE_TYPE (decl), TREE_TYPE (newdecl)))
779 for (field = decl; TREE_CHAIN (field) && TREE_CHAIN (field) != newdecl;
780 field = TREE_CHAIN (field))
783 DECL_SIZE (field) = integer_one_node;
788 /* Returns a list of fields to stand in for the base class subobjects
789 of REC. These fields are later removed by layout_basetypes. */
792 build_base_fields (rec)
795 /* Chain to hold all the new FIELD_DECLs which stand in for base class
797 tree base_decls = NULL_TREE;
798 tree binfos = TYPE_BINFO_BASETYPES (rec);
799 int n_baseclasses = binfos ? TREE_VEC_LENGTH (binfos) : 0;
801 int i, saw_empty = 0;
802 unsigned int base_align = 0;
804 for (i = 0; i < n_baseclasses; ++i)
806 register tree base_binfo = TREE_VEC_ELT (binfos, i);
807 register tree basetype = BINFO_TYPE (base_binfo);
809 if (TYPE_SIZE (basetype) == 0)
810 /* This error is now reported in xref_tag, thus giving better
811 location information. */
814 if (TREE_VIA_VIRTUAL (base_binfo))
817 decl = build_lang_field_decl (FIELD_DECL, NULL_TREE, basetype);
818 DECL_ARTIFICIAL (decl) = 1;
819 DECL_FIELD_CONTEXT (decl) = DECL_CLASS_CONTEXT (decl) = rec;
820 DECL_SIZE (decl) = CLASSTYPE_SIZE (basetype);
821 DECL_ALIGN (decl) = CLASSTYPE_ALIGN (basetype);
822 TREE_CHAIN (decl) = base_decls;
827 /* Brain damage for backwards compatibility. For no good reason,
828 the old layout_basetypes made every base at least as large as
829 the alignment for the bases up to that point, gratuitously
830 wasting space. So we do the same thing here. */
831 base_align = MAX (base_align, DECL_ALIGN (decl));
833 = size_int (MAX (TREE_INT_CST_LOW (DECL_SIZE (decl)),
836 else if (DECL_SIZE (decl) == integer_zero_node)
840 /* Reverse the list of fields so we allocate the bases in the proper
842 base_decls = nreverse (base_decls);
844 /* In the presence of empty base classes, we run the risk of allocating
845 two objects of the same class on top of one another. Avoid that. */
846 if (flag_new_abi && saw_empty)
847 for (decl = base_decls; decl; decl = TREE_CHAIN (decl))
849 if (DECL_SIZE (decl) == integer_zero_node)
851 /* First step through the following bases until we find
852 an overlap or a non-empty base. */
853 for (nextdecl = TREE_CHAIN (decl); nextdecl;
854 nextdecl = TREE_CHAIN (nextdecl))
856 if (avoid_overlap (decl, nextdecl)
857 || DECL_SIZE (nextdecl) != integer_zero_node)
861 /* If we're still looking, also check against the first
863 for (nextdecl = TYPE_FIELDS (rec);
864 nextdecl && TREE_CODE (nextdecl) != FIELD_DECL;
865 nextdecl = TREE_CHAIN (nextdecl))
867 avoid_overlap (decl, nextdecl);
875 /* Returns list of virtual base class pointers in a FIELD_DECL chain. */
878 build_vbase_pointer_fields (rec)
881 /* Chain to hold all the new FIELD_DECLs which point at virtual
883 tree vbase_decls = NULL_TREE;
884 tree binfos = TYPE_BINFO_BASETYPES (rec);
885 int n_baseclasses = binfos ? TREE_VEC_LENGTH (binfos) : 0;
889 /* Handle basetypes almost like fields, but record their
890 offsets differently. */
892 for (i = 0; i < n_baseclasses; i++)
894 register tree base_binfo = TREE_VEC_ELT (binfos, i);
895 register tree basetype = BINFO_TYPE (base_binfo);
897 if (TYPE_SIZE (basetype) == 0)
898 /* This error is now reported in xref_tag, thus giving better
899 location information. */
902 /* All basetypes are recorded in the association list of the
905 if (TREE_VIA_VIRTUAL (base_binfo))
910 /* The offset for a virtual base class is only used in computing
911 virtual function tables and for initializing virtual base
912 pointers. It is built once `get_vbase_types' is called. */
914 /* If this basetype can come from another vbase pointer
915 without an additional indirection, we will share
916 that pointer. If an indirection is involved, we
917 make our own pointer. */
918 for (j = 0; j < n_baseclasses; j++)
920 tree other_base_binfo = TREE_VEC_ELT (binfos, j);
921 if (! TREE_VIA_VIRTUAL (other_base_binfo)
922 && binfo_member (basetype,
923 CLASSTYPE_VBASECLASSES (BINFO_TYPE
928 FORMAT_VBASE_NAME (name, basetype);
929 decl = build_lang_field_decl (FIELD_DECL, get_identifier (name),
930 build_pointer_type (basetype));
931 /* If you change any of the below, take a look at all the
932 other VFIELD_BASEs and VTABLE_BASEs in the code, and change
934 DECL_ASSEMBLER_NAME (decl) = get_identifier (VTABLE_BASE);
935 DECL_VIRTUAL_P (decl) = 1;
936 DECL_ARTIFICIAL (decl) = 1;
937 DECL_FIELD_CONTEXT (decl) = rec;
938 DECL_CLASS_CONTEXT (decl) = rec;
939 DECL_FCONTEXT (decl) = basetype;
940 DECL_SAVED_INSNS (decl) = NULL_RTX;
941 DECL_FIELD_SIZE (decl) = 0;
942 DECL_ALIGN (decl) = TYPE_ALIGN (ptr_type_node);
943 TREE_CHAIN (decl) = vbase_decls;
944 BINFO_VPTR_FIELD (base_binfo) = decl;
948 /* The space this decl occupies has already been accounted for. */
956 /* Hashing of lists so that we don't make duplicates.
957 The entry point is `list_hash_canon'. */
959 /* Each hash table slot is a bucket containing a chain
960 of these structures. */
964 struct list_hash *next; /* Next structure in the bucket. */
965 int hashcode; /* Hash code of this list. */
966 tree list; /* The list recorded here. */
969 /* Now here is the hash table. When recording a list, it is added
970 to the slot whose index is the hash code mod the table size.
971 Note that the hash table is used for several kinds of lists.
972 While all these live in the same table, they are completely independent,
973 and the hash code is computed differently for each of these. */
975 #define TYPE_HASH_SIZE 59
976 static struct list_hash *list_hash_table[TYPE_HASH_SIZE];
978 /* Compute a hash code for a list (chain of TREE_LIST nodes
979 with goodies in the TREE_PURPOSE, TREE_VALUE, and bits of the
980 TREE_COMMON slots), by adding the hash codes of the individual entries. */
983 list_hash (purpose, value, chain)
984 tree purpose, value, chain;
986 register int hashcode = 0;
989 hashcode += TYPE_HASH (chain);
992 hashcode += TYPE_HASH (value);
996 hashcode += TYPE_HASH (purpose);
1002 /* Look in the type hash table for a type isomorphic to TYPE.
1003 If one is found, return it. Otherwise return 0. */
1006 list_hash_lookup (hashcode, purpose, value, chain)
1008 tree purpose, value, chain;
1010 register struct list_hash *h;
1012 for (h = list_hash_table[hashcode % TYPE_HASH_SIZE]; h; h = h->next)
1013 if (h->hashcode == hashcode
1014 && TREE_PURPOSE (h->list) == purpose
1015 && TREE_VALUE (h->list) == value
1016 && TREE_CHAIN (h->list) == chain)
1021 /* Add an entry to the list-hash-table
1022 for a list TYPE whose hash code is HASHCODE. */
1025 list_hash_add (hashcode, list)
1029 register struct list_hash *h;
1031 h = (struct list_hash *) obstack_alloc (&class_obstack, sizeof (struct list_hash));
1032 h->hashcode = hashcode;
1034 h->next = list_hash_table[hashcode % TYPE_HASH_SIZE];
1035 list_hash_table[hashcode % TYPE_HASH_SIZE] = h;
1038 /* Given list components PURPOSE, VALUE, AND CHAIN, return the canonical
1039 object for an identical list if one already exists. Otherwise, build a
1040 new one, and record it as the canonical object. */
1042 /* Set to 1 to debug without canonicalization. Never set by program. */
1044 static int debug_no_list_hash = 0;
1047 hash_tree_cons (purpose, value, chain)
1048 tree purpose, value, chain;
1050 struct obstack *ambient_obstack = current_obstack;
1054 if (! debug_no_list_hash)
1056 hashcode = list_hash (purpose, value, chain);
1057 t = list_hash_lookup (hashcode, purpose, value, chain);
1062 current_obstack = &class_obstack;
1064 t = tree_cons (purpose, value, chain);
1066 /* If this is a new list, record it for later reuse. */
1067 if (! debug_no_list_hash)
1068 list_hash_add (hashcode, t);
1070 current_obstack = ambient_obstack;
1074 /* Constructor for hashed lists. */
1077 hash_tree_chain (value, chain)
1080 return hash_tree_cons (NULL_TREE, value, chain);
1083 /* Similar, but used for concatenating two lists. */
1086 hash_chainon (list1, list2)
1093 if (TREE_CHAIN (list1) == NULL_TREE)
1094 return hash_tree_chain (TREE_VALUE (list1), list2);
1095 return hash_tree_chain (TREE_VALUE (list1),
1096 hash_chainon (TREE_CHAIN (list1), list2));
1099 /* Build an association between TYPE and some parameters:
1101 OFFSET is the offset added to `this' to convert it to a pointer
1104 BINFO is the base binfo to use, if we are deriving from one. This
1105 is necessary, as we want specialized parent binfos from base
1106 classes, so that the VTABLE_NAMEs of bases are for the most derived
1107 type, instead of the simple type.
1109 VTABLE is the virtual function table with which to initialize
1110 sub-objects of type TYPE.
1112 VIRTUALS are the virtual functions sitting in VTABLE. */
1115 make_binfo (offset, binfo, vtable, virtuals)
1117 tree vtable, virtuals;
1119 tree new_binfo = make_tree_vec (7);
1122 if (TREE_CODE (binfo) == TREE_VEC)
1123 type = BINFO_TYPE (binfo);
1127 binfo = CLASS_TYPE_P (type) ? TYPE_BINFO (binfo) : NULL_TREE;
1130 TREE_TYPE (new_binfo) = TYPE_MAIN_VARIANT (type);
1131 BINFO_OFFSET (new_binfo) = offset;
1132 BINFO_VTABLE (new_binfo) = vtable;
1133 BINFO_VIRTUALS (new_binfo) = virtuals;
1134 BINFO_VPTR_FIELD (new_binfo) = NULL_TREE;
1136 if (binfo && BINFO_BASETYPES (binfo) != NULL_TREE)
1137 BINFO_BASETYPES (new_binfo) = copy_node (BINFO_BASETYPES (binfo));
1141 /* Return the binfo value for ELEM in TYPE. */
1144 binfo_value (elem, type)
1148 if (get_base_distance (elem, type, 0, (tree *)0) == -2)
1149 compiler_error ("base class `%s' ambiguous in binfo_value",
1150 TYPE_NAME_STRING (elem));
1152 return TYPE_BINFO (type);
1153 if (TREE_CODE (elem) == RECORD_TYPE && TYPE_BINFO (elem) == type)
1155 return get_binfo (elem, type, 0);
1158 /* Return a reversed copy of the BINFO-chain given by PATH. (If the
1159 BINFO_INHERITANCE_CHAIN points from base classes to derived
1160 classes, it will instead point from derived classes to base
1161 classes.) Returns the first node in the reversed chain. */
1167 register tree prev = NULL_TREE, cur;
1168 push_expression_obstack ();
1169 for (cur = path; cur; cur = BINFO_INHERITANCE_CHAIN (cur))
1171 tree r = copy_node (cur);
1172 BINFO_INHERITANCE_CHAIN (r) = prev;
1183 unsigned HOST_WIDE_INT n;
1186 fprintf (stderr, "type \"%s\"; offset = %ld\n",
1187 TYPE_NAME_STRING (BINFO_TYPE (elem)),
1188 (long) TREE_INT_CST_LOW (BINFO_OFFSET (elem)));
1189 fprintf (stderr, "vtable type:\n");
1190 debug_tree (BINFO_TYPE (elem));
1191 if (BINFO_VTABLE (elem))
1192 fprintf (stderr, "vtable decl \"%s\"\n", IDENTIFIER_POINTER (DECL_NAME (BINFO_VTABLE (elem))));
1194 fprintf (stderr, "no vtable decl yet\n");
1195 fprintf (stderr, "virtuals:\n");
1196 virtuals = BINFO_VIRTUALS (elem);
1198 n = skip_rtti_stuff (&virtuals, BINFO_TYPE (elem));
1202 tree fndecl = TREE_OPERAND (FNADDR_FROM_VTABLE_ENTRY (TREE_VALUE (virtuals)), 0);
1203 fprintf (stderr, "%s [%ld =? %ld]\n",
1204 IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (fndecl)),
1205 (long) n, (long) TREE_INT_CST_LOW (DECL_VINDEX (fndecl)));
1207 virtuals = TREE_CHAIN (virtuals);
1211 /* Initialize an CPLUS_BINDING node that does not live on an obstack. */
1215 struct tree_binding* node;
1217 static struct tree_binding* source;
1220 extern struct obstack permanent_obstack;
1221 push_obstacks (&permanent_obstack, &permanent_obstack);
1222 source = (struct tree_binding*)make_node (CPLUS_BINDING);
1226 TREE_PERMANENT ((tree)node) = 0;
1235 if (TREE_CODE (t) == FUNCTION_DECL)
1237 else if (TREE_CODE (t) == OVERLOAD)
1239 for (i=0; t; t = OVL_CHAIN (t))
1244 my_friendly_abort (359);
1249 is_overloaded_fn (x)
1252 /* A baselink is also considered an overloaded function. */
1253 if (TREE_CODE (x) == OFFSET_REF)
1254 x = TREE_OPERAND (x, 1);
1257 return (TREE_CODE (x) == FUNCTION_DECL
1258 || TREE_CODE (x) == TEMPLATE_ID_EXPR
1259 || DECL_FUNCTION_TEMPLATE_P (x)
1260 || TREE_CODE (x) == OVERLOAD);
1264 really_overloaded_fn (x)
1267 /* A baselink is also considered an overloaded function. */
1268 if (TREE_CODE (x) == OFFSET_REF)
1269 x = TREE_OPERAND (x, 1);
1272 return (TREE_CODE (x) == OVERLOAD
1273 && (TREE_CHAIN (x) != NULL_TREE
1274 || DECL_FUNCTION_TEMPLATE_P (OVL_FUNCTION (x))));
1281 my_friendly_assert (is_overloaded_fn (from), 9);
1282 /* A baselink is also considered an overloaded function. */
1283 if (BASELINK_P (from))
1284 from = TREE_VALUE (from);
1285 return OVL_CURRENT (from);
1288 /* Returns nonzero if T is a ->* or .* expression that refers to a
1295 return (TREE_CODE (t) == OFFSET_REF
1296 && TYPE_PTRMEMFUNC_P (TREE_TYPE (TREE_OPERAND (t, 1))));
1299 /* Return a new OVL node, concatenating it with the old one. */
1302 ovl_cons (decl, chain)
1306 tree result = make_node (OVERLOAD);
1307 TREE_TYPE (result) = unknown_type_node;
1308 OVL_FUNCTION (result) = decl;
1309 TREE_CHAIN (result) = chain;
1314 /* Same as ovl_cons, but on the scratch_obstack. */
1317 scratch_ovl_cons (value, chain)
1321 register struct obstack *ambient_obstack = current_obstack;
1322 extern struct obstack *expression_obstack;
1323 current_obstack = expression_obstack;
1324 node = ovl_cons (value, chain);
1325 current_obstack = ambient_obstack;
1329 /* Build a new overloaded function. If this is the first one,
1330 just return it; otherwise, ovl_cons the _DECLs */
1333 build_overload (decl, chain)
1337 if (! chain && TREE_CODE (decl) != TEMPLATE_DECL)
1339 if (chain && TREE_CODE (chain) != OVERLOAD)
1340 chain = ovl_cons (chain, NULL_TREE);
1341 return ovl_cons (decl, chain);
1344 /* Returns true iff functions are equivalent. Equivalent functions are
1345 not identical only if one is a function-local extern function.
1346 This assumes that function-locals don't have TREE_PERMANENT. */
1349 equal_functions (fn1, fn2)
1353 if (!TREE_PERMANENT (fn1) || !TREE_PERMANENT (fn2))
1354 return decls_match (fn1, fn2);
1358 /* True if fn is in ovl. */
1361 ovl_member (fn, ovl)
1365 if (ovl == NULL_TREE)
1367 if (TREE_CODE (ovl) != OVERLOAD)
1368 return equal_functions (ovl, fn);
1369 for (; ovl; ovl = OVL_CHAIN (ovl))
1370 if (equal_functions (OVL_FUNCTION (ovl), fn))
1376 is_aggr_type_2 (t1, t2)
1379 if (TREE_CODE (t1) != TREE_CODE (t2))
1381 return IS_AGGR_TYPE (t1) && IS_AGGR_TYPE (t2);
1384 #define PRINT_RING_SIZE 4
1387 lang_printable_name (decl, v)
1391 static tree decl_ring[PRINT_RING_SIZE];
1392 static char *print_ring[PRINT_RING_SIZE];
1393 static int ring_counter;
1396 /* Only cache functions. */
1398 || TREE_CODE (decl) != FUNCTION_DECL
1399 || DECL_LANG_SPECIFIC (decl) == 0)
1400 return lang_decl_name (decl, v);
1402 /* See if this print name is lying around. */
1403 for (i = 0; i < PRINT_RING_SIZE; i++)
1404 if (decl_ring[i] == decl)
1405 /* yes, so return it. */
1406 return print_ring[i];
1408 if (++ring_counter == PRINT_RING_SIZE)
1411 if (current_function_decl != NULL_TREE)
1413 if (decl_ring[ring_counter] == current_function_decl)
1415 if (ring_counter == PRINT_RING_SIZE)
1417 if (decl_ring[ring_counter] == current_function_decl)
1418 my_friendly_abort (106);
1421 if (print_ring[ring_counter])
1422 free (print_ring[ring_counter]);
1424 print_ring[ring_counter] = xstrdup (lang_decl_name (decl, v));
1425 decl_ring[ring_counter] = decl;
1426 return print_ring[ring_counter];
1429 /* Build the FUNCTION_TYPE or METHOD_TYPE which may throw exceptions
1430 listed in RAISES. */
1433 build_exception_variant (type, raises)
1437 tree v = TYPE_MAIN_VARIANT (type);
1438 int type_quals = TYPE_QUALS (type);
1440 for (; v; v = TYPE_NEXT_VARIANT (v))
1445 if (TYPE_QUALS (v) != type_quals)
1448 for (t = TYPE_RAISES_EXCEPTIONS (v), u = raises;
1449 t != NULL_TREE && u != NULL_TREE;
1450 t = TREE_CHAIN (t), u = TREE_CHAIN (u))
1451 if (((TREE_VALUE (t) != NULL_TREE)
1452 != (TREE_VALUE (u) != NULL_TREE))
1453 || !same_type_p (TREE_VALUE (t), TREE_VALUE (u)))
1457 /* There's a memory leak here; RAISES is not freed. */
1461 /* Need to build a new variant. */
1462 v = build_type_copy (type);
1464 if (raises && ! TREE_PERMANENT (raises))
1465 raises = copy_to_permanent (raises);
1467 TYPE_RAISES_EXCEPTIONS (v) = raises;
1471 /* Given a TEMPLATE_TEMPLATE_PARM node T, create a new one together with its
1472 lang_specific field and its corresponding TEMPLATE_DECL node */
1475 copy_template_template_parm (t)
1478 tree template = TYPE_NAME (t);
1481 /* Make sure these end up on the permanent_obstack. */
1482 push_obstacks_nochange ();
1483 end_temporary_allocation ();
1485 t2 = make_lang_type (TEMPLATE_TEMPLATE_PARM);
1486 template = copy_node (template);
1487 copy_lang_decl (template);
1491 TREE_TYPE (template) = t2;
1492 TYPE_NAME (t2) = template;
1493 TYPE_STUB_DECL (t2) = template;
1495 /* No need to copy these */
1496 TYPE_FIELDS (t2) = TYPE_FIELDS (t);
1497 TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (t2)
1498 = TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (t);
1502 /* Walk through the tree structure T, applying func. If func ever returns
1503 non-null, return that value. */
1506 search_tree (t, func)
1508 tree (*func) PROTO((tree));
1510 #define TRY(ARG) if (tmp=search_tree (ARG, func), tmp != NULL_TREE) return tmp
1517 if (tmp = func (t), tmp != NULL_TREE)
1520 switch (TREE_CODE (t))
1525 case IDENTIFIER_NODE:
1532 case NAMESPACE_DECL:
1536 TRY (TREE_TYPE (t));
1540 TRY (TREE_TYPE (t));
1541 TRY (TREE_CHAIN (t));
1545 TRY (TREE_PURPOSE (t));
1546 TRY (TREE_VALUE (t));
1547 TRY (TREE_CHAIN (t));
1551 TRY (OVL_FUNCTION (t));
1552 TRY (OVL_CHAIN (t));
1557 int len = TREE_VEC_LENGTH (t);
1561 TRY (TREE_VEC_ELT (t, len));
1572 TRY (TREE_TYPE (t));
1577 case AGGR_INIT_EXPR:
1579 TRY (TREE_OPERAND (t, 0));
1580 TRY (TREE_OPERAND (t, 1));
1581 TRY (TREE_OPERAND (t, 2));
1588 case TRUNC_DIV_EXPR:
1589 case TRUNC_MOD_EXPR:
1597 case BIT_ANDTC_EXPR:
1598 case TRUTH_ANDIF_EXPR:
1599 case TRUTH_ORIF_EXPR:
1607 case FLOOR_DIV_EXPR:
1608 case ROUND_DIV_EXPR:
1610 case FLOOR_MOD_EXPR:
1611 case ROUND_MOD_EXPR:
1613 case PREDECREMENT_EXPR:
1614 case PREINCREMENT_EXPR:
1615 case POSTDECREMENT_EXPR:
1616 case POSTINCREMENT_EXPR:
1619 case TRY_CATCH_EXPR:
1620 case WITH_CLEANUP_EXPR:
1622 TRY (TREE_OPERAND (t, 0));
1623 TRY (TREE_OPERAND (t, 1));
1632 case TRUTH_NOT_EXPR:
1634 case NON_LVALUE_EXPR:
1636 case CLEANUP_POINT_EXPR:
1640 TRY (TREE_OPERAND (t, 0));
1645 case REINTERPRET_CAST_EXPR:
1646 case CONST_CAST_EXPR:
1647 case STATIC_CAST_EXPR:
1648 case DYNAMIC_CAST_EXPR:
1655 TRY (TREE_REALPART (t));
1656 TRY (TREE_IMAGPART (t));
1660 TRY (CONSTRUCTOR_ELTS (t));
1663 case TEMPLATE_TEMPLATE_PARM:
1664 case TEMPLATE_PARM_INDEX:
1665 case TEMPLATE_TYPE_PARM:
1682 case REFERENCE_TYPE:
1683 TRY (TREE_TYPE (t));
1688 TRY (TREE_TYPE (t));
1689 TRY (TYPE_ARG_TYPES (t));
1693 TRY (TREE_TYPE (t));
1694 TRY (TYPE_DOMAIN (t));
1698 TRY (TYPE_MAX_VALUE (t));
1702 TRY (TREE_TYPE (t));
1703 TRY (TYPE_OFFSET_BASETYPE (t));
1707 if (TYPE_PTRMEMFUNC_P (t))
1708 TRY (TYPE_PTRMEMFUNC_FN_TYPE (t));
1711 /* This list is incomplete, but should suffice for now.
1712 It is very important that `sorry' not call
1713 `report_error_function'. That could cause an infinite loop. */
1715 sorry ("initializer contains unrecognized tree code");
1716 return error_mark_node;
1725 /* Passed to search_tree. Checks for the use of types with no linkage. */
1728 no_linkage_helper (t)
1732 && (IS_AGGR_TYPE (t) || TREE_CODE (t) == ENUMERAL_TYPE)
1733 && (decl_function_context (TYPE_MAIN_DECL (t))
1734 || ANON_AGGRNAME_P (TYPE_IDENTIFIER (t))))
1739 /* Check if the type T depends on a type with no linkage and if so, return
1743 no_linkage_check (t)
1746 t = search_tree (t, no_linkage_helper);
1747 if (t != error_mark_node)
1753 /* Make copies of all the nodes below T. If FUNC is non-NULL, call it
1759 tree (*func) PROTO((tree));
1773 switch (TREE_CODE (t))
1776 return error_mark_node;
1781 /* Rather than aborting, return error_mark_node. This allows us
1782 to report a sensible error message on code like this:
1784 void g() { int i; f<i>(7); }
1788 void g() { const int i = 7; f<i>(7); }
1790 however, we must actually return the constant initializer. */
1791 if (TREE_READONLY_DECL_P (t))
1793 tmp = decl_constant_value (t);
1795 return mapcar (tmp, func);
1797 return error_mark_node;
1801 tree chain = TREE_CHAIN (t);
1803 TREE_CHAIN (t) = mapcar (chain, func);
1804 TREE_TYPE (t) = mapcar (TREE_TYPE (t), func);
1805 DECL_INITIAL (t) = mapcar (DECL_INITIAL (t), func);
1806 DECL_SIZE (t) = mapcar (DECL_SIZE (t), func);
1812 tree chain = TREE_CHAIN (t);
1814 TREE_PURPOSE (t) = mapcar (TREE_PURPOSE (t), func);
1815 TREE_VALUE (t) = mapcar (TREE_VALUE (t), func);
1816 TREE_CHAIN (t) = mapcar (chain, func);
1822 tree chain = OVL_CHAIN (t);
1824 OVL_FUNCTION (t) = mapcar (OVL_FUNCTION (t), func);
1825 OVL_CHAIN (t) = mapcar (chain, func);
1831 int len = TREE_VEC_LENGTH (t);
1835 TREE_VEC_ELT (t, len) = mapcar (TREE_VEC_ELT (t, len), func);
1842 return copy_node (t);
1846 TREE_TYPE (t) = mapcar (TREE_TYPE (t), func);
1847 PTRMEM_CST_MEMBER (t) = mapcar (PTRMEM_CST_MEMBER (t), func);
1852 case AGGR_INIT_EXPR:
1854 TREE_OPERAND (t, 0) = mapcar (TREE_OPERAND (t, 0), func);
1855 TREE_OPERAND (t, 1) = mapcar (TREE_OPERAND (t, 1), func);
1856 TREE_OPERAND (t, 2) = mapcar (TREE_OPERAND (t, 2), func);
1861 TREE_OPERAND (t, 0) = mapcar (TREE_OPERAND (t, 0), func);
1868 case TRUNC_DIV_EXPR:
1869 case TRUNC_MOD_EXPR:
1877 case BIT_ANDTC_EXPR:
1878 case TRUTH_ANDIF_EXPR:
1879 case TRUTH_ORIF_EXPR:
1887 case FLOOR_DIV_EXPR:
1888 case ROUND_DIV_EXPR:
1890 case FLOOR_MOD_EXPR:
1891 case ROUND_MOD_EXPR:
1893 case PREDECREMENT_EXPR:
1894 case PREINCREMENT_EXPR:
1895 case POSTDECREMENT_EXPR:
1896 case POSTINCREMENT_EXPR:
1899 case TRY_CATCH_EXPR:
1900 case WITH_CLEANUP_EXPR:
1902 TREE_OPERAND (t, 0) = mapcar (TREE_OPERAND (t, 0), func);
1903 TREE_OPERAND (t, 1) = mapcar (TREE_OPERAND (t, 1), func);
1908 TREE_TYPE (t) = mapcar (TREE_TYPE (t), func);
1909 TREE_OPERAND (t, 0) = mapcar (TREE_OPERAND (t, 0), func);
1910 TREE_OPERAND (t, 1) = mapcar (TREE_OPERAND (t, 1), func);
1912 /* tree.def says that operand two is RTL, but
1913 make_call_declarator puts trees in there. */
1914 if (TREE_OPERAND (t, 2)
1915 && TREE_CODE (TREE_OPERAND (t, 2)) == TREE_LIST)
1916 TREE_OPERAND (t, 2) = mapcar (TREE_OPERAND (t, 2), func);
1918 TREE_OPERAND (t, 2) = NULL_TREE;
1926 case TRUTH_NOT_EXPR:
1929 case CLEANUP_POINT_EXPR:
1930 case NON_LVALUE_EXPR:
1932 TREE_TYPE (t) = mapcar (TREE_TYPE (t), func);
1933 TREE_OPERAND (t, 0) = mapcar (TREE_OPERAND (t, 0), func);
1937 tmp = build_pointer_type (mapcar (TREE_TYPE (t), func));
1938 return cp_build_qualified_type (tmp, TYPE_QUALS (t));
1939 case REFERENCE_TYPE:
1940 tmp = build_reference_type (mapcar (TREE_TYPE (t), func));
1941 return cp_build_qualified_type (tmp, TYPE_QUALS (t));
1943 tmp = build_function_type (mapcar (TREE_TYPE (t), func),
1944 mapcar (TYPE_ARG_TYPES (t), func));
1945 return cp_build_qualified_type (tmp, TYPE_QUALS (t));
1947 tmp = build_cplus_array_type (mapcar (TREE_TYPE (t), func),
1948 mapcar (TYPE_DOMAIN (t), func));
1949 return cp_build_qualified_type (tmp, CP_TYPE_QUALS (t));
1951 tmp = build_index_type (mapcar (TYPE_MAX_VALUE (t), func));
1952 return cp_build_qualified_type (tmp, TYPE_QUALS (t));
1954 tmp = build_offset_type (mapcar (TYPE_OFFSET_BASETYPE (t), func),
1955 mapcar (TREE_TYPE (t), func));
1956 return cp_build_qualified_type (tmp, TYPE_QUALS (t));
1958 tmp = build_cplus_method_type
1959 (mapcar (TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (t))), func),
1960 mapcar (TREE_TYPE (t), func),
1961 mapcar (TREE_CHAIN (TYPE_ARG_TYPES (t)), func));
1962 return cp_build_qualified_type (tmp, TYPE_QUALS (t));
1966 TREE_REALPART (t) = mapcar (TREE_REALPART (t), func);
1967 TREE_IMAGPART (t) = mapcar (TREE_REALPART (t), func);
1972 CONSTRUCTOR_ELTS (t) = mapcar (CONSTRUCTOR_ELTS (t), func);
1975 case TEMPLATE_TEMPLATE_PARM:
1976 return copy_template_template_parm (t);
1980 TREE_OPERAND (t, 0) = mapcar (TREE_OPERAND (t, 0), func);
1981 TREE_OPERAND (t, 1) = mapcar (TREE_OPERAND (t, 1), func);
1982 TREE_OPERAND (t, 2) = NULL_TREE;
1987 TREE_OPERAND (t, 0) = mapcar (TREE_OPERAND (t, 0), func);
1988 TREE_OPERAND (t, 1) = mapcar (TREE_OPERAND (t, 1), func);
1989 TREE_OPERAND (t, 2) = mapcar (TREE_OPERAND (t, 2), func);
1994 TREE_OPERAND (t, 0) = mapcar (TREE_OPERAND (t, 0), func);
1998 if (TYPE_PTRMEMFUNC_P (t))
1999 return build_ptrmemfunc_type
2000 (mapcar (TYPE_PTRMEMFUNC_FN_TYPE (t), func));
2001 /* else fall through */
2003 /* This list is incomplete, but should suffice for now.
2004 It is very important that `sorry' not call
2005 `report_error_function'. That could cause an infinite loop. */
2007 sorry ("initializer contains unrecognized tree code");
2008 return error_mark_node;
2011 my_friendly_abort (107);
2016 /* Returns T if T is allocated on the permanent obstack, NULL_TREE
2023 return TREE_PERMANENT (t) ? t : NULL_TREE;
2030 if (TREE_PERMANENT (t))
2033 /* Support `void f () { extern int i; A<&i> a; }' */
2034 if ((TREE_CODE (t) == VAR_DECL || TREE_CODE (t) == FUNCTION_DECL)
2039 /* copy_rtx won't make a new SYMBOL_REF, so call make_decl_rtl again. */
2041 make_decl_rtl (t, NULL_PTR, 1);
2048 /* Assuming T is a node built bottom-up, make it all exist on
2049 permanent obstack, if it is not permanent already. */
2052 copy_to_permanent (t)
2055 if (t == NULL_TREE || TREE_PERMANENT (t))
2058 push_obstacks_nochange ();
2059 end_temporary_allocation ();
2061 t = mapcar (t, perm_manip);
2068 #ifdef GATHER_STATISTICS
2069 extern int depth_reached;
2073 print_lang_statistics ()
2075 extern struct obstack decl_obstack;
2076 print_obstack_statistics ("class_obstack", &class_obstack);
2077 print_obstack_statistics ("decl_obstack", &decl_obstack);
2078 print_search_statistics ();
2079 print_class_statistics ();
2080 #ifdef GATHER_STATISTICS
2081 fprintf (stderr, "maximum template instantiation depth reached: %d\n",
2086 /* This is used by the `assert' macro. It is provided in libgcc.a,
2087 which `cc' doesn't know how to link. Note that the C++ front-end
2088 no longer actually uses the `assert' macro (instead, it calls
2089 my_friendly_assert). But all of the back-end files still need this. */
2092 __eprintf (string, expression, line, filename)
2094 const char *expression;
2096 const char *filename;
2098 fprintf (stderr, string, expression, line, filename);
2103 /* Return, as an INTEGER_CST node, the number of elements for TYPE
2104 (which is an ARRAY_TYPE). This counts only elements of the top
2108 array_type_nelts_top (type)
2111 return fold (build (PLUS_EXPR, sizetype,
2112 array_type_nelts (type),
2116 /* Return, as an INTEGER_CST node, the number of elements for TYPE
2117 (which is an ARRAY_TYPE). This one is a recursive count of all
2118 ARRAY_TYPEs that are clumped together. */
2121 array_type_nelts_total (type)
2124 tree sz = array_type_nelts_top (type);
2125 type = TREE_TYPE (type);
2126 while (TREE_CODE (type) == ARRAY_TYPE)
2128 tree n = array_type_nelts_top (type);
2129 sz = fold (build (MULT_EXPR, sizetype, sz, n));
2130 type = TREE_TYPE (type);
2140 if (TREE_CODE (t) != TREE_LIST && ! TREE_SIDE_EFFECTS (t))
2142 else if (TREE_CODE (t) == TARGET_EXPR)
2144 if (TREE_CODE (TREE_OPERAND (t, 1)) == AGGR_INIT_EXPR)
2146 mark_used (TREE_OPERAND (TREE_OPERAND (TREE_OPERAND (t, 1), 0), 0));
2147 return build_cplus_new
2148 (TREE_TYPE (t), break_out_target_exprs (TREE_OPERAND (t, 1)));
2151 TREE_OPERAND (t, 0) = build (VAR_DECL, TREE_TYPE (t));
2152 layout_decl (TREE_OPERAND (t, 0), 0);
2155 else if (TREE_CODE (t) == CALL_EXPR)
2156 mark_used (TREE_OPERAND (TREE_OPERAND (t, 0), 0));
2161 /* Actually, we'll just clean out the target exprs for the moment. */
2164 break_out_target_exprs (t)
2167 return mapcar (t, bot_manip);
2170 /* Obstack used for allocating nodes in template function and variable
2173 /* Similar to `build_nt', except we build
2174 on the permanent_obstack, regardless. */
2177 build_min_nt VPROTO((enum tree_code code, ...))
2180 enum tree_code code;
2182 register struct obstack *ambient_obstack = expression_obstack;
2185 register int length;
2191 code = va_arg (p, enum tree_code);
2194 expression_obstack = &permanent_obstack;
2196 t = make_node (code);
2197 length = tree_code_length[(int) code];
2198 TREE_COMPLEXITY (t) = lineno;
2200 for (i = 0; i < length; i++)
2202 tree x = va_arg (p, tree);
2203 TREE_OPERAND (t, i) = copy_to_permanent (x);
2207 expression_obstack = ambient_obstack;
2211 /* Similar to `build', except we build
2212 on the permanent_obstack, regardless. */
2215 build_min VPROTO((enum tree_code code, tree tt, ...))
2218 enum tree_code code;
2221 register struct obstack *ambient_obstack = expression_obstack;
2224 register int length;
2230 code = va_arg (p, enum tree_code);
2231 tt = va_arg (p, tree);
2234 expression_obstack = &permanent_obstack;
2236 t = make_node (code);
2237 length = tree_code_length[(int) code];
2238 TREE_TYPE (t) = copy_to_permanent (tt);
2239 TREE_COMPLEXITY (t) = lineno;
2241 for (i = 0; i < length; i++)
2243 tree x = va_arg (p, tree);
2244 TREE_OPERAND (t, i) = copy_to_permanent (x);
2248 expression_obstack = ambient_obstack;
2252 /* Same as `tree_cons' but make a permanent object. */
2255 min_tree_cons (purpose, value, chain)
2256 tree purpose, value, chain;
2259 register struct obstack *ambient_obstack = current_obstack;
2260 current_obstack = &permanent_obstack;
2262 node = tree_cons (copy_to_permanent (purpose),
2263 copy_to_permanent (value), chain);
2264 current_obstack = ambient_obstack;
2272 if (TREE_CODE (t) == TYPE_DECL)
2274 if (TREE_CODE_CLASS (TREE_CODE (t)) == 't')
2275 return TYPE_STUB_DECL (t);
2277 my_friendly_abort (42);
2279 /* Stop compiler from complaining control reaches end of non-void function. */
2284 can_free (obstack, t)
2285 struct obstack *obstack;
2290 if (TREE_CODE (t) == TREE_VEC)
2291 size = (TREE_VEC_LENGTH (t)-1) * sizeof (tree) + sizeof (struct tree_vec);
2293 my_friendly_abort (42);
2295 #define ROUND(x) ((x + obstack_alignment_mask (obstack)) \
2296 & ~ obstack_alignment_mask (obstack))
2297 if ((char *)t + ROUND (size) == obstack_next_free (obstack))
2304 /* Return first vector element whose BINFO_TYPE is ELEM.
2305 Return 0 if ELEM is not in VEC. VEC may be NULL_TREE. */
2308 vec_binfo_member (elem, vec)
2314 for (i = 0; i < TREE_VEC_LENGTH (vec); ++i)
2315 if (same_type_p (elem, BINFO_TYPE (TREE_VEC_ELT (vec, i))))
2316 return TREE_VEC_ELT (vec, i);
2321 /* Kludge around the fact that DECL_CONTEXT for virtual functions returns
2322 the wrong thing for decl_function_context. Hopefully the uses in the
2323 backend won't matter, since we don't need a static chain for local class
2327 hack_decl_function_context (decl)
2330 if (TREE_CODE (decl) == FUNCTION_DECL && DECL_FUNCTION_MEMBER_P (decl))
2331 return decl_function_context (TYPE_MAIN_DECL (DECL_CLASS_CONTEXT (decl)));
2332 return decl_function_context (decl);
2335 /* Returns the namespace that contains DECL, whether directly or
2339 decl_namespace_context (decl)
2344 if (TREE_CODE (decl) == NAMESPACE_DECL)
2346 else if (TYPE_P (decl))
2347 decl = CP_DECL_CONTEXT (TYPE_MAIN_DECL (decl));
2349 decl = CP_DECL_CONTEXT (decl);
2353 /* Return truthvalue of whether T1 is the same tree structure as T2.
2354 Return 1 if they are the same.
2355 Return 0 if they are understandably different.
2356 Return -1 if either contains tree structure not understood by
2360 cp_tree_equal (t1, t2)
2363 register enum tree_code code1, code2;
2368 if (t1 == 0 || t2 == 0)
2371 code1 = TREE_CODE (t1);
2372 code2 = TREE_CODE (t2);
2374 if (code1 == NOP_EXPR || code1 == CONVERT_EXPR || code1 == NON_LVALUE_EXPR)
2376 if (code2 == NOP_EXPR || code2 == CONVERT_EXPR || code2 == NON_LVALUE_EXPR)
2377 return cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
2379 return cp_tree_equal (TREE_OPERAND (t1, 0), t2);
2381 else if (code2 == NOP_EXPR || code2 == CONVERT_EXPR
2382 || code2 == NON_LVALUE_EXPR)
2383 return cp_tree_equal (t1, TREE_OPERAND (t2, 0));
2391 return TREE_INT_CST_LOW (t1) == TREE_INT_CST_LOW (t2)
2392 && TREE_INT_CST_HIGH (t1) == TREE_INT_CST_HIGH (t2);
2395 return REAL_VALUES_EQUAL (TREE_REAL_CST (t1), TREE_REAL_CST (t2));
2398 return TREE_STRING_LENGTH (t1) == TREE_STRING_LENGTH (t2)
2399 && !bcmp (TREE_STRING_POINTER (t1), TREE_STRING_POINTER (t2),
2400 TREE_STRING_LENGTH (t1));
2403 /* We need to do this when determining whether or not two
2404 non-type pointer to member function template arguments
2406 if (!(same_type_p (TREE_TYPE (t1), TREE_TYPE (t2))
2407 /* The first operand is RTL. */
2408 && TREE_OPERAND (t1, 0) == TREE_OPERAND (t2, 0)))
2410 return cp_tree_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
2413 cmp = cp_tree_equal (TREE_PURPOSE (t1), TREE_PURPOSE (t2));
2416 cmp = cp_tree_equal (TREE_VALUE (t1), TREE_VALUE (t2));
2419 return cp_tree_equal (TREE_CHAIN (t1), TREE_CHAIN (t2));
2422 return cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
2425 cmp = cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
2428 return simple_cst_list_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
2431 /* Special case: if either target is an unallocated VAR_DECL,
2432 it means that it's going to be unified with whatever the
2433 TARGET_EXPR is really supposed to initialize, so treat it
2434 as being equivalent to anything. */
2435 if ((TREE_CODE (TREE_OPERAND (t1, 0)) == VAR_DECL
2436 && DECL_NAME (TREE_OPERAND (t1, 0)) == NULL_TREE
2437 && DECL_RTL (TREE_OPERAND (t1, 0)) == 0)
2438 || (TREE_CODE (TREE_OPERAND (t2, 0)) == VAR_DECL
2439 && DECL_NAME (TREE_OPERAND (t2, 0)) == NULL_TREE
2440 && DECL_RTL (TREE_OPERAND (t2, 0)) == 0))
2443 cmp = cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
2446 return cp_tree_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
2448 case WITH_CLEANUP_EXPR:
2449 cmp = cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
2452 return cp_tree_equal (TREE_OPERAND (t1, 2), TREE_OPERAND (t1, 2));
2455 if (TREE_OPERAND (t1, 1) == TREE_OPERAND (t2, 1))
2456 return cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
2465 case TEMPLATE_PARM_INDEX:
2466 return TEMPLATE_PARM_IDX (t1) == TEMPLATE_PARM_IDX (t2)
2467 && TEMPLATE_PARM_LEVEL (t1) == TEMPLATE_PARM_LEVEL (t2);
2471 if (TREE_CODE (TREE_OPERAND (t1, 0)) != TREE_CODE (TREE_OPERAND (t2, 0)))
2473 if (TREE_CODE_CLASS (TREE_CODE (TREE_OPERAND (t1, 0))) == 't')
2474 return same_type_p (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
2478 /* Two pointer-to-members are the same if they point to the same
2479 field or function in the same class. */
2480 return (PTRMEM_CST_MEMBER (t1) == PTRMEM_CST_MEMBER (t2)
2481 && same_type_p (PTRMEM_CST_CLASS (t1), PTRMEM_CST_CLASS (t2)));
2487 switch (TREE_CODE_CLASS (code1))
2497 for (i=0; i<tree_code_length[(int) code1]; ++i)
2499 cmp = cp_tree_equal (TREE_OPERAND (t1, i), TREE_OPERAND (t2, i));
2509 /* Similar to make_tree_vec, but build on the momentary_obstack.
2510 Thus, these vectors are really and truly temporary. */
2517 push_expression_obstack ();
2518 node = make_tree_vec (len);
2523 /* Build a wrapper around some pointer PTR so we can use it as a tree. */
2526 build_ptr_wrapper (ptr)
2529 tree t = make_node (WRAPPER);
2530 WRAPPER_PTR (t) = ptr;
2534 /* Same, but on the expression_obstack. */
2537 build_expr_ptr_wrapper (ptr)
2541 push_expression_obstack ();
2542 t = build_ptr_wrapper (ptr);
2547 /* Build a wrapper around some integer I so we can use it as a tree. */
2550 build_int_wrapper (i)
2553 tree t = make_node (WRAPPER);
2554 WRAPPER_INT (t) = i;
2559 build_srcloc (file, line)
2565 /* Make sure that we put these on the permanent obstack; up in
2566 add_pending_template, we pass this return value into perm_tree_cons,
2567 which also puts it on the permanent_obstack. However, this wasn't
2568 explicitly doing the same. */
2569 register struct obstack *ambient_obstack = current_obstack;
2570 current_obstack = &permanent_obstack;
2572 t = make_node (SRCLOC);
2573 SRCLOC_FILE (t) = file;
2574 SRCLOC_LINE (t) = line;
2576 current_obstack = ambient_obstack;
2582 build_srcloc_here ()
2584 return build_srcloc (input_filename, lineno);
2588 push_expression_obstack ()
2590 push_obstacks_nochange ();
2591 current_obstack = expression_obstack;
2594 /* The type of ARG when used as an lvalue. */
2600 tree type = TREE_TYPE (arg);
2601 if (TREE_CODE (arg) == OVERLOAD)
2602 type = unknown_type_node;
2606 /* The type of ARG for printing error messages; denote lvalues with
2613 tree type = TREE_TYPE (arg);
2614 if (TREE_CODE (type) == ARRAY_TYPE)
2616 else if (real_lvalue_p (arg))
2617 type = build_reference_type (lvalue_type (arg));
2618 else if (IS_AGGR_TYPE (type))
2619 type = lvalue_type (arg);
2624 /* Does FUNCTION use a variable-length argument list? */
2627 varargs_function_p (function)
2630 tree parm = TYPE_ARG_TYPES (TREE_TYPE (function));
2631 for (; parm; parm = TREE_CHAIN (parm))
2632 if (TREE_VALUE (parm) == void_type_node)
2637 /* Returns 1 if decl is a member of a class. */
2643 tree ctx = DECL_CONTEXT (decl);
2644 return (ctx && TREE_CODE_CLASS (TREE_CODE (ctx)) == 't');
2647 /* Create a placeholder for member access where we don't actually have an
2648 object that the access is against. */
2651 build_dummy_object (type)
2654 tree decl = build1 (NOP_EXPR, build_pointer_type (type), void_zero_node);
2655 return build_indirect_ref (decl, NULL_PTR);
2658 /* We've gotten a reference to a member of TYPE. Return *this if appropriate,
2659 or a dummy object otherwise. If BINFOP is non-0, it is filled with the
2660 binfo path from current_class_type to TYPE, or 0. */
2663 maybe_dummy_object (type, binfop)
2669 if (current_class_type
2670 && get_base_distance (type, current_class_type, 0, binfop) != -1)
2671 context = current_class_type;
2674 /* Reference from a nested class member function. */
2677 *binfop = TYPE_BINFO (type);
2680 if (current_class_ref && context == current_class_type)
2681 decl = current_class_ref;
2683 decl = build_dummy_object (context);
2688 /* Returns 1 if OB is a placeholder object, or a pointer to one. */
2691 is_dummy_object (ob)
2694 if (TREE_CODE (ob) == INDIRECT_REF)
2695 ob = TREE_OPERAND (ob, 0);
2696 return (TREE_CODE (ob) == NOP_EXPR
2697 && TREE_OPERAND (ob, 0) == void_zero_node);
2700 /* Returns 1 iff type T is a POD type, as defined in [basic.types]. */
2708 while (TREE_CODE (t) == ARRAY_TYPE)
2711 if (! IS_AGGR_TYPE (t))
2714 if (CLASSTYPE_NON_AGGREGATE (t)
2715 || TYPE_HAS_COMPLEX_ASSIGN_REF (t)
2716 || TYPE_HAS_DESTRUCTOR (t))
2719 for (f = TYPE_FIELDS (t); f; f = TREE_CHAIN (f))
2721 if (TREE_CODE (f) != FIELD_DECL)
2724 if (TREE_CODE (TREE_TYPE (f)) == REFERENCE_TYPE
2725 || TYPE_PTRMEMFUNC_P (TREE_TYPE (f))
2726 || TYPE_PTRMEM_P (TREE_TYPE (f)))
2733 /* Return a 1 if ATTR_NAME and ATTR_ARGS denote a valid C++-specific
2734 attribute for either declaration DECL or type TYPE and 0 otherwise.
2735 Plugged into valid_lang_attribute. */
2738 cp_valid_lang_attribute (attr_name, attr_args, decl, type)
2740 tree attr_args ATTRIBUTE_UNUSED;
2741 tree decl ATTRIBUTE_UNUSED;
2742 tree type ATTRIBUTE_UNUSED;
2744 if (is_attribute_p ("com_interface", attr_name))
2746 if (! flag_vtable_thunks)
2748 error ("`com_interface' only supported with -fvtable-thunks");
2752 if (attr_args != NULL_TREE
2753 || decl != NULL_TREE
2754 || ! CLASS_TYPE_P (type)
2755 || type != TYPE_MAIN_VARIANT (type))
2757 warning ("`com_interface' attribute can only be applied to class definitions");
2761 CLASSTYPE_COM_INTERFACE (type) = 1;
2764 else if (is_attribute_p ("init_priority", attr_name))
2766 tree initp_expr = (attr_args ? TREE_VALUE (attr_args): NULL_TREE);
2770 STRIP_NOPS (initp_expr);
2772 if (!initp_expr || TREE_CODE (initp_expr) != INTEGER_CST)
2774 error ("requested init_priority is not an integer constant");
2778 pri = TREE_INT_CST_LOW (initp_expr);
2780 while (TREE_CODE (type) == ARRAY_TYPE)
2781 type = TREE_TYPE (type);
2783 if (decl == NULL_TREE
2784 || TREE_CODE (decl) != VAR_DECL
2785 || ! TREE_STATIC (decl)
2786 || DECL_EXTERNAL (decl)
2787 || (TREE_CODE (type) != RECORD_TYPE
2788 && TREE_CODE (type) != UNION_TYPE)
2789 /* Static objects in functions are initialized the
2790 first time control passes through that
2791 function. This is not precise enough to pin down an
2792 init_priority value, so don't allow it. */
2793 || current_function_decl)
2795 error ("can only use init_priority attribute on file-scope definitions of objects of class type");
2799 if (pri > MAX_INIT_PRIORITY || pri <= 0)
2801 error ("requested init_priority is out of range");
2805 /* Check for init_priorities that are reserved for
2806 language and runtime support implementations.*/
2807 if (pri <= MAX_RESERVED_INIT_PRIORITY)
2810 ("requested init_priority is reserved for internal use");
2813 DECL_INIT_PRIORITY (decl) = pri;
2820 /* Return a new PTRMEM_CST of the indicated TYPE. The MEMBER is the
2821 thing pointed to by the constant. */
2824 make_ptrmem_cst (type, member)
2828 tree ptrmem_cst = make_node (PTRMEM_CST);
2829 /* If would seem a great convenience if make_node would set
2830 TREE_CONSTANT for things of class `c', but it does not. */
2831 TREE_CONSTANT (ptrmem_cst) = 1;
2832 TREE_TYPE (ptrmem_cst) = type;
2833 PTRMEM_CST_MEMBER (ptrmem_cst) = member;