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 cp_lvalue_kind 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 /* If REF is an lvalue, returns the kind of lvalue that REF is.
47 Otherwise, returns clk_none. If TREAT_CLASS_RVALUES_AS_LVALUES is
48 non-zero, rvalues of class type are considered lvalues. */
51 lvalue_p_1 (ref, treat_class_rvalues_as_lvalues)
53 int treat_class_rvalues_as_lvalues;
55 cp_lvalue_kind op1_lvalue_kind = clk_none;
56 cp_lvalue_kind op2_lvalue_kind = clk_none;
58 if (TREE_CODE (TREE_TYPE (ref)) == REFERENCE_TYPE)
61 if (ref == current_class_ptr && flag_this_is_variable <= 0)
64 switch (TREE_CODE (ref))
66 /* preincrements and predecrements are valid lvals, provided
67 what they refer to are valid lvals. */
68 case PREINCREMENT_EXPR:
69 case PREDECREMENT_EXPR:
73 case WITH_CLEANUP_EXPR:
77 return lvalue_p_1 (TREE_OPERAND (ref, 0),
78 treat_class_rvalues_as_lvalues);
81 op1_lvalue_kind = lvalue_p_1 (TREE_OPERAND (ref, 0),
82 treat_class_rvalues_as_lvalues);
84 /* The "field" can be a FUNCTION_DECL or an OVERLOAD in some
86 && TREE_CODE (TREE_OPERAND (ref, 1)) == FIELD_DECL
87 && DECL_BIT_FIELD (TREE_OPERAND (ref, 1)))
89 /* Clear the ordinary bit. If this object was a class
90 rvalue we want to preserve that information. */
91 op1_lvalue_kind &= ~clk_ordinary;
92 /* The lvalue is for a btifield. */
93 op1_lvalue_kind |= clk_bitfield;
95 return op1_lvalue_kind;
101 if (TREE_READONLY (ref) && ! TREE_STATIC (ref)
102 && DECL_LANG_SPECIFIC (ref)
103 && DECL_IN_AGGR_P (ref))
109 if (TREE_CODE (TREE_TYPE (ref)) != METHOD_TYPE)
113 /* A currently unresolved scope ref. */
115 my_friendly_abort (103);
117 if (TREE_CODE (TREE_OPERAND (ref, 1)) == FUNCTION_DECL)
122 op1_lvalue_kind = lvalue_p_1 (TREE_OPERAND (ref, 0),
123 treat_class_rvalues_as_lvalues);
124 op2_lvalue_kind = lvalue_p_1 (TREE_OPERAND (ref, 1),
125 treat_class_rvalues_as_lvalues);
129 op1_lvalue_kind = lvalue_p_1 (TREE_OPERAND (ref, 1),
130 treat_class_rvalues_as_lvalues);
131 op2_lvalue_kind = lvalue_p_1 (TREE_OPERAND (ref, 2),
132 treat_class_rvalues_as_lvalues);
139 return lvalue_p_1 (TREE_OPERAND (ref, 1),
140 treat_class_rvalues_as_lvalues);
143 return treat_class_rvalues_as_lvalues ? clk_class : clk_none;
146 return ((treat_class_rvalues_as_lvalues
147 && IS_AGGR_TYPE (TREE_TYPE (ref)))
148 ? clk_class : clk_none);
151 /* All functions (except non-static-member functions) are
153 return (DECL_NONSTATIC_MEMBER_FUNCTION_P (ref)
154 ? clk_none : clk_ordinary);
160 /* If one operand is not an lvalue at all, then this expression is
162 if (!op1_lvalue_kind || !op2_lvalue_kind)
165 /* Otherwise, it's an lvalue, and it has all the odd properties
166 contributed by either operand. */
167 op1_lvalue_kind = op1_lvalue_kind | op2_lvalue_kind;
168 /* It's not an ordinary lvalue if it involves either a bit-field or
170 if ((op1_lvalue_kind & ~clk_ordinary) != clk_none)
171 op1_lvalue_kind &= ~clk_ordinary;
172 return op1_lvalue_kind;
175 /* If REF is an lvalue, returns the kind of lvalue that REF is.
176 Otherwise, returns clk_none. Lvalues can be assigned, unless they
177 have TREE_READONLY, or unless they are FUNCTION_DECLs. Lvalues can
178 have their address taken, unless they have DECL_REGISTER. */
184 return lvalue_p_1 (ref, /*treat_class_rvalues_as_lvalues=*/0);
187 /* This differs from real_lvalue_p in that class rvalues are
188 considered lvalues. */
195 (lvalue_p_1 (ref, /*treat_class_rvalues_as_lvalues=*/1) != clk_none);
198 /* Return nonzero if REF is an lvalue valid for this language;
199 otherwise, print an error message and return zero. */
202 lvalue_or_else (ref, string)
206 int win = lvalue_p (ref);
208 error ("non-lvalue in %s", string);
212 /* INIT is a CALL_EXPR which needs info about its target.
213 TYPE is the type that this initialization should appear to have.
215 Build an encapsulation of the initialization to perform
216 and return it so that it can be processed by language-independent
217 and language-specific expression expanders. */
220 build_cplus_new (type, init)
227 /* Make sure that we're not trying to create an instance of an
229 abstract_virtuals_error (NULL_TREE, type);
231 if (TREE_CODE (init) != CALL_EXPR && TREE_CODE (init) != AGGR_INIT_EXPR)
232 return convert (type, init);
234 slot = build (VAR_DECL, type);
235 DECL_ARTIFICIAL (slot) = 1;
236 layout_decl (slot, 0);
237 rval = build (AGGR_INIT_EXPR, type,
238 TREE_OPERAND (init, 0), TREE_OPERAND (init, 1), slot);
239 TREE_SIDE_EFFECTS (rval) = 1;
240 rval = build (TARGET_EXPR, type, slot, rval, NULL_TREE, NULL_TREE);
241 TREE_SIDE_EFFECTS (rval) = 1;
246 /* Encapsulate the expression INIT in a TARGET_EXPR. */
249 get_target_expr (init)
255 slot = build (VAR_DECL, TREE_TYPE (init));
256 DECL_ARTIFICIAL (slot) = 1;
257 layout_decl (slot, 0);
258 rval = build (TARGET_EXPR, TREE_TYPE (init), slot, init,
259 NULL_TREE, NULL_TREE);
260 TREE_SIDE_EFFECTS (rval) = 1;
265 /* Recursively search EXP for CALL_EXPRs that need cleanups and replace
266 these CALL_EXPRs with tree nodes that will perform the cleanups. */
269 break_out_cleanups (exp)
274 if (TREE_CODE (tmp) == CALL_EXPR
275 && TYPE_NEEDS_DESTRUCTOR (TREE_TYPE (tmp)))
276 return build_cplus_new (TREE_TYPE (tmp), tmp);
278 while (TREE_CODE (tmp) == NOP_EXPR
279 || TREE_CODE (tmp) == CONVERT_EXPR
280 || TREE_CODE (tmp) == NON_LVALUE_EXPR)
282 if (TREE_CODE (TREE_OPERAND (tmp, 0)) == CALL_EXPR
283 && TYPE_NEEDS_DESTRUCTOR (TREE_TYPE (TREE_OPERAND (tmp, 0))))
285 TREE_OPERAND (tmp, 0)
286 = build_cplus_new (TREE_TYPE (TREE_OPERAND (tmp, 0)),
287 TREE_OPERAND (tmp, 0));
291 tmp = TREE_OPERAND (tmp, 0);
296 /* Recursively perform a preorder search EXP for CALL_EXPRs, making
297 copies where they are found. Returns a deep copy all nodes transitively
298 containing CALL_EXPRs. */
301 break_out_calls (exp)
304 register tree t1, t2 = NULL_TREE;
305 register enum tree_code code;
306 register int changed = 0;
309 if (exp == NULL_TREE)
312 code = TREE_CODE (exp);
314 if (code == CALL_EXPR)
315 return copy_node (exp);
317 /* Don't try and defeat a save_expr, as it should only be done once. */
318 if (code == SAVE_EXPR)
321 switch (TREE_CODE_CLASS (code))
326 case 'c': /* a constant */
327 case 't': /* a type node */
328 case 'x': /* something random, like an identifier or an ERROR_MARK. */
331 case 'd': /* A decl node */
332 #if 0 /* This is bogus. jason 9/21/94 */
334 t1 = break_out_calls (DECL_INITIAL (exp));
335 if (t1 != DECL_INITIAL (exp))
337 exp = copy_node (exp);
338 DECL_INITIAL (exp) = t1;
343 case 'b': /* A block node */
345 /* Don't know how to handle these correctly yet. Must do a
346 break_out_calls on all DECL_INITIAL values for local variables,
347 and also break_out_calls on all sub-blocks and sub-statements. */
352 case 'e': /* an expression */
353 case 'r': /* a reference */
354 case 's': /* an expression with side effects */
355 for (i = tree_code_length[(int) code] - 1; i >= 0; i--)
357 t1 = break_out_calls (TREE_OPERAND (exp, i));
358 if (t1 != TREE_OPERAND (exp, i))
360 exp = copy_node (exp);
361 TREE_OPERAND (exp, i) = t1;
366 case '<': /* a comparison expression */
367 case '2': /* a binary arithmetic expression */
368 t2 = break_out_calls (TREE_OPERAND (exp, 1));
369 if (t2 != TREE_OPERAND (exp, 1))
371 case '1': /* a unary arithmetic expression */
372 t1 = break_out_calls (TREE_OPERAND (exp, 0));
373 if (t1 != TREE_OPERAND (exp, 0))
377 if (tree_code_length[(int) code] == 1)
378 return build1 (code, TREE_TYPE (exp), t1);
380 return build (code, TREE_TYPE (exp), t1, t2);
387 extern struct obstack *current_obstack;
388 extern struct obstack permanent_obstack, class_obstack;
389 extern struct obstack *saveable_obstack;
390 extern struct obstack *expression_obstack;
392 /* Here is how primitive or already-canonicalized types' hash
393 codes are made. MUST BE CONSISTENT WITH tree.c !!! */
394 #define TYPE_HASH(TYPE) ((HOST_WIDE_INT) (TYPE) & 0777777)
396 /* Construct, lay out and return the type of methods belonging to class
397 BASETYPE and whose arguments are described by ARGTYPES and whose values
398 are described by RETTYPE. If each type exists already, reuse it. */
401 build_cplus_method_type (basetype, rettype, argtypes)
402 tree basetype, rettype, argtypes;
408 /* Make a node of the sort we want. */
409 t = make_node (METHOD_TYPE);
411 TYPE_METHOD_BASETYPE (t) = TYPE_MAIN_VARIANT (basetype);
412 TREE_TYPE (t) = rettype;
413 if (IS_SIGNATURE (basetype))
414 ptype = build_signature_pointer_type (basetype);
416 ptype = build_pointer_type (basetype);
418 /* The actual arglist for this function includes a "hidden" argument
419 which is "this". Put it into the list of argument types. */
421 argtypes = tree_cons (NULL_TREE, ptype, argtypes);
422 TYPE_ARG_TYPES (t) = argtypes;
423 TREE_SIDE_EFFECTS (argtypes) = 1; /* Mark first argtype as "artificial". */
425 /* If we already have such a type, use the old one and free this one.
426 Note that it also frees up the above cons cell if found. */
427 hashcode = TYPE_HASH (basetype) + TYPE_HASH (rettype) + type_hash_list (argtypes);
428 t = type_hash_canon (hashcode, t);
430 if (TYPE_SIZE (t) == 0)
437 build_cplus_array_type_1 (elt_type, index_type)
443 if (elt_type == error_mark_node || index_type == error_mark_node)
444 return error_mark_node;
446 push_obstacks_nochange ();
448 /* We need a new one. If both ELT_TYPE and INDEX_TYPE are permanent,
449 make this permanent too. */
450 if (TREE_PERMANENT (elt_type)
451 && (index_type == 0 || TREE_PERMANENT (index_type)))
452 end_temporary_allocation ();
454 if (processing_template_decl
455 || uses_template_parms (elt_type)
456 || uses_template_parms (index_type))
458 t = make_node (ARRAY_TYPE);
459 TREE_TYPE (t) = elt_type;
460 TYPE_DOMAIN (t) = index_type;
463 t = build_array_type (elt_type, index_type);
465 /* Push these needs up so that initialization takes place
467 TYPE_NEEDS_CONSTRUCTING (t)
468 = TYPE_NEEDS_CONSTRUCTING (TYPE_MAIN_VARIANT (elt_type));
469 TYPE_NEEDS_DESTRUCTOR (t)
470 = TYPE_NEEDS_DESTRUCTOR (TYPE_MAIN_VARIANT (elt_type));
476 build_cplus_array_type (elt_type, index_type)
481 int type_quals = CP_TYPE_QUALS (elt_type);
483 elt_type = TYPE_MAIN_VARIANT (elt_type);
485 t = build_cplus_array_type_1 (elt_type, index_type);
487 if (type_quals != TYPE_UNQUALIFIED)
488 t = cp_build_qualified_type (t, type_quals);
493 /* Make a variant of TYPE, qualified with the TYPE_QUALS. Handles
494 arrays correctly. In particular, if TYPE is an array of T's, and
495 TYPE_QUALS is non-empty, returns an array of qualified T's. If
496 at attempt is made to qualify a type illegally, and COMPLAIN is
497 non-zero, an error is issued. If COMPLAIN is zero, error_mark_node
501 cp_build_qualified_type_real (type, type_quals, complain)
508 if (type == error_mark_node)
511 /* A restrict-qualified pointer type must be a pointer (or reference)
512 to object or incomplete type. */
513 if ((type_quals & TYPE_QUAL_RESTRICT)
514 && TREE_CODE (type) != TEMPLATE_TYPE_PARM
515 && (!POINTER_TYPE_P (type)
516 || TYPE_PTRMEM_P (type)
517 || TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE))
520 cp_error ("`%T' cannot be `restrict'-qualified", type);
522 return error_mark_node;
524 type_quals &= ~TYPE_QUAL_RESTRICT;
527 if (type_quals != TYPE_UNQUALIFIED
528 && TREE_CODE (type) == FUNCTION_TYPE)
531 cp_error ("`%T' cannot be `const'-, `volatile'-, or `restrict'-qualified", type);
533 return error_mark_node;
534 type_quals = TYPE_UNQUALIFIED;
536 else if (TREE_CODE (type) == ARRAY_TYPE)
538 /* In C++, the qualification really applies to the array element
539 type. Obtain the appropriately qualified element type. */
542 = cp_build_qualified_type_real (TREE_TYPE (type),
546 if (element_type == error_mark_node)
547 return error_mark_node;
549 /* See if we already have an identically qualified type. */
550 for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
551 if (CP_TYPE_QUALS (t) == type_quals)
554 /* If we didn't already have it, create it now. */
557 /* Make a new array type, just like the old one, but with the
558 appropriately qualified element type. */
559 t = build_type_copy (type);
560 TREE_TYPE (t) = element_type;
563 /* Even if we already had this variant, we update
564 TYPE_NEEDS_CONSTRUCTING and TYPE_NEEDS_DESTRUCTOR in case
565 they changed since the variant was originally created.
567 This seems hokey; if there is some way to use a previous
568 variant *without* coming through here,
569 TYPE_NEEDS_CONSTRUCTING will never be updated. */
570 TYPE_NEEDS_CONSTRUCTING (t)
571 = TYPE_NEEDS_CONSTRUCTING (TYPE_MAIN_VARIANT (element_type));
572 TYPE_NEEDS_DESTRUCTOR (t)
573 = TYPE_NEEDS_DESTRUCTOR (TYPE_MAIN_VARIANT (element_type));
576 else if (TYPE_PTRMEMFUNC_P (type))
578 /* For a pointer-to-member type, we can't just return a
579 cv-qualified version of the RECORD_TYPE. If we do, we
580 haven't change the field that contains the actual pointer to
581 a method, and so TYPE_PTRMEMFUNC_FN_TYPE will be wrong. */
584 t = TYPE_PTRMEMFUNC_FN_TYPE (type);
585 t = cp_build_qualified_type_real (t, type_quals, complain);
586 return build_ptrmemfunc_type (t);
589 /* Retrieve (or create) the appropriately qualified variant. */
590 result = build_qualified_type (type, type_quals);
592 /* If this was a pointer-to-method type, and we just made a copy,
593 then we need to clear the cached associated
594 pointer-to-member-function type; it is not valid for the new
597 && TREE_CODE (type) == POINTER_TYPE
598 && TREE_CODE (TREE_TYPE (type)) == METHOD_TYPE)
599 TYPE_SET_PTRMEMFUNC_TYPE (result, NULL_TREE);
604 /* Returns the canonical version of TYPE. In other words, if TYPE is
605 a typedef, returns the underlying type. The cv-qualification of
606 the type returned matches the type input; they will always be
610 canonical_type_variant (t)
613 return cp_build_qualified_type (TYPE_MAIN_VARIANT (t), CP_TYPE_QUALS (t));
616 /* Add OFFSET to all base types of T.
618 OFFSET, which is a type offset, is number of bytes.
620 Note that we don't have to worry about having two paths to the
621 same base type, since this type owns its association list. */
624 propagate_binfo_offsets (binfo, offset)
628 tree binfos = BINFO_BASETYPES (binfo);
629 int i, n_baselinks = binfos ? TREE_VEC_LENGTH (binfos) : 0;
631 for (i = 0; i < n_baselinks; /* note increment is done in the loop. */)
633 tree base_binfo = TREE_VEC_ELT (binfos, i);
635 if (TREE_VIA_VIRTUAL (base_binfo))
640 tree delta = NULL_TREE;
642 for (j = i+1; j < n_baselinks; j++)
643 if (! TREE_VIA_VIRTUAL (TREE_VEC_ELT (binfos, j)))
645 /* The next basetype offset must take into account the space
646 between the classes, not just the size of each class. */
647 delta = size_binop (MINUS_EXPR,
648 BINFO_OFFSET (TREE_VEC_ELT (binfos, j)),
649 BINFO_OFFSET (base_binfo));
654 if (BINFO_OFFSET_ZEROP (base_binfo))
655 BINFO_OFFSET (base_binfo) = offset;
657 BINFO_OFFSET (base_binfo)
658 = size_binop (PLUS_EXPR, BINFO_OFFSET (base_binfo), offset);
660 BINFO_OFFSET (base_binfo) = offset;
663 propagate_binfo_offsets (base_binfo, offset);
665 /* Go to our next class that counts for offset propagation. */
668 offset = size_binop (PLUS_EXPR, offset, delta);
673 /* Makes new binfos for the indirect bases under BINFO, and updates
674 BINFO_OFFSET for them and their bases. */
677 unshare_base_binfos (binfo)
680 tree binfos = BINFO_BASETYPES (binfo);
684 if (binfos == NULL_TREE)
687 /* Now unshare the structure beneath BINFO. */
688 for (j = TREE_VEC_LENGTH (binfos)-1;
691 tree base_binfo = TREE_VEC_ELT (binfos, j);
692 new_binfo = TREE_VEC_ELT (binfos, j)
693 = make_binfo (BINFO_OFFSET (base_binfo),
695 BINFO_VTABLE (base_binfo),
696 BINFO_VIRTUALS (base_binfo));
697 TREE_VIA_PUBLIC (new_binfo) = TREE_VIA_PUBLIC (base_binfo);
698 TREE_VIA_PROTECTED (new_binfo) = TREE_VIA_PROTECTED (base_binfo);
699 TREE_VIA_VIRTUAL (new_binfo) = TREE_VIA_VIRTUAL (base_binfo);
700 BINFO_INHERITANCE_CHAIN (new_binfo) = binfo;
701 unshare_base_binfos (new_binfo);
705 /* Finish the work of layout_record, now taking virtual bases into account.
706 Also compute the actual offsets that our base classes will have.
707 This must be performed after the fields are laid out, since virtual
708 baseclasses must lay down at the end of the record.
710 Returns the maximum number of virtual functions any of the
711 baseclasses provide. */
714 layout_basetypes (rec, max)
718 tree binfos = TYPE_BINFO_BASETYPES (rec);
719 int i, n_baseclasses = binfos ? TREE_VEC_LENGTH (binfos) : 0;
723 unsigned int record_align = MAX (BITS_PER_UNIT, TYPE_ALIGN (rec));
724 unsigned int desired_align;
726 /* Record size so far is CONST_SIZE bits, where CONST_SIZE is an integer. */
727 register unsigned int const_size = 0;
728 unsigned int nonvirtual_const_size;
730 #ifdef STRUCTURE_SIZE_BOUNDARY
731 /* Packed structures don't need to have minimum size. */
732 if (! TYPE_PACKED (rec))
733 record_align = MAX (record_align, STRUCTURE_SIZE_BOUNDARY);
736 /* Get all the virtual base types that this type uses. The
737 TREE_VALUE slot holds the virtual baseclass type. Note that
738 get_vbase_types makes copies of the virtual base BINFOs, so that
739 the vbase_types are unshared. */
740 vbase_types = CLASSTYPE_VBASECLASSES (rec);
742 my_friendly_assert (TREE_CODE (TYPE_SIZE (rec)) == INTEGER_CST, 19970302);
743 const_size = TREE_INT_CST_LOW (TYPE_SIZE (rec));
745 nonvirtual_const_size = const_size;
749 tree basetype = BINFO_TYPE (vbase_types);
752 desired_align = TYPE_ALIGN (basetype);
753 record_align = MAX (record_align, desired_align);
756 offset = integer_zero_node;
759 /* Give each virtual base type the alignment it wants. */
760 const_size = CEIL (const_size, desired_align) * desired_align;
761 offset = size_int (CEIL (const_size, BITS_PER_UNIT));
764 if (CLASSTYPE_VSIZE (basetype) > max)
765 max = CLASSTYPE_VSIZE (basetype);
766 BINFO_OFFSET (vbase_types) = offset;
768 /* Every virtual baseclass takes a least a UNIT, so that we can
769 take it's address and get something different for each base. */
770 const_size += MAX (BITS_PER_UNIT,
771 TREE_INT_CST_LOW (CLASSTYPE_SIZE (basetype)));
773 vbase_types = TREE_CHAIN (vbase_types);
778 /* Because a virtual base might take a single byte above,
779 we have to re-adjust the total size to make sure it is
780 a multiple of the alignment. */
781 /* Give the whole object the alignment it wants. */
782 const_size = CEIL (const_size, record_align) * record_align;
785 /* Set the alignment in the complete type. We don't set CLASSTYPE_ALIGN
786 here, as that is for this class, without any virtual base classes. */
787 TYPE_ALIGN (rec) = record_align;
788 if (const_size != nonvirtual_const_size)
790 TYPE_SIZE (rec) = size_int (const_size);
791 TYPE_SIZE_UNIT (rec) = size_binop (FLOOR_DIV_EXPR, TYPE_SIZE (rec),
792 size_int (BITS_PER_UNIT));
795 /* Now propagate offset information throughout the lattice. */
796 for (i = 0; i < n_baseclasses; i++)
798 register tree base_binfo = TREE_VEC_ELT (binfos, i);
799 register tree basetype = BINFO_TYPE (base_binfo);
800 tree field = TYPE_FIELDS (rec);
802 if (TREE_VIA_VIRTUAL (base_binfo))
805 my_friendly_assert (TREE_TYPE (field) == basetype, 23897);
807 if (get_base_distance (basetype, rec, 0, (tree*)0) == -2)
808 cp_warning ("direct base `%T' inaccessible in `%T' due to ambiguity",
811 BINFO_OFFSET (base_binfo)
812 = size_int (CEIL (TREE_INT_CST_LOW (DECL_FIELD_BITPOS (field)),
814 propagate_binfo_offsets (base_binfo, BINFO_OFFSET (base_binfo));
815 TYPE_FIELDS (rec) = TREE_CHAIN (field);
818 for (vbase_types = CLASSTYPE_VBASECLASSES (rec); vbase_types;
819 vbase_types = TREE_CHAIN (vbase_types))
821 BINFO_INHERITANCE_CHAIN (vbase_types) = TYPE_BINFO (rec);
822 unshare_base_binfos (vbase_types);
823 propagate_binfo_offsets (vbase_types, BINFO_OFFSET (vbase_types));
827 tree basetype = BINFO_TYPE (vbase_types);
828 if (get_base_distance (basetype, rec, 0, (tree*)0) == -2)
829 cp_warning ("virtual base `%T' inaccessible in `%T' due to ambiguity",
837 /* If the empty base field in DECL overlaps with a base of the same type in
838 NEWDECL, which is either another base field or the first data field of
839 the class, pad the base just before NEWDECL and return 1. Otherwise,
843 avoid_overlap (decl, newdecl)
848 if (newdecl == NULL_TREE
849 || ! types_overlap_p (TREE_TYPE (decl), TREE_TYPE (newdecl)))
852 for (field = decl; TREE_CHAIN (field) && TREE_CHAIN (field) != newdecl;
853 field = TREE_CHAIN (field))
856 DECL_SIZE (field) = integer_one_node;
861 /* Returns a list of fields to stand in for the base class subobjects
862 of REC. These fields are later removed by layout_basetypes. */
865 build_base_fields (rec)
868 /* Chain to hold all the new FIELD_DECLs which stand in for base class
870 tree base_decls = NULL_TREE;
871 tree binfos = TYPE_BINFO_BASETYPES (rec);
872 int n_baseclasses = binfos ? TREE_VEC_LENGTH (binfos) : 0;
874 int i, saw_empty = 0;
875 unsigned int base_align = 0;
877 for (i = 0; i < n_baseclasses; ++i)
879 register tree base_binfo = TREE_VEC_ELT (binfos, i);
880 register tree basetype = BINFO_TYPE (base_binfo);
882 if (TYPE_SIZE (basetype) == 0)
883 /* This error is now reported in xref_tag, thus giving better
884 location information. */
887 if (TREE_VIA_VIRTUAL (base_binfo))
890 decl = build_lang_field_decl (FIELD_DECL, NULL_TREE, basetype);
891 DECL_ARTIFICIAL (decl) = 1;
892 DECL_FIELD_CONTEXT (decl) = DECL_CLASS_CONTEXT (decl) = rec;
893 DECL_SIZE (decl) = CLASSTYPE_SIZE (basetype);
894 DECL_ALIGN (decl) = CLASSTYPE_ALIGN (basetype);
895 TREE_CHAIN (decl) = base_decls;
900 /* Brain damage for backwards compatibility. For no good reason,
901 the old layout_basetypes made every base at least as large as
902 the alignment for the bases up to that point, gratuitously
903 wasting space. So we do the same thing here. */
904 base_align = MAX (base_align, DECL_ALIGN (decl));
906 = size_int (MAX (TREE_INT_CST_LOW (DECL_SIZE (decl)),
909 else if (DECL_SIZE (decl) == integer_zero_node)
913 /* Reverse the list of fields so we allocate the bases in the proper
915 base_decls = nreverse (base_decls);
917 /* In the presence of empty base classes, we run the risk of allocating
918 two objects of the same class on top of one another. Avoid that. */
919 if (flag_new_abi && saw_empty)
920 for (decl = base_decls; decl; decl = TREE_CHAIN (decl))
922 if (DECL_SIZE (decl) == integer_zero_node)
924 /* First step through the following bases until we find
925 an overlap or a non-empty base. */
926 for (nextdecl = TREE_CHAIN (decl); nextdecl;
927 nextdecl = TREE_CHAIN (nextdecl))
929 if (avoid_overlap (decl, nextdecl)
930 || DECL_SIZE (nextdecl) != integer_zero_node)
934 /* If we're still looking, also check against the first
936 for (nextdecl = TYPE_FIELDS (rec);
937 nextdecl && TREE_CODE (nextdecl) != FIELD_DECL;
938 nextdecl = TREE_CHAIN (nextdecl))
940 avoid_overlap (decl, nextdecl);
948 /* Returns list of virtual base class pointers in a FIELD_DECL chain. */
951 build_vbase_pointer_fields (rec)
954 /* Chain to hold all the new FIELD_DECLs which point at virtual
956 tree vbase_decls = NULL_TREE;
957 tree binfos = TYPE_BINFO_BASETYPES (rec);
958 int n_baseclasses = binfos ? TREE_VEC_LENGTH (binfos) : 0;
962 /* Handle basetypes almost like fields, but record their
963 offsets differently. */
965 for (i = 0; i < n_baseclasses; i++)
967 register tree base_binfo = TREE_VEC_ELT (binfos, i);
968 register tree basetype = BINFO_TYPE (base_binfo);
970 if (TYPE_SIZE (basetype) == 0)
971 /* This error is now reported in xref_tag, thus giving better
972 location information. */
975 /* All basetypes are recorded in the association list of the
978 if (TREE_VIA_VIRTUAL (base_binfo))
983 /* The offset for a virtual base class is only used in computing
984 virtual function tables and for initializing virtual base
985 pointers. It is built once `get_vbase_types' is called. */
987 /* If this basetype can come from another vbase pointer
988 without an additional indirection, we will share
989 that pointer. If an indirection is involved, we
990 make our own pointer. */
991 for (j = 0; j < n_baseclasses; j++)
993 tree other_base_binfo = TREE_VEC_ELT (binfos, j);
994 if (! TREE_VIA_VIRTUAL (other_base_binfo)
995 && binfo_member (basetype,
996 CLASSTYPE_VBASECLASSES (BINFO_TYPE
1001 FORMAT_VBASE_NAME (name, basetype);
1002 decl = build_lang_field_decl (FIELD_DECL, get_identifier (name),
1003 build_pointer_type (basetype));
1004 /* If you change any of the below, take a look at all the
1005 other VFIELD_BASEs and VTABLE_BASEs in the code, and change
1007 DECL_ASSEMBLER_NAME (decl) = get_identifier (VTABLE_BASE);
1008 DECL_VIRTUAL_P (decl) = 1;
1009 DECL_ARTIFICIAL (decl) = 1;
1010 DECL_FIELD_CONTEXT (decl) = rec;
1011 DECL_CLASS_CONTEXT (decl) = rec;
1012 DECL_FCONTEXT (decl) = basetype;
1013 DECL_SAVED_INSNS (decl) = NULL_RTX;
1014 DECL_FIELD_SIZE (decl) = 0;
1015 DECL_ALIGN (decl) = TYPE_ALIGN (ptr_type_node);
1016 TREE_CHAIN (decl) = vbase_decls;
1017 BINFO_VPTR_FIELD (base_binfo) = decl;
1021 /* The space this decl occupies has already been accounted for. */
1029 /* Hashing of lists so that we don't make duplicates.
1030 The entry point is `list_hash_canon'. */
1032 /* Each hash table slot is a bucket containing a chain
1033 of these structures. */
1037 struct list_hash *next; /* Next structure in the bucket. */
1038 int hashcode; /* Hash code of this list. */
1039 tree list; /* The list recorded here. */
1042 /* Now here is the hash table. When recording a list, it is added
1043 to the slot whose index is the hash code mod the table size.
1044 Note that the hash table is used for several kinds of lists.
1045 While all these live in the same table, they are completely independent,
1046 and the hash code is computed differently for each of these. */
1048 #define TYPE_HASH_SIZE 59
1049 static struct list_hash *list_hash_table[TYPE_HASH_SIZE];
1051 /* Compute a hash code for a list (chain of TREE_LIST nodes
1052 with goodies in the TREE_PURPOSE, TREE_VALUE, and bits of the
1053 TREE_COMMON slots), by adding the hash codes of the individual entries. */
1056 list_hash (purpose, value, chain)
1057 tree purpose, value, chain;
1059 register int hashcode = 0;
1062 hashcode += TYPE_HASH (chain);
1065 hashcode += TYPE_HASH (value);
1069 hashcode += TYPE_HASH (purpose);
1075 /* Look in the type hash table for a type isomorphic to TYPE.
1076 If one is found, return it. Otherwise return 0. */
1079 list_hash_lookup (hashcode, purpose, value, chain)
1081 tree purpose, value, chain;
1083 register struct list_hash *h;
1085 for (h = list_hash_table[hashcode % TYPE_HASH_SIZE]; h; h = h->next)
1086 if (h->hashcode == hashcode
1087 && TREE_PURPOSE (h->list) == purpose
1088 && TREE_VALUE (h->list) == value
1089 && TREE_CHAIN (h->list) == chain)
1094 /* Add an entry to the list-hash-table
1095 for a list TYPE whose hash code is HASHCODE. */
1098 list_hash_add (hashcode, list)
1102 register struct list_hash *h;
1104 h = (struct list_hash *) obstack_alloc (&class_obstack, sizeof (struct list_hash));
1105 h->hashcode = hashcode;
1107 h->next = list_hash_table[hashcode % TYPE_HASH_SIZE];
1108 list_hash_table[hashcode % TYPE_HASH_SIZE] = h;
1111 /* Given list components PURPOSE, VALUE, AND CHAIN, return the canonical
1112 object for an identical list if one already exists. Otherwise, build a
1113 new one, and record it as the canonical object. */
1115 /* Set to 1 to debug without canonicalization. Never set by program. */
1117 static int debug_no_list_hash = 0;
1120 hash_tree_cons (purpose, value, chain)
1121 tree purpose, value, chain;
1123 struct obstack *ambient_obstack = current_obstack;
1127 if (! debug_no_list_hash)
1129 hashcode = list_hash (purpose, value, chain);
1130 t = list_hash_lookup (hashcode, purpose, value, chain);
1135 current_obstack = &class_obstack;
1137 t = tree_cons (purpose, value, chain);
1139 /* If this is a new list, record it for later reuse. */
1140 if (! debug_no_list_hash)
1141 list_hash_add (hashcode, t);
1143 current_obstack = ambient_obstack;
1147 /* Constructor for hashed lists. */
1150 hash_tree_chain (value, chain)
1153 return hash_tree_cons (NULL_TREE, value, chain);
1156 /* Similar, but used for concatenating two lists. */
1159 hash_chainon (list1, list2)
1166 if (TREE_CHAIN (list1) == NULL_TREE)
1167 return hash_tree_chain (TREE_VALUE (list1), list2);
1168 return hash_tree_chain (TREE_VALUE (list1),
1169 hash_chainon (TREE_CHAIN (list1), list2));
1172 /* Build an association between TYPE and some parameters:
1174 OFFSET is the offset added to `this' to convert it to a pointer
1177 BINFO is the base binfo to use, if we are deriving from one. This
1178 is necessary, as we want specialized parent binfos from base
1179 classes, so that the VTABLE_NAMEs of bases are for the most derived
1180 type, instead of the simple type.
1182 VTABLE is the virtual function table with which to initialize
1183 sub-objects of type TYPE.
1185 VIRTUALS are the virtual functions sitting in VTABLE. */
1188 make_binfo (offset, binfo, vtable, virtuals)
1190 tree vtable, virtuals;
1192 tree new_binfo = make_tree_vec (7);
1195 if (TREE_CODE (binfo) == TREE_VEC)
1196 type = BINFO_TYPE (binfo);
1200 binfo = CLASS_TYPE_P (type) ? TYPE_BINFO (binfo) : NULL_TREE;
1203 TREE_TYPE (new_binfo) = TYPE_MAIN_VARIANT (type);
1204 BINFO_OFFSET (new_binfo) = offset;
1205 BINFO_VTABLE (new_binfo) = vtable;
1206 BINFO_VIRTUALS (new_binfo) = virtuals;
1207 BINFO_VPTR_FIELD (new_binfo) = NULL_TREE;
1209 if (binfo && BINFO_BASETYPES (binfo) != NULL_TREE)
1210 BINFO_BASETYPES (new_binfo) = copy_node (BINFO_BASETYPES (binfo));
1214 /* Return the binfo value for ELEM in TYPE. */
1217 binfo_value (elem, type)
1221 if (get_base_distance (elem, type, 0, (tree *)0) == -2)
1222 compiler_error ("base class `%s' ambiguous in binfo_value",
1223 TYPE_NAME_STRING (elem));
1225 return TYPE_BINFO (type);
1226 if (TREE_CODE (elem) == RECORD_TYPE && TYPE_BINFO (elem) == type)
1228 return get_binfo (elem, type, 0);
1231 /* Return a reversed copy of the BINFO-chain given by PATH. (If the
1232 BINFO_INHERITANCE_CHAIN points from base classes to derived
1233 classes, it will instead point from derived classes to base
1234 classes.) Returns the first node in the reversed chain. */
1240 register tree prev = NULL_TREE, cur;
1241 push_expression_obstack ();
1242 for (cur = path; cur; cur = BINFO_INHERITANCE_CHAIN (cur))
1244 tree r = copy_node (cur);
1245 BINFO_INHERITANCE_CHAIN (r) = prev;
1256 unsigned HOST_WIDE_INT n;
1259 fprintf (stderr, "type \"%s\"; offset = %ld\n",
1260 TYPE_NAME_STRING (BINFO_TYPE (elem)),
1261 (long) TREE_INT_CST_LOW (BINFO_OFFSET (elem)));
1262 fprintf (stderr, "vtable type:\n");
1263 debug_tree (BINFO_TYPE (elem));
1264 if (BINFO_VTABLE (elem))
1265 fprintf (stderr, "vtable decl \"%s\"\n", IDENTIFIER_POINTER (DECL_NAME (BINFO_VTABLE (elem))));
1267 fprintf (stderr, "no vtable decl yet\n");
1268 fprintf (stderr, "virtuals:\n");
1269 virtuals = BINFO_VIRTUALS (elem);
1271 n = skip_rtti_stuff (&virtuals, BINFO_TYPE (elem));
1275 tree fndecl = TREE_VALUE (virtuals);
1276 fprintf (stderr, "%s [%ld =? %ld]\n",
1277 IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (fndecl)),
1278 (long) n, (long) TREE_INT_CST_LOW (DECL_VINDEX (fndecl)));
1280 virtuals = TREE_CHAIN (virtuals);
1284 /* Initialize an CPLUS_BINDING node that does not live on an obstack. */
1288 struct tree_binding* node;
1290 static struct tree_binding* source;
1293 extern struct obstack permanent_obstack;
1294 push_obstacks (&permanent_obstack, &permanent_obstack);
1295 source = (struct tree_binding*)make_node (CPLUS_BINDING);
1299 TREE_PERMANENT ((tree)node) = 0;
1308 if (TREE_CODE (t) == FUNCTION_DECL)
1310 else if (TREE_CODE (t) == OVERLOAD)
1312 for (i=0; t; t = OVL_CHAIN (t))
1317 my_friendly_abort (359);
1322 is_overloaded_fn (x)
1325 /* A baselink is also considered an overloaded function. */
1326 if (TREE_CODE (x) == OFFSET_REF)
1327 x = TREE_OPERAND (x, 1);
1330 return (TREE_CODE (x) == FUNCTION_DECL
1331 || TREE_CODE (x) == TEMPLATE_ID_EXPR
1332 || DECL_FUNCTION_TEMPLATE_P (x)
1333 || TREE_CODE (x) == OVERLOAD);
1337 really_overloaded_fn (x)
1340 /* A baselink is also considered an overloaded function. */
1341 if (TREE_CODE (x) == OFFSET_REF)
1342 x = TREE_OPERAND (x, 1);
1345 return (TREE_CODE (x) == OVERLOAD
1346 && (TREE_CHAIN (x) != NULL_TREE
1347 || DECL_FUNCTION_TEMPLATE_P (OVL_FUNCTION (x))));
1354 my_friendly_assert (is_overloaded_fn (from), 9);
1355 /* A baselink is also considered an overloaded function. */
1356 if (BASELINK_P (from))
1357 from = TREE_VALUE (from);
1358 return OVL_CURRENT (from);
1361 /* Returns nonzero if T is a ->* or .* expression that refers to a
1368 return (TREE_CODE (t) == OFFSET_REF
1369 && TYPE_PTRMEMFUNC_P (TREE_TYPE (TREE_OPERAND (t, 1))));
1372 /* Return a new OVL node, concatenating it with the old one. */
1375 ovl_cons (decl, chain)
1379 tree result = make_node (OVERLOAD);
1380 TREE_TYPE (result) = unknown_type_node;
1381 OVL_FUNCTION (result) = decl;
1382 TREE_CHAIN (result) = chain;
1387 /* Same as ovl_cons, but on the scratch_obstack. */
1390 scratch_ovl_cons (value, chain)
1394 register struct obstack *ambient_obstack = current_obstack;
1395 extern struct obstack *expression_obstack;
1396 current_obstack = expression_obstack;
1397 node = ovl_cons (value, chain);
1398 current_obstack = ambient_obstack;
1402 /* Build a new overloaded function. If this is the first one,
1403 just return it; otherwise, ovl_cons the _DECLs */
1406 build_overload (decl, chain)
1410 if (! chain && TREE_CODE (decl) != TEMPLATE_DECL)
1412 if (chain && TREE_CODE (chain) != OVERLOAD)
1413 chain = ovl_cons (chain, NULL_TREE);
1414 return ovl_cons (decl, chain);
1417 /* Returns true iff functions are equivalent. Equivalent functions are
1418 not identical only if one is a function-local extern function.
1419 This assumes that function-locals don't have TREE_PERMANENT. */
1422 equal_functions (fn1, fn2)
1426 if (!TREE_PERMANENT (fn1) || !TREE_PERMANENT (fn2))
1427 return decls_match (fn1, fn2);
1431 /* True if fn is in ovl. */
1434 ovl_member (fn, ovl)
1438 if (ovl == NULL_TREE)
1440 if (TREE_CODE (ovl) != OVERLOAD)
1441 return equal_functions (ovl, fn);
1442 for (; ovl; ovl = OVL_CHAIN (ovl))
1443 if (equal_functions (OVL_FUNCTION (ovl), fn))
1449 is_aggr_type_2 (t1, t2)
1452 if (TREE_CODE (t1) != TREE_CODE (t2))
1454 return IS_AGGR_TYPE (t1) && IS_AGGR_TYPE (t2);
1457 #define PRINT_RING_SIZE 4
1460 lang_printable_name (decl, v)
1464 static tree decl_ring[PRINT_RING_SIZE];
1465 static char *print_ring[PRINT_RING_SIZE];
1466 static int ring_counter;
1469 /* Only cache functions. */
1471 || TREE_CODE (decl) != FUNCTION_DECL
1472 || DECL_LANG_SPECIFIC (decl) == 0)
1473 return lang_decl_name (decl, v);
1475 /* See if this print name is lying around. */
1476 for (i = 0; i < PRINT_RING_SIZE; i++)
1477 if (decl_ring[i] == decl)
1478 /* yes, so return it. */
1479 return print_ring[i];
1481 if (++ring_counter == PRINT_RING_SIZE)
1484 if (current_function_decl != NULL_TREE)
1486 if (decl_ring[ring_counter] == current_function_decl)
1488 if (ring_counter == PRINT_RING_SIZE)
1490 if (decl_ring[ring_counter] == current_function_decl)
1491 my_friendly_abort (106);
1494 if (print_ring[ring_counter])
1495 free (print_ring[ring_counter]);
1497 print_ring[ring_counter] = xstrdup (lang_decl_name (decl, v));
1498 decl_ring[ring_counter] = decl;
1499 return print_ring[ring_counter];
1502 /* Build the FUNCTION_TYPE or METHOD_TYPE which may throw exceptions
1503 listed in RAISES. */
1506 build_exception_variant (type, raises)
1510 tree v = TYPE_MAIN_VARIANT (type);
1511 int type_quals = TYPE_QUALS (type);
1513 for (; v; v = TYPE_NEXT_VARIANT (v))
1514 if (TYPE_QUALS (v) == type_quals
1515 && comp_except_specs (raises, TYPE_RAISES_EXCEPTIONS (v), 1))
1518 /* Need to build a new variant. */
1519 v = build_type_copy (type);
1521 if (raises && ! TREE_PERMANENT (raises))
1522 raises = copy_to_permanent (raises);
1524 TYPE_RAISES_EXCEPTIONS (v) = raises;
1528 /* Given a TEMPLATE_TEMPLATE_PARM node T, create a new one together with its
1529 lang_specific field and its corresponding TEMPLATE_DECL node */
1532 copy_template_template_parm (t)
1535 tree template = TYPE_NAME (t);
1538 /* Make sure these end up on the permanent_obstack. */
1539 push_obstacks_nochange ();
1540 end_temporary_allocation ();
1542 t2 = make_lang_type (TEMPLATE_TEMPLATE_PARM);
1543 template = copy_node (template);
1544 copy_lang_decl (template);
1548 TREE_TYPE (template) = t2;
1549 TYPE_NAME (t2) = template;
1550 TYPE_STUB_DECL (t2) = template;
1552 /* No need to copy these */
1553 TYPE_FIELDS (t2) = TYPE_FIELDS (t);
1554 TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (t2)
1555 = TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (t);
1559 /* Walk through the tree structure T, applying func. If func ever returns
1560 non-null, return that value. */
1563 search_tree (t, func)
1565 tree (*func) PROTO((tree));
1567 #define TRY(ARG) if (tmp=search_tree (ARG, func), tmp != NULL_TREE) return tmp
1570 enum tree_code code;
1579 /* Handle some common cases up front. */
1580 code = TREE_CODE (t);
1581 if (TREE_CODE_CLASS (code) == '1')
1583 TRY (TREE_OPERAND (t, 0));
1586 else if (TREE_CODE_CLASS (code) == '2' || TREE_CODE_CLASS (code) == '<')
1588 TRY (TREE_OPERAND (t, 0));
1589 TRY (TREE_OPERAND (t, 1));
1598 case IDENTIFIER_NODE:
1605 case NAMESPACE_DECL:
1609 TRY (TREE_TYPE (t));
1613 TRY (TREE_TYPE (t));
1614 TRY (TREE_CHAIN (t));
1618 TRY (TREE_PURPOSE (t));
1619 TRY (TREE_VALUE (t));
1620 TRY (TREE_CHAIN (t));
1624 TRY (OVL_FUNCTION (t));
1625 TRY (OVL_CHAIN (t));
1630 int len = TREE_VEC_LENGTH (t);
1634 TRY (TREE_VEC_ELT (t, len));
1645 TRY (TREE_TYPE (t));
1650 case AGGR_INIT_EXPR:
1652 TRY (TREE_OPERAND (t, 0));
1653 TRY (TREE_OPERAND (t, 1));
1654 TRY (TREE_OPERAND (t, 2));
1657 case TRUTH_ANDIF_EXPR:
1658 case TRUTH_ORIF_EXPR:
1659 case PREDECREMENT_EXPR:
1660 case PREINCREMENT_EXPR:
1661 case POSTDECREMENT_EXPR:
1662 case POSTINCREMENT_EXPR:
1665 case TRY_CATCH_EXPR:
1666 case WITH_CLEANUP_EXPR:
1668 TRY (TREE_OPERAND (t, 0));
1669 TRY (TREE_OPERAND (t, 1));
1675 case TRUTH_NOT_EXPR:
1677 case CLEANUP_POINT_EXPR:
1679 TRY (TREE_OPERAND (t, 0));
1689 TRY (TREE_REALPART (t));
1690 TRY (TREE_IMAGPART (t));
1694 TRY (CONSTRUCTOR_ELTS (t));
1697 case TEMPLATE_TEMPLATE_PARM:
1698 case TEMPLATE_PARM_INDEX:
1699 case TEMPLATE_TYPE_PARM:
1716 case REFERENCE_TYPE:
1717 TRY (TREE_TYPE (t));
1722 TRY (TREE_TYPE (t));
1723 TRY (TYPE_ARG_TYPES (t));
1727 TRY (TREE_TYPE (t));
1728 TRY (TYPE_DOMAIN (t));
1732 TRY (TYPE_MAX_VALUE (t));
1736 TRY (TREE_TYPE (t));
1737 TRY (TYPE_OFFSET_BASETYPE (t));
1741 if (TYPE_PTRMEMFUNC_P (t))
1742 TRY (TYPE_PTRMEMFUNC_FN_TYPE (t));
1746 my_friendly_abort (19990803);
1754 /* Passed to search_tree. Checks for the use of types with no linkage. */
1757 no_linkage_helper (t)
1761 && (IS_AGGR_TYPE (t) || TREE_CODE (t) == ENUMERAL_TYPE)
1762 && (decl_function_context (TYPE_MAIN_DECL (t))
1763 || ANON_AGGRNAME_P (TYPE_IDENTIFIER (t))))
1768 /* Check if the type T depends on a type with no linkage and if so, return
1772 no_linkage_check (t)
1775 /* There's no point in checking linkage on template functions; we
1776 can't know their complete types. */
1777 if (processing_template_decl)
1780 t = search_tree (t, no_linkage_helper);
1781 if (t != error_mark_node)
1787 /* Make copies of all the nodes below T. If FUNC is non-NULL, call it
1793 tree (*func) PROTO((tree));
1807 switch (TREE_CODE (t))
1810 return error_mark_node;
1815 /* Rather than aborting, return error_mark_node. This allows us
1816 to report a sensible error message on code like this:
1818 void g() { int i; f<i>(7); }
1822 void g() { const int i = 7; f<i>(7); }
1824 however, we must actually return the constant initializer. */
1825 if (TREE_READONLY_DECL_P (t))
1827 tmp = decl_constant_value (t);
1829 return mapcar (tmp, func);
1831 return error_mark_node;
1835 tree chain = TREE_CHAIN (t);
1837 TREE_CHAIN (t) = mapcar (chain, func);
1838 TREE_TYPE (t) = mapcar (TREE_TYPE (t), func);
1839 DECL_INITIAL (t) = mapcar (DECL_INITIAL (t), func);
1840 DECL_SIZE (t) = mapcar (DECL_SIZE (t), func);
1846 tree chain = TREE_CHAIN (t);
1848 TREE_PURPOSE (t) = mapcar (TREE_PURPOSE (t), func);
1849 TREE_VALUE (t) = mapcar (TREE_VALUE (t), func);
1850 TREE_CHAIN (t) = mapcar (chain, func);
1856 tree chain = OVL_CHAIN (t);
1858 OVL_FUNCTION (t) = mapcar (OVL_FUNCTION (t), func);
1859 OVL_CHAIN (t) = mapcar (chain, func);
1865 int len = TREE_VEC_LENGTH (t);
1869 TREE_VEC_ELT (t, len) = mapcar (TREE_VEC_ELT (t, len), func);
1876 return copy_node (t);
1880 TREE_TYPE (t) = mapcar (TREE_TYPE (t), func);
1881 PTRMEM_CST_MEMBER (t) = mapcar (PTRMEM_CST_MEMBER (t), func);
1886 case AGGR_INIT_EXPR:
1888 TREE_OPERAND (t, 0) = mapcar (TREE_OPERAND (t, 0), func);
1889 TREE_OPERAND (t, 1) = mapcar (TREE_OPERAND (t, 1), func);
1890 TREE_OPERAND (t, 2) = mapcar (TREE_OPERAND (t, 2), func);
1895 TREE_OPERAND (t, 0) = mapcar (TREE_OPERAND (t, 0), func);
1902 case TRUNC_DIV_EXPR:
1903 case TRUNC_MOD_EXPR:
1911 case BIT_ANDTC_EXPR:
1912 case TRUTH_ANDIF_EXPR:
1913 case TRUTH_ORIF_EXPR:
1921 case FLOOR_DIV_EXPR:
1922 case ROUND_DIV_EXPR:
1924 case FLOOR_MOD_EXPR:
1925 case ROUND_MOD_EXPR:
1927 case PREDECREMENT_EXPR:
1928 case PREINCREMENT_EXPR:
1929 case POSTDECREMENT_EXPR:
1930 case POSTINCREMENT_EXPR:
1933 case TRY_CATCH_EXPR:
1934 case WITH_CLEANUP_EXPR:
1936 TREE_OPERAND (t, 0) = mapcar (TREE_OPERAND (t, 0), func);
1937 TREE_OPERAND (t, 1) = mapcar (TREE_OPERAND (t, 1), func);
1942 TREE_TYPE (t) = mapcar (TREE_TYPE (t), func);
1943 TREE_OPERAND (t, 0) = mapcar (TREE_OPERAND (t, 0), func);
1944 TREE_OPERAND (t, 1) = mapcar (TREE_OPERAND (t, 1), func);
1946 /* tree.def says that operand two is RTL, but
1947 make_call_declarator puts trees in there. */
1948 if (TREE_OPERAND (t, 2)
1949 && TREE_CODE (TREE_OPERAND (t, 2)) == TREE_LIST)
1950 TREE_OPERAND (t, 2) = mapcar (TREE_OPERAND (t, 2), func);
1952 TREE_OPERAND (t, 2) = NULL_TREE;
1960 case TRUTH_NOT_EXPR:
1963 case CLEANUP_POINT_EXPR:
1964 case NON_LVALUE_EXPR:
1966 TREE_TYPE (t) = mapcar (TREE_TYPE (t), func);
1967 TREE_OPERAND (t, 0) = mapcar (TREE_OPERAND (t, 0), func);
1971 tmp = build_pointer_type (mapcar (TREE_TYPE (t), func));
1972 return cp_build_qualified_type (tmp, TYPE_QUALS (t));
1973 case REFERENCE_TYPE:
1974 tmp = build_reference_type (mapcar (TREE_TYPE (t), func));
1975 return cp_build_qualified_type (tmp, TYPE_QUALS (t));
1977 tmp = build_function_type (mapcar (TREE_TYPE (t), func),
1978 mapcar (TYPE_ARG_TYPES (t), func));
1979 return cp_build_qualified_type (tmp, TYPE_QUALS (t));
1981 tmp = build_cplus_array_type (mapcar (TREE_TYPE (t), func),
1982 mapcar (TYPE_DOMAIN (t), func));
1983 return cp_build_qualified_type (tmp, CP_TYPE_QUALS (t));
1985 tmp = build_index_type (mapcar (TYPE_MAX_VALUE (t), func));
1986 return cp_build_qualified_type (tmp, TYPE_QUALS (t));
1988 tmp = build_offset_type (mapcar (TYPE_OFFSET_BASETYPE (t), func),
1989 mapcar (TREE_TYPE (t), func));
1990 return cp_build_qualified_type (tmp, TYPE_QUALS (t));
1992 tmp = build_cplus_method_type
1993 (mapcar (TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (t))), func),
1994 mapcar (TREE_TYPE (t), func),
1995 mapcar (TREE_CHAIN (TYPE_ARG_TYPES (t)), func));
1996 return cp_build_qualified_type (tmp, TYPE_QUALS (t));
2000 TREE_REALPART (t) = mapcar (TREE_REALPART (t), func);
2001 TREE_IMAGPART (t) = mapcar (TREE_REALPART (t), func);
2006 CONSTRUCTOR_ELTS (t) = mapcar (CONSTRUCTOR_ELTS (t), func);
2009 case TEMPLATE_TEMPLATE_PARM:
2010 return copy_template_template_parm (t);
2014 TREE_OPERAND (t, 0) = mapcar (TREE_OPERAND (t, 0), func);
2015 TREE_OPERAND (t, 1) = mapcar (TREE_OPERAND (t, 1), func);
2016 TREE_OPERAND (t, 2) = NULL_TREE;
2021 TREE_OPERAND (t, 0) = mapcar (TREE_OPERAND (t, 0), func);
2022 TREE_OPERAND (t, 1) = mapcar (TREE_OPERAND (t, 1), func);
2023 TREE_OPERAND (t, 2) = mapcar (TREE_OPERAND (t, 2), func);
2028 TREE_OPERAND (t, 0) = mapcar (TREE_OPERAND (t, 0), func);
2032 if (TYPE_PTRMEMFUNC_P (t))
2033 return build_ptrmemfunc_type
2034 (mapcar (TYPE_PTRMEMFUNC_FN_TYPE (t), func));
2035 /* else fall through */
2037 /* This list is incomplete, but should suffice for now.
2038 It is very important that `sorry' not call
2039 `report_error_function'. That could cause an infinite loop. */
2041 sorry ("initializer contains unrecognized tree code");
2042 return error_mark_node;
2045 my_friendly_abort (107);
2050 /* Returns T if T is allocated on the permanent obstack, NULL_TREE
2057 return TREE_PERMANENT (t) ? t : NULL_TREE;
2064 if (TREE_PERMANENT (t))
2067 /* Support `void f () { extern int i; A<&i> a; }' */
2068 if ((TREE_CODE (t) == VAR_DECL || TREE_CODE (t) == FUNCTION_DECL)
2073 /* copy_rtx won't make a new SYMBOL_REF, so call make_decl_rtl again. */
2075 make_decl_rtl (t, NULL_PTR, 1);
2082 /* Assuming T is a node built bottom-up, make it all exist on
2083 permanent obstack, if it is not permanent already. */
2086 copy_to_permanent (t)
2089 if (t == NULL_TREE || TREE_PERMANENT (t))
2092 push_obstacks_nochange ();
2093 end_temporary_allocation ();
2095 t = mapcar (t, perm_manip);
2102 #ifdef GATHER_STATISTICS
2103 extern int depth_reached;
2107 print_lang_statistics ()
2109 extern struct obstack decl_obstack;
2110 print_obstack_statistics ("class_obstack", &class_obstack);
2111 print_obstack_statistics ("decl_obstack", &decl_obstack);
2112 print_search_statistics ();
2113 print_class_statistics ();
2114 #ifdef GATHER_STATISTICS
2115 fprintf (stderr, "maximum template instantiation depth reached: %d\n",
2120 /* This is used by the `assert' macro. It is provided in libgcc.a,
2121 which `cc' doesn't know how to link. Note that the C++ front-end
2122 no longer actually uses the `assert' macro (instead, it calls
2123 my_friendly_assert). But all of the back-end files still need this. */
2126 __eprintf (string, expression, line, filename)
2128 const char *expression;
2130 const char *filename;
2132 fprintf (stderr, string, expression, line, filename);
2137 /* Return, as an INTEGER_CST node, the number of elements for TYPE
2138 (which is an ARRAY_TYPE). This counts only elements of the top
2142 array_type_nelts_top (type)
2145 return fold (build (PLUS_EXPR, sizetype,
2146 array_type_nelts (type),
2150 /* Return, as an INTEGER_CST node, the number of elements for TYPE
2151 (which is an ARRAY_TYPE). This one is a recursive count of all
2152 ARRAY_TYPEs that are clumped together. */
2155 array_type_nelts_total (type)
2158 tree sz = array_type_nelts_top (type);
2159 type = TREE_TYPE (type);
2160 while (TREE_CODE (type) == ARRAY_TYPE)
2162 tree n = array_type_nelts_top (type);
2163 sz = fold (build (MULT_EXPR, sizetype, sz, n));
2164 type = TREE_TYPE (type);
2174 if (TREE_CODE (t) != TREE_LIST && ! TREE_SIDE_EFFECTS (t))
2176 else if (TREE_CODE (t) == TARGET_EXPR)
2178 if (TREE_CODE (TREE_OPERAND (t, 1)) == AGGR_INIT_EXPR)
2180 mark_used (TREE_OPERAND (TREE_OPERAND (TREE_OPERAND (t, 1), 0), 0));
2181 return build_cplus_new
2182 (TREE_TYPE (t), break_out_target_exprs (TREE_OPERAND (t, 1)));
2185 TREE_OPERAND (t, 0) = build (VAR_DECL, TREE_TYPE (t));
2186 layout_decl (TREE_OPERAND (t, 0), 0);
2189 else if (TREE_CODE (t) == CALL_EXPR)
2190 mark_used (TREE_OPERAND (TREE_OPERAND (t, 0), 0));
2195 /* Actually, we'll just clean out the target exprs for the moment. */
2198 break_out_target_exprs (t)
2201 return mapcar (t, bot_manip);
2204 /* Obstack used for allocating nodes in template function and variable
2207 /* Similar to `build_nt', except we build
2208 on the permanent_obstack, regardless. */
2211 build_min_nt VPROTO((enum tree_code code, ...))
2214 enum tree_code code;
2216 register struct obstack *ambient_obstack = expression_obstack;
2219 register int length;
2225 code = va_arg (p, enum tree_code);
2228 expression_obstack = &permanent_obstack;
2230 t = make_node (code);
2231 length = tree_code_length[(int) code];
2232 TREE_COMPLEXITY (t) = lineno;
2234 for (i = 0; i < length; i++)
2236 tree x = va_arg (p, tree);
2237 TREE_OPERAND (t, i) = copy_to_permanent (x);
2241 expression_obstack = ambient_obstack;
2245 /* Similar to `build', except we build
2246 on the permanent_obstack, regardless. */
2249 build_min VPROTO((enum tree_code code, tree tt, ...))
2252 enum tree_code code;
2255 register struct obstack *ambient_obstack = expression_obstack;
2258 register int length;
2264 code = va_arg (p, enum tree_code);
2265 tt = va_arg (p, tree);
2268 expression_obstack = &permanent_obstack;
2270 t = make_node (code);
2271 length = tree_code_length[(int) code];
2272 TREE_TYPE (t) = copy_to_permanent (tt);
2273 TREE_COMPLEXITY (t) = lineno;
2275 for (i = 0; i < length; i++)
2277 tree x = va_arg (p, tree);
2278 TREE_OPERAND (t, i) = copy_to_permanent (x);
2282 expression_obstack = ambient_obstack;
2286 /* Same as `tree_cons' but make a permanent object. */
2289 min_tree_cons (purpose, value, chain)
2290 tree purpose, value, chain;
2293 register struct obstack *ambient_obstack = current_obstack;
2294 current_obstack = &permanent_obstack;
2296 node = tree_cons (copy_to_permanent (purpose),
2297 copy_to_permanent (value), chain);
2298 current_obstack = ambient_obstack;
2306 if (TREE_CODE (t) == TYPE_DECL)
2308 if (TREE_CODE_CLASS (TREE_CODE (t)) == 't')
2309 return TYPE_STUB_DECL (t);
2311 my_friendly_abort (42);
2313 /* Stop compiler from complaining control reaches end of non-void function. */
2318 can_free (obstack, t)
2319 struct obstack *obstack;
2324 if (TREE_CODE (t) == TREE_VEC)
2325 size = (TREE_VEC_LENGTH (t)-1) * sizeof (tree) + sizeof (struct tree_vec);
2327 my_friendly_abort (42);
2329 #define ROUND(x) ((x + obstack_alignment_mask (obstack)) \
2330 & ~ obstack_alignment_mask (obstack))
2331 if ((char *)t + ROUND (size) == obstack_next_free (obstack))
2338 /* Return first vector element whose BINFO_TYPE is ELEM.
2339 Return 0 if ELEM is not in VEC. VEC may be NULL_TREE. */
2342 vec_binfo_member (elem, vec)
2348 for (i = 0; i < TREE_VEC_LENGTH (vec); ++i)
2349 if (same_type_p (elem, BINFO_TYPE (TREE_VEC_ELT (vec, i))))
2350 return TREE_VEC_ELT (vec, i);
2355 /* Kludge around the fact that DECL_CONTEXT for virtual functions returns
2356 the wrong thing for decl_function_context. Hopefully the uses in the
2357 backend won't matter, since we don't need a static chain for local class
2361 hack_decl_function_context (decl)
2364 if (TREE_CODE (decl) == FUNCTION_DECL && DECL_FUNCTION_MEMBER_P (decl))
2365 return decl_function_context (TYPE_MAIN_DECL (DECL_CLASS_CONTEXT (decl)));
2366 return decl_function_context (decl);
2369 /* Returns the namespace that contains DECL, whether directly or
2373 decl_namespace_context (decl)
2378 if (TREE_CODE (decl) == NAMESPACE_DECL)
2380 else if (TYPE_P (decl))
2381 decl = CP_DECL_CONTEXT (TYPE_MAIN_DECL (decl));
2383 decl = CP_DECL_CONTEXT (decl);
2387 /* Return truthvalue of whether T1 is the same tree structure as T2.
2388 Return 1 if they are the same.
2389 Return 0 if they are understandably different.
2390 Return -1 if either contains tree structure not understood by
2394 cp_tree_equal (t1, t2)
2397 register enum tree_code code1, code2;
2402 if (t1 == 0 || t2 == 0)
2405 code1 = TREE_CODE (t1);
2406 code2 = TREE_CODE (t2);
2408 if (code1 == NOP_EXPR || code1 == CONVERT_EXPR || code1 == NON_LVALUE_EXPR)
2410 if (code2 == NOP_EXPR || code2 == CONVERT_EXPR || code2 == NON_LVALUE_EXPR)
2411 return cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
2413 return cp_tree_equal (TREE_OPERAND (t1, 0), t2);
2415 else if (code2 == NOP_EXPR || code2 == CONVERT_EXPR
2416 || code2 == NON_LVALUE_EXPR)
2417 return cp_tree_equal (t1, TREE_OPERAND (t2, 0));
2425 return TREE_INT_CST_LOW (t1) == TREE_INT_CST_LOW (t2)
2426 && TREE_INT_CST_HIGH (t1) == TREE_INT_CST_HIGH (t2);
2429 return REAL_VALUES_EQUAL (TREE_REAL_CST (t1), TREE_REAL_CST (t2));
2432 return TREE_STRING_LENGTH (t1) == TREE_STRING_LENGTH (t2)
2433 && !bcmp (TREE_STRING_POINTER (t1), TREE_STRING_POINTER (t2),
2434 TREE_STRING_LENGTH (t1));
2437 /* We need to do this when determining whether or not two
2438 non-type pointer to member function template arguments
2440 if (!(same_type_p (TREE_TYPE (t1), TREE_TYPE (t2))
2441 /* The first operand is RTL. */
2442 && TREE_OPERAND (t1, 0) == TREE_OPERAND (t2, 0)))
2444 return cp_tree_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
2447 cmp = cp_tree_equal (TREE_PURPOSE (t1), TREE_PURPOSE (t2));
2450 cmp = cp_tree_equal (TREE_VALUE (t1), TREE_VALUE (t2));
2453 return cp_tree_equal (TREE_CHAIN (t1), TREE_CHAIN (t2));
2456 return cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
2459 cmp = cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
2462 return simple_cst_list_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
2465 /* Special case: if either target is an unallocated VAR_DECL,
2466 it means that it's going to be unified with whatever the
2467 TARGET_EXPR is really supposed to initialize, so treat it
2468 as being equivalent to anything. */
2469 if ((TREE_CODE (TREE_OPERAND (t1, 0)) == VAR_DECL
2470 && DECL_NAME (TREE_OPERAND (t1, 0)) == NULL_TREE
2471 && DECL_RTL (TREE_OPERAND (t1, 0)) == 0)
2472 || (TREE_CODE (TREE_OPERAND (t2, 0)) == VAR_DECL
2473 && DECL_NAME (TREE_OPERAND (t2, 0)) == NULL_TREE
2474 && DECL_RTL (TREE_OPERAND (t2, 0)) == 0))
2477 cmp = cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
2480 return cp_tree_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
2482 case WITH_CLEANUP_EXPR:
2483 cmp = cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
2486 return cp_tree_equal (TREE_OPERAND (t1, 2), TREE_OPERAND (t1, 2));
2489 if (TREE_OPERAND (t1, 1) == TREE_OPERAND (t2, 1))
2490 return cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
2499 case TEMPLATE_PARM_INDEX:
2500 return TEMPLATE_PARM_IDX (t1) == TEMPLATE_PARM_IDX (t2)
2501 && TEMPLATE_PARM_LEVEL (t1) == TEMPLATE_PARM_LEVEL (t2);
2505 if (TREE_CODE (TREE_OPERAND (t1, 0)) != TREE_CODE (TREE_OPERAND (t2, 0)))
2507 if (TREE_CODE_CLASS (TREE_CODE (TREE_OPERAND (t1, 0))) == 't')
2508 return same_type_p (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
2512 /* Two pointer-to-members are the same if they point to the same
2513 field or function in the same class. */
2514 return (PTRMEM_CST_MEMBER (t1) == PTRMEM_CST_MEMBER (t2)
2515 && same_type_p (PTRMEM_CST_CLASS (t1), PTRMEM_CST_CLASS (t2)));
2521 switch (TREE_CODE_CLASS (code1))
2531 for (i=0; i<tree_code_length[(int) code1]; ++i)
2533 cmp = cp_tree_equal (TREE_OPERAND (t1, i), TREE_OPERAND (t2, i));
2543 /* Similar to make_tree_vec, but build on the momentary_obstack.
2544 Thus, these vectors are really and truly temporary. */
2551 push_expression_obstack ();
2552 node = make_tree_vec (len);
2557 /* Build a wrapper around some pointer PTR so we can use it as a tree. */
2560 build_ptr_wrapper (ptr)
2563 tree t = make_node (WRAPPER);
2564 WRAPPER_PTR (t) = ptr;
2568 /* Same, but on the expression_obstack. */
2571 build_expr_ptr_wrapper (ptr)
2575 push_expression_obstack ();
2576 t = build_ptr_wrapper (ptr);
2581 /* Build a wrapper around some integer I so we can use it as a tree. */
2584 build_int_wrapper (i)
2587 tree t = make_node (WRAPPER);
2588 WRAPPER_INT (t) = i;
2593 build_srcloc (file, line)
2599 /* Make sure that we put these on the permanent obstack; up in
2600 add_pending_template, we pass this return value into perm_tree_cons,
2601 which also puts it on the permanent_obstack. However, this wasn't
2602 explicitly doing the same. */
2603 register struct obstack *ambient_obstack = current_obstack;
2604 current_obstack = &permanent_obstack;
2606 t = make_node (SRCLOC);
2607 SRCLOC_FILE (t) = file;
2608 SRCLOC_LINE (t) = line;
2610 current_obstack = ambient_obstack;
2616 build_srcloc_here ()
2618 return build_srcloc (input_filename, lineno);
2622 push_expression_obstack ()
2624 push_obstacks_nochange ();
2625 current_obstack = expression_obstack;
2628 /* The type of ARG when used as an lvalue. */
2634 tree type = TREE_TYPE (arg);
2635 if (TREE_CODE (arg) == OVERLOAD)
2636 type = unknown_type_node;
2640 /* The type of ARG for printing error messages; denote lvalues with
2647 tree type = TREE_TYPE (arg);
2648 if (TREE_CODE (type) == ARRAY_TYPE)
2650 else if (real_lvalue_p (arg))
2651 type = build_reference_type (lvalue_type (arg));
2652 else if (IS_AGGR_TYPE (type))
2653 type = lvalue_type (arg);
2658 /* Does FUNCTION use a variable-length argument list? */
2661 varargs_function_p (function)
2664 tree parm = TYPE_ARG_TYPES (TREE_TYPE (function));
2665 for (; parm; parm = TREE_CHAIN (parm))
2666 if (TREE_VALUE (parm) == void_type_node)
2671 /* Returns 1 if decl is a member of a class. */
2677 tree ctx = DECL_CONTEXT (decl);
2678 return (ctx && TREE_CODE_CLASS (TREE_CODE (ctx)) == 't');
2681 /* Create a placeholder for member access where we don't actually have an
2682 object that the access is against. */
2685 build_dummy_object (type)
2688 tree decl = build1 (NOP_EXPR, build_pointer_type (type), void_zero_node);
2689 return build_indirect_ref (decl, NULL_PTR);
2692 /* We've gotten a reference to a member of TYPE. Return *this if appropriate,
2693 or a dummy object otherwise. If BINFOP is non-0, it is filled with the
2694 binfo path from current_class_type to TYPE, or 0. */
2697 maybe_dummy_object (type, binfop)
2703 if (current_class_type
2704 && get_base_distance (type, current_class_type, 0, binfop) != -1)
2705 context = current_class_type;
2708 /* Reference from a nested class member function. */
2711 *binfop = TYPE_BINFO (type);
2714 if (current_class_ref && context == current_class_type)
2715 decl = current_class_ref;
2717 decl = build_dummy_object (context);
2722 /* Returns 1 if OB is a placeholder object, or a pointer to one. */
2725 is_dummy_object (ob)
2728 if (TREE_CODE (ob) == INDIRECT_REF)
2729 ob = TREE_OPERAND (ob, 0);
2730 return (TREE_CODE (ob) == NOP_EXPR
2731 && TREE_OPERAND (ob, 0) == void_zero_node);
2734 /* Returns 1 iff type T is a POD type, as defined in [basic.types]. */
2740 while (TREE_CODE (t) == ARRAY_TYPE)
2743 if (INTEGRAL_TYPE_P (t))
2744 return 1; /* integral, character or enumeral type */
2745 if (FLOAT_TYPE_P (t))
2748 return 1; /* pointer to non-member */
2749 if (TYPE_PTRMEM_P (t))
2750 return 1; /* pointer to member object */
2751 if (TYPE_PTRMEMFUNC_P (t))
2752 return 1; /* pointer to member function */
2754 if (! CLASS_TYPE_P (t))
2755 return 0; /* other non-class type (reference or function) */
2756 if (CLASSTYPE_NON_POD_P (t))
2761 /* Return a 1 if ATTR_NAME and ATTR_ARGS denote a valid C++-specific
2762 attribute for either declaration DECL or type TYPE and 0 otherwise.
2763 Plugged into valid_lang_attribute. */
2766 cp_valid_lang_attribute (attr_name, attr_args, decl, type)
2768 tree attr_args ATTRIBUTE_UNUSED;
2769 tree decl ATTRIBUTE_UNUSED;
2770 tree type ATTRIBUTE_UNUSED;
2772 if (is_attribute_p ("com_interface", attr_name))
2774 if (! flag_vtable_thunks)
2776 error ("`com_interface' only supported with -fvtable-thunks");
2780 if (attr_args != NULL_TREE
2781 || decl != NULL_TREE
2782 || ! CLASS_TYPE_P (type)
2783 || type != TYPE_MAIN_VARIANT (type))
2785 warning ("`com_interface' attribute can only be applied to class definitions");
2789 CLASSTYPE_COM_INTERFACE (type) = 1;
2792 else if (is_attribute_p ("init_priority", attr_name))
2794 tree initp_expr = (attr_args ? TREE_VALUE (attr_args): NULL_TREE);
2798 STRIP_NOPS (initp_expr);
2800 if (!initp_expr || TREE_CODE (initp_expr) != INTEGER_CST)
2802 error ("requested init_priority is not an integer constant");
2806 pri = TREE_INT_CST_LOW (initp_expr);
2808 while (TREE_CODE (type) == ARRAY_TYPE)
2809 type = TREE_TYPE (type);
2811 if (decl == NULL_TREE
2812 || TREE_CODE (decl) != VAR_DECL
2813 || ! TREE_STATIC (decl)
2814 || DECL_EXTERNAL (decl)
2815 || (TREE_CODE (type) != RECORD_TYPE
2816 && TREE_CODE (type) != UNION_TYPE)
2817 /* Static objects in functions are initialized the
2818 first time control passes through that
2819 function. This is not precise enough to pin down an
2820 init_priority value, so don't allow it. */
2821 || current_function_decl)
2823 error ("can only use init_priority attribute on file-scope definitions of objects of class type");
2827 if (pri > MAX_INIT_PRIORITY || pri <= 0)
2829 error ("requested init_priority is out of range");
2833 /* Check for init_priorities that are reserved for
2834 language and runtime support implementations.*/
2835 if (pri <= MAX_RESERVED_INIT_PRIORITY)
2838 ("requested init_priority is reserved for internal use");
2841 DECL_INIT_PRIORITY (decl) = pri;
2848 /* Return a new PTRMEM_CST of the indicated TYPE. The MEMBER is the
2849 thing pointed to by the constant. */
2852 make_ptrmem_cst (type, member)
2856 tree ptrmem_cst = make_node (PTRMEM_CST);
2857 /* If would seem a great convenience if make_node would set
2858 TREE_CONSTANT for things of class `c', but it does not. */
2859 TREE_CONSTANT (ptrmem_cst) = 1;
2860 TREE_TYPE (ptrmem_cst) = type;
2861 PTRMEM_CST_MEMBER (ptrmem_cst) = member;