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 #include "splay-tree.h"
33 static tree bot_manip
PROTO((tree
));
34 static tree bot_replace
PROTO((tree
*));
35 static tree build_cplus_array_type_1
PROTO((tree
, tree
));
36 static void list_hash_add
PROTO((int, tree
));
37 static int list_hash
PROTO((tree
, tree
, tree
));
38 static tree list_hash_lookup
PROTO((int, tree
, tree
, tree
));
39 static void propagate_binfo_offsets
PROTO((tree
, tree
));
40 static int avoid_overlap
PROTO((tree
, tree
));
41 static cp_lvalue_kind lvalue_p_1
PROTO((tree
, int));
42 static tree no_linkage_helper
PROTO((tree
*));
43 static tree build_srcloc
PROTO((char *, int));
44 static void mark_list_hash
PROTO ((void *));
46 #define CEIL(x,y) (((x) + (y) - 1) / (y))
48 /* If REF is an lvalue, returns the kind of lvalue that REF is.
49 Otherwise, returns clk_none. If TREAT_CLASS_RVALUES_AS_LVALUES is
50 non-zero, rvalues of class type are considered lvalues. */
53 lvalue_p_1 (ref
, treat_class_rvalues_as_lvalues
)
55 int treat_class_rvalues_as_lvalues
;
57 cp_lvalue_kind op1_lvalue_kind
= clk_none
;
58 cp_lvalue_kind op2_lvalue_kind
= clk_none
;
60 if (TREE_CODE (TREE_TYPE (ref
)) == REFERENCE_TYPE
)
63 if (ref
== current_class_ptr
&& flag_this_is_variable
<= 0)
66 switch (TREE_CODE (ref
))
68 /* preincrements and predecrements are valid lvals, provided
69 what they refer to are valid lvals. */
70 case PREINCREMENT_EXPR
:
71 case PREDECREMENT_EXPR
:
75 case WITH_CLEANUP_EXPR
:
79 return lvalue_p_1 (TREE_OPERAND (ref
, 0),
80 treat_class_rvalues_as_lvalues
);
83 op1_lvalue_kind
= lvalue_p_1 (TREE_OPERAND (ref
, 0),
84 treat_class_rvalues_as_lvalues
);
86 /* The "field" can be a FUNCTION_DECL or an OVERLOAD in some
88 && TREE_CODE (TREE_OPERAND (ref
, 1)) == FIELD_DECL
89 && DECL_C_BIT_FIELD (TREE_OPERAND (ref
, 1)))
91 /* Clear the ordinary bit. If this object was a class
92 rvalue we want to preserve that information. */
93 op1_lvalue_kind
&= ~clk_ordinary
;
94 /* The lvalue is for a btifield. */
95 op1_lvalue_kind
|= clk_bitfield
;
97 return op1_lvalue_kind
;
103 if (TREE_READONLY (ref
) && ! TREE_STATIC (ref
)
104 && DECL_LANG_SPECIFIC (ref
)
105 && DECL_IN_AGGR_P (ref
))
111 if (TREE_CODE (TREE_TYPE (ref
)) != METHOD_TYPE
)
115 /* A currently unresolved scope ref. */
117 my_friendly_abort (103);
119 if (TREE_CODE (TREE_OPERAND (ref
, 1)) == FUNCTION_DECL
)
124 op1_lvalue_kind
= lvalue_p_1 (TREE_OPERAND (ref
, 0),
125 treat_class_rvalues_as_lvalues
);
126 op2_lvalue_kind
= lvalue_p_1 (TREE_OPERAND (ref
, 1),
127 treat_class_rvalues_as_lvalues
);
131 op1_lvalue_kind
= lvalue_p_1 (TREE_OPERAND (ref
, 1),
132 treat_class_rvalues_as_lvalues
);
133 op2_lvalue_kind
= lvalue_p_1 (TREE_OPERAND (ref
, 2),
134 treat_class_rvalues_as_lvalues
);
141 return lvalue_p_1 (TREE_OPERAND (ref
, 1),
142 treat_class_rvalues_as_lvalues
);
145 return treat_class_rvalues_as_lvalues
? clk_class
: clk_none
;
149 return ((treat_class_rvalues_as_lvalues
150 && IS_AGGR_TYPE (TREE_TYPE (ref
)))
151 ? clk_class
: clk_none
);
154 /* All functions (except non-static-member functions) are
156 return (DECL_NONSTATIC_MEMBER_FUNCTION_P (ref
)
157 ? clk_none
: clk_ordinary
);
163 /* If one operand is not an lvalue at all, then this expression is
165 if (!op1_lvalue_kind
|| !op2_lvalue_kind
)
168 /* Otherwise, it's an lvalue, and it has all the odd properties
169 contributed by either operand. */
170 op1_lvalue_kind
= op1_lvalue_kind
| op2_lvalue_kind
;
171 /* It's not an ordinary lvalue if it involves either a bit-field or
173 if ((op1_lvalue_kind
& ~clk_ordinary
) != clk_none
)
174 op1_lvalue_kind
&= ~clk_ordinary
;
175 return op1_lvalue_kind
;
178 /* If REF is an lvalue, returns the kind of lvalue that REF is.
179 Otherwise, returns clk_none. Lvalues can be assigned, unless they
180 have TREE_READONLY, or unless they are FUNCTION_DECLs. Lvalues can
181 have their address taken, unless they have DECL_REGISTER. */
187 return lvalue_p_1 (ref
, /*treat_class_rvalues_as_lvalues=*/0);
190 /* This differs from real_lvalue_p in that class rvalues are
191 considered lvalues. */
198 (lvalue_p_1 (ref
, /*treat_class_rvalues_as_lvalues=*/1) != clk_none
);
201 /* Return nonzero if REF is an lvalue valid for this language;
202 otherwise, print an error message and return zero. */
205 lvalue_or_else (ref
, string
)
209 int win
= lvalue_p (ref
);
211 error ("non-lvalue in %s", string
);
215 /* INIT is a CALL_EXPR which needs info about its target.
216 TYPE is the type that this initialization should appear to have.
218 Build an encapsulation of the initialization to perform
219 and return it so that it can be processed by language-independent
220 and language-specific expression expanders. */
223 build_cplus_new (type
, init
)
231 /* Make sure that we're not trying to create an instance of an
233 abstract_virtuals_error (NULL_TREE
, type
);
235 if (TREE_CODE (init
) != CALL_EXPR
&& TREE_CODE (init
) != AGGR_INIT_EXPR
)
236 return convert (type
, init
);
238 slot
= build (VAR_DECL
, type
);
239 DECL_ARTIFICIAL (slot
) = 1;
240 layout_decl (slot
, 0);
242 /* We split the CALL_EXPR into its function and its arguments here.
243 Then, in expand_expr, we put them back together. The reason for
244 this is that this expression might be a default argument
245 expression. In that case, we need a new temporary every time the
246 expression is used. That's what break_out_target_exprs does; it
247 replaces every AGGR_INIT_EXPR with a copy that uses a fresh
248 temporary slot. Then, expand_expr builds up a call-expression
249 using the new slot. */
250 fn
= TREE_OPERAND (init
, 0);
251 rval
= build (AGGR_INIT_EXPR
, type
, fn
, TREE_OPERAND (init
, 1), slot
);
252 TREE_SIDE_EFFECTS (rval
) = 1;
253 AGGR_INIT_VIA_CTOR_P (rval
)
254 = (TREE_CODE (fn
) == ADDR_EXPR
255 && TREE_CODE (TREE_OPERAND (fn
, 0)) == FUNCTION_DECL
256 && DECL_CONSTRUCTOR_P (TREE_OPERAND (fn
, 0)));
257 rval
= build_target_expr (slot
, rval
);
262 /* Encapsulate the expression INIT in a TARGET_EXPR. */
265 get_target_expr (init
)
271 slot
= build (VAR_DECL
, TREE_TYPE (init
));
272 DECL_ARTIFICIAL (slot
) = 1;
273 layout_decl (slot
, 0);
274 rval
= build_target_expr (slot
, init
);
279 /* Recursively search EXP for CALL_EXPRs that need cleanups and replace
280 these CALL_EXPRs with tree nodes that will perform the cleanups. */
283 break_out_cleanups (exp
)
288 if (TREE_CODE (tmp
) == CALL_EXPR
289 && TYPE_NEEDS_DESTRUCTOR (TREE_TYPE (tmp
)))
290 return build_cplus_new (TREE_TYPE (tmp
), tmp
);
292 while (TREE_CODE (tmp
) == NOP_EXPR
293 || TREE_CODE (tmp
) == CONVERT_EXPR
294 || TREE_CODE (tmp
) == NON_LVALUE_EXPR
)
296 if (TREE_CODE (TREE_OPERAND (tmp
, 0)) == CALL_EXPR
297 && TYPE_NEEDS_DESTRUCTOR (TREE_TYPE (TREE_OPERAND (tmp
, 0))))
299 TREE_OPERAND (tmp
, 0)
300 = build_cplus_new (TREE_TYPE (TREE_OPERAND (tmp
, 0)),
301 TREE_OPERAND (tmp
, 0));
305 tmp
= TREE_OPERAND (tmp
, 0);
310 /* Recursively perform a preorder search EXP for CALL_EXPRs, making
311 copies where they are found. Returns a deep copy all nodes transitively
312 containing CALL_EXPRs. */
315 break_out_calls (exp
)
318 register tree t1
, t2
= NULL_TREE
;
319 register enum tree_code code
;
320 register int changed
= 0;
323 if (exp
== NULL_TREE
)
326 code
= TREE_CODE (exp
);
328 if (code
== CALL_EXPR
)
329 return copy_node (exp
);
331 /* Don't try and defeat a save_expr, as it should only be done once. */
332 if (code
== SAVE_EXPR
)
335 switch (TREE_CODE_CLASS (code
))
340 case 'c': /* a constant */
341 case 't': /* a type node */
342 case 'x': /* something random, like an identifier or an ERROR_MARK. */
345 case 'd': /* A decl node */
346 #if 0 /* This is bogus. jason 9/21/94 */
348 t1
= break_out_calls (DECL_INITIAL (exp
));
349 if (t1
!= DECL_INITIAL (exp
))
351 exp
= copy_node (exp
);
352 DECL_INITIAL (exp
) = t1
;
357 case 'b': /* A block node */
359 /* Don't know how to handle these correctly yet. Must do a
360 break_out_calls on all DECL_INITIAL values for local variables,
361 and also break_out_calls on all sub-blocks and sub-statements. */
366 case 'e': /* an expression */
367 case 'r': /* a reference */
368 case 's': /* an expression with side effects */
369 for (i
= tree_code_length
[(int) code
] - 1; i
>= 0; i
--)
371 t1
= break_out_calls (TREE_OPERAND (exp
, i
));
372 if (t1
!= TREE_OPERAND (exp
, i
))
374 exp
= copy_node (exp
);
375 TREE_OPERAND (exp
, i
) = t1
;
380 case '<': /* a comparison expression */
381 case '2': /* a binary arithmetic expression */
382 t2
= break_out_calls (TREE_OPERAND (exp
, 1));
383 if (t2
!= TREE_OPERAND (exp
, 1))
385 case '1': /* a unary arithmetic expression */
386 t1
= break_out_calls (TREE_OPERAND (exp
, 0));
387 if (t1
!= TREE_OPERAND (exp
, 0))
391 if (tree_code_length
[(int) code
] == 1)
392 return build1 (code
, TREE_TYPE (exp
), t1
);
394 return build (code
, TREE_TYPE (exp
), t1
, t2
);
401 extern struct obstack
*current_obstack
;
402 extern struct obstack permanent_obstack
;
403 extern struct obstack
*saveable_obstack
;
404 extern struct obstack
*expression_obstack
;
406 /* Here is how primitive or already-canonicalized types' hash
407 codes are made. MUST BE CONSISTENT WITH tree.c !!! */
408 #define TYPE_HASH(TYPE) ((HOST_WIDE_INT) (TYPE) & 0777777)
410 /* Construct, lay out and return the type of methods belonging to class
411 BASETYPE and whose arguments are described by ARGTYPES and whose values
412 are described by RETTYPE. If each type exists already, reuse it. */
415 build_cplus_method_type (basetype
, rettype
, argtypes
)
416 tree basetype
, rettype
, argtypes
;
422 /* Make a node of the sort we want. */
423 t
= make_node (METHOD_TYPE
);
425 TYPE_METHOD_BASETYPE (t
) = TYPE_MAIN_VARIANT (basetype
);
426 TREE_TYPE (t
) = rettype
;
427 ptype
= build_pointer_type (basetype
);
429 /* The actual arglist for this function includes a "hidden" argument
430 which is "this". Put it into the list of argument types. Make
431 sure that the new argument list is allocated on the same obstack
433 push_obstacks (TYPE_OBSTACK (t
), TYPE_OBSTACK (t
));
434 argtypes
= tree_cons (NULL_TREE
, ptype
, argtypes
);
435 TYPE_ARG_TYPES (t
) = argtypes
;
436 TREE_SIDE_EFFECTS (argtypes
) = 1; /* Mark first argtype as "artificial". */
439 /* If we already have such a type, use the old one and free this one.
440 Note that it also frees up the above cons cell if found. */
441 hashcode
= TYPE_HASH (basetype
) + TYPE_HASH (rettype
) +
442 type_hash_list (argtypes
);
444 t
= type_hash_canon (hashcode
, t
);
446 if (TYPE_SIZE (t
) == 0)
453 build_cplus_array_type_1 (elt_type
, index_type
)
459 if (elt_type
== error_mark_node
|| index_type
== error_mark_node
)
460 return error_mark_node
;
462 if (processing_template_decl
463 || uses_template_parms (elt_type
)
464 || uses_template_parms (index_type
))
466 t
= make_node (ARRAY_TYPE
);
467 TREE_TYPE (t
) = elt_type
;
468 TYPE_DOMAIN (t
) = index_type
;
471 t
= build_array_type (elt_type
, index_type
);
473 /* Push these needs up so that initialization takes place
475 TYPE_NEEDS_CONSTRUCTING (t
)
476 = TYPE_NEEDS_CONSTRUCTING (TYPE_MAIN_VARIANT (elt_type
));
477 TYPE_NEEDS_DESTRUCTOR (t
)
478 = TYPE_NEEDS_DESTRUCTOR (TYPE_MAIN_VARIANT (elt_type
));
483 build_cplus_array_type (elt_type
, index_type
)
488 int type_quals
= CP_TYPE_QUALS (elt_type
);
490 elt_type
= TYPE_MAIN_VARIANT (elt_type
);
492 t
= build_cplus_array_type_1 (elt_type
, index_type
);
494 if (type_quals
!= TYPE_UNQUALIFIED
)
495 t
= cp_build_qualified_type (t
, type_quals
);
500 /* Make a variant of TYPE, qualified with the TYPE_QUALS. Handles
501 arrays correctly. In particular, if TYPE is an array of T's, and
502 TYPE_QUALS is non-empty, returns an array of qualified T's. If
503 at attempt is made to qualify a type illegally, and COMPLAIN is
504 non-zero, an error is issued. If COMPLAIN is zero, error_mark_node
508 cp_build_qualified_type_real (type
, type_quals
, complain
)
515 if (type
== error_mark_node
)
518 if (type_quals
== TYPE_QUALS (type
))
521 /* A restrict-qualified pointer type must be a pointer (or reference)
522 to object or incomplete type. */
523 if ((type_quals
& TYPE_QUAL_RESTRICT
)
524 && TREE_CODE (type
) != TEMPLATE_TYPE_PARM
525 && (!POINTER_TYPE_P (type
)
526 || TYPE_PTRMEM_P (type
)
527 || TREE_CODE (TREE_TYPE (type
)) == FUNCTION_TYPE
))
530 cp_error ("`%T' cannot be `restrict'-qualified", type
);
532 return error_mark_node
;
534 type_quals
&= ~TYPE_QUAL_RESTRICT
;
537 if (type_quals
!= TYPE_UNQUALIFIED
538 && TREE_CODE (type
) == FUNCTION_TYPE
)
541 cp_error ("`%T' cannot be `const'-, `volatile'-, or `restrict'-qualified", type
);
543 return error_mark_node
;
544 type_quals
= TYPE_UNQUALIFIED
;
546 else if (TREE_CODE (type
) == ARRAY_TYPE
)
548 /* In C++, the qualification really applies to the array element
549 type. Obtain the appropriately qualified element type. */
552 = cp_build_qualified_type_real (TREE_TYPE (type
),
556 if (element_type
== error_mark_node
)
557 return error_mark_node
;
559 /* See if we already have an identically qualified type. */
560 for (t
= TYPE_MAIN_VARIANT (type
); t
; t
= TYPE_NEXT_VARIANT (t
))
561 if (CP_TYPE_QUALS (t
) == type_quals
)
564 /* If we didn't already have it, create it now. */
567 /* Make a new array type, just like the old one, but with the
568 appropriately qualified element type. */
569 t
= build_type_copy (type
);
570 TREE_TYPE (t
) = element_type
;
573 /* Even if we already had this variant, we update
574 TYPE_NEEDS_CONSTRUCTING and TYPE_NEEDS_DESTRUCTOR in case
575 they changed since the variant was originally created.
577 This seems hokey; if there is some way to use a previous
578 variant *without* coming through here,
579 TYPE_NEEDS_CONSTRUCTING will never be updated. */
580 TYPE_NEEDS_CONSTRUCTING (t
)
581 = TYPE_NEEDS_CONSTRUCTING (TYPE_MAIN_VARIANT (element_type
));
582 TYPE_NEEDS_DESTRUCTOR (t
)
583 = TYPE_NEEDS_DESTRUCTOR (TYPE_MAIN_VARIANT (element_type
));
586 else if (TYPE_PTRMEMFUNC_P (type
))
588 /* For a pointer-to-member type, we can't just return a
589 cv-qualified version of the RECORD_TYPE. If we do, we
590 haven't change the field that contains the actual pointer to
591 a method, and so TYPE_PTRMEMFUNC_FN_TYPE will be wrong. */
594 t
= TYPE_PTRMEMFUNC_FN_TYPE (type
);
595 t
= cp_build_qualified_type_real (t
, type_quals
, complain
);
596 return build_ptrmemfunc_type (t
);
599 /* Retrieve (or create) the appropriately qualified variant. */
600 result
= build_qualified_type (type
, type_quals
);
602 /* If this was a pointer-to-method type, and we just made a copy,
603 then we need to clear the cached associated
604 pointer-to-member-function type; it is not valid for the new
607 && TREE_CODE (type
) == POINTER_TYPE
608 && TREE_CODE (TREE_TYPE (type
)) == METHOD_TYPE
)
609 TYPE_SET_PTRMEMFUNC_TYPE (result
, NULL_TREE
);
614 /* Returns the canonical version of TYPE. In other words, if TYPE is
615 a typedef, returns the underlying type. The cv-qualification of
616 the type returned matches the type input; they will always be
620 canonical_type_variant (t
)
623 return cp_build_qualified_type (TYPE_MAIN_VARIANT (t
), CP_TYPE_QUALS (t
));
626 /* Add OFFSET to all base types of T.
628 OFFSET, which is a type offset, is number of bytes.
630 Note that we don't have to worry about having two paths to the
631 same base type, since this type owns its association list. */
634 propagate_binfo_offsets (binfo
, offset
)
638 tree binfos
= BINFO_BASETYPES (binfo
);
639 int i
, n_baselinks
= binfos
? TREE_VEC_LENGTH (binfos
) : 0;
641 for (i
= 0; i
< n_baselinks
; /* note increment is done in the loop. */)
643 tree base_binfo
= TREE_VEC_ELT (binfos
, i
);
645 if (TREE_VIA_VIRTUAL (base_binfo
))
650 tree delta
= NULL_TREE
;
652 for (j
= i
+1; j
< n_baselinks
; j
++)
653 if (! TREE_VIA_VIRTUAL (TREE_VEC_ELT (binfos
, j
)))
655 /* The next basetype offset must take into account the space
656 between the classes, not just the size of each class. */
657 delta
= size_binop (MINUS_EXPR
,
658 BINFO_OFFSET (TREE_VEC_ELT (binfos
, j
)),
659 BINFO_OFFSET (base_binfo
));
664 if (BINFO_OFFSET_ZEROP (base_binfo
))
665 BINFO_OFFSET (base_binfo
) = offset
;
667 BINFO_OFFSET (base_binfo
)
668 = size_binop (PLUS_EXPR
, BINFO_OFFSET (base_binfo
), offset
);
670 BINFO_OFFSET (base_binfo
) = offset
;
673 propagate_binfo_offsets (base_binfo
, offset
);
675 /* Go to our next class that counts for offset propagation. */
678 offset
= size_binop (PLUS_EXPR
, offset
, delta
);
683 /* Makes new binfos for the indirect bases under BINFO, and updates
684 BINFO_OFFSET for them and their bases. */
687 unshare_base_binfos (binfo
)
690 tree binfos
= BINFO_BASETYPES (binfo
);
694 if (binfos
== NULL_TREE
)
697 /* Now unshare the structure beneath BINFO. */
698 for (j
= TREE_VEC_LENGTH (binfos
)-1;
701 tree base_binfo
= TREE_VEC_ELT (binfos
, j
);
702 new_binfo
= TREE_VEC_ELT (binfos
, j
)
703 = make_binfo (BINFO_OFFSET (base_binfo
),
705 BINFO_VTABLE (base_binfo
),
706 BINFO_VIRTUALS (base_binfo
));
707 TREE_VIA_PUBLIC (new_binfo
) = TREE_VIA_PUBLIC (base_binfo
);
708 TREE_VIA_PROTECTED (new_binfo
) = TREE_VIA_PROTECTED (base_binfo
);
709 TREE_VIA_VIRTUAL (new_binfo
) = TREE_VIA_VIRTUAL (base_binfo
);
710 BINFO_INHERITANCE_CHAIN (new_binfo
) = binfo
;
711 unshare_base_binfos (new_binfo
);
715 /* Finish the work of layout_record, now taking virtual bases into account.
716 Also compute the actual offsets that our base classes will have.
717 This must be performed after the fields are laid out, since virtual
718 baseclasses must lay down at the end of the record.
720 Returns the maximum number of virtual functions any of the
721 baseclasses provide. */
724 layout_basetypes (rec
, max
)
728 tree binfos
= TYPE_BINFO_BASETYPES (rec
);
729 int i
, n_baseclasses
= binfos
? TREE_VEC_LENGTH (binfos
) : 0;
733 unsigned int record_align
= MAX (BITS_PER_UNIT
, TYPE_ALIGN (rec
));
734 unsigned int desired_align
;
736 /* Record size so far is CONST_SIZE bits, where CONST_SIZE is an integer. */
737 register unsigned int const_size
= 0;
738 unsigned int nonvirtual_const_size
;
740 #ifdef STRUCTURE_SIZE_BOUNDARY
741 /* Packed structures don't need to have minimum size. */
742 if (! TYPE_PACKED (rec
))
743 record_align
= MAX (record_align
, STRUCTURE_SIZE_BOUNDARY
);
746 /* Get all the virtual base types that this type uses. The
747 TREE_VALUE slot holds the virtual baseclass type. Note that
748 get_vbase_types makes copies of the virtual base BINFOs, so that
749 the vbase_types are unshared. */
750 vbase_types
= CLASSTYPE_VBASECLASSES (rec
);
752 my_friendly_assert (TREE_CODE (TYPE_SIZE (rec
)) == INTEGER_CST
, 19970302);
753 const_size
= TREE_INT_CST_LOW (TYPE_SIZE (rec
));
755 nonvirtual_const_size
= const_size
;
759 tree basetype
= BINFO_TYPE (vbase_types
);
762 desired_align
= TYPE_ALIGN (basetype
);
763 record_align
= MAX (record_align
, desired_align
);
766 offset
= integer_zero_node
;
769 /* Give each virtual base type the alignment it wants. */
770 const_size
= CEIL (const_size
, desired_align
) * desired_align
;
771 offset
= size_int (CEIL (const_size
, BITS_PER_UNIT
));
774 if (CLASSTYPE_VSIZE (basetype
) > max
)
775 max
= CLASSTYPE_VSIZE (basetype
);
776 BINFO_OFFSET (vbase_types
) = offset
;
778 /* Every virtual baseclass takes a least a UNIT, so that we can
779 take it's address and get something different for each base. */
780 const_size
+= MAX (BITS_PER_UNIT
,
781 TREE_INT_CST_LOW (CLASSTYPE_SIZE (basetype
)));
783 vbase_types
= TREE_CHAIN (vbase_types
);
788 /* Because a virtual base might take a single byte above,
789 we have to re-adjust the total size to make sure it is
790 a multiple of the alignment. */
791 /* Give the whole object the alignment it wants. */
792 const_size
= CEIL (const_size
, record_align
) * record_align
;
795 /* Set the alignment in the complete type. We don't set CLASSTYPE_ALIGN
796 here, as that is for this class, without any virtual base classes. */
797 TYPE_ALIGN (rec
) = record_align
;
798 if (const_size
!= nonvirtual_const_size
)
800 TYPE_SIZE (rec
) = size_int (const_size
);
801 TYPE_SIZE_UNIT (rec
) = size_binop (FLOOR_DIV_EXPR
, TYPE_SIZE (rec
),
802 size_int (BITS_PER_UNIT
));
805 /* Now propagate offset information throughout the lattice. */
806 for (i
= 0; i
< n_baseclasses
; i
++)
808 register tree base_binfo
= TREE_VEC_ELT (binfos
, i
);
809 register tree basetype
= BINFO_TYPE (base_binfo
);
810 tree field
= TYPE_FIELDS (rec
);
812 if (TREE_VIA_VIRTUAL (base_binfo
))
815 my_friendly_assert (TREE_TYPE (field
) == basetype
, 23897);
817 if (get_base_distance (basetype
, rec
, 0, (tree
*)0) == -2)
818 cp_warning ("direct base `%T' inaccessible in `%T' due to ambiguity",
821 BINFO_OFFSET (base_binfo
)
822 = size_int (CEIL (TREE_INT_CST_LOW (DECL_FIELD_BITPOS (field
)),
824 propagate_binfo_offsets (base_binfo
, BINFO_OFFSET (base_binfo
));
825 TYPE_FIELDS (rec
) = TREE_CHAIN (field
);
828 for (vbase_types
= CLASSTYPE_VBASECLASSES (rec
); vbase_types
;
829 vbase_types
= TREE_CHAIN (vbase_types
))
831 BINFO_INHERITANCE_CHAIN (vbase_types
) = TYPE_BINFO (rec
);
832 unshare_base_binfos (vbase_types
);
833 propagate_binfo_offsets (vbase_types
, BINFO_OFFSET (vbase_types
));
837 tree basetype
= BINFO_TYPE (vbase_types
);
838 if (get_base_distance (basetype
, rec
, 0, (tree
*)0) == -2)
839 cp_warning ("virtual base `%T' inaccessible in `%T' due to ambiguity",
847 /* If the empty base field in DECL overlaps with a base of the same type in
848 NEWDECL, which is either another base field or the first data field of
849 the class, pad the base just before NEWDECL and return 1. Otherwise,
853 avoid_overlap (decl
, newdecl
)
858 if (newdecl
== NULL_TREE
859 || ! types_overlap_p (TREE_TYPE (decl
), TREE_TYPE (newdecl
)))
862 for (field
= decl
; TREE_CHAIN (field
) && TREE_CHAIN (field
) != newdecl
;
863 field
= TREE_CHAIN (field
))
866 DECL_SIZE (field
) = integer_one_node
;
871 /* Returns a list of fields to stand in for the base class subobjects
872 of REC. These fields are later removed by layout_basetypes. */
875 build_base_fields (rec
)
878 /* Chain to hold all the new FIELD_DECLs which stand in for base class
880 tree base_decls
= NULL_TREE
;
881 tree binfos
= TYPE_BINFO_BASETYPES (rec
);
882 int n_baseclasses
= binfos
? TREE_VEC_LENGTH (binfos
) : 0;
884 int i
, saw_empty
= 0;
885 unsigned int base_align
= 0;
887 for (i
= 0; i
< n_baseclasses
; ++i
)
889 register tree base_binfo
= TREE_VEC_ELT (binfos
, i
);
890 register tree basetype
= BINFO_TYPE (base_binfo
);
892 if (TYPE_SIZE (basetype
) == 0)
893 /* This error is now reported in xref_tag, thus giving better
894 location information. */
897 if (TREE_VIA_VIRTUAL (base_binfo
))
900 decl
= build_lang_decl (FIELD_DECL
, NULL_TREE
, basetype
);
901 DECL_ARTIFICIAL (decl
) = 1;
902 DECL_FIELD_CONTEXT (decl
) = DECL_CLASS_CONTEXT (decl
) = rec
;
903 DECL_SIZE (decl
) = CLASSTYPE_SIZE (basetype
);
904 DECL_ALIGN (decl
) = CLASSTYPE_ALIGN (basetype
);
905 TREE_CHAIN (decl
) = base_decls
;
910 /* Brain damage for backwards compatibility. For no good reason,
911 the old layout_basetypes made every base at least as large as
912 the alignment for the bases up to that point, gratuitously
913 wasting space. So we do the same thing here. */
914 base_align
= MAX (base_align
, DECL_ALIGN (decl
));
916 = size_int (MAX (TREE_INT_CST_LOW (DECL_SIZE (decl
)),
919 else if (DECL_SIZE (decl
) == integer_zero_node
)
923 /* Reverse the list of fields so we allocate the bases in the proper
925 base_decls
= nreverse (base_decls
);
927 /* In the presence of empty base classes, we run the risk of allocating
928 two objects of the same class on top of one another. Avoid that. */
929 if (flag_new_abi
&& saw_empty
)
930 for (decl
= base_decls
; decl
; decl
= TREE_CHAIN (decl
))
932 if (DECL_SIZE (decl
) == integer_zero_node
)
934 /* First step through the following bases until we find
935 an overlap or a non-empty base. */
936 for (nextdecl
= TREE_CHAIN (decl
); nextdecl
;
937 nextdecl
= TREE_CHAIN (nextdecl
))
939 if (avoid_overlap (decl
, nextdecl
)
940 || DECL_SIZE (nextdecl
) != integer_zero_node
)
944 /* If we're still looking, also check against the first
946 for (nextdecl
= TYPE_FIELDS (rec
);
947 nextdecl
&& TREE_CODE (nextdecl
) != FIELD_DECL
;
948 nextdecl
= TREE_CHAIN (nextdecl
))
950 avoid_overlap (decl
, nextdecl
);
958 /* Returns list of virtual base class pointers in a FIELD_DECL chain. */
961 build_vbase_pointer_fields (rec
)
964 /* Chain to hold all the new FIELD_DECLs which point at virtual
966 tree vbase_decls
= NULL_TREE
;
967 tree binfos
= TYPE_BINFO_BASETYPES (rec
);
968 int n_baseclasses
= binfos
? TREE_VEC_LENGTH (binfos
) : 0;
972 /* Handle basetypes almost like fields, but record their
973 offsets differently. */
975 for (i
= 0; i
< n_baseclasses
; i
++)
977 register tree base_binfo
= TREE_VEC_ELT (binfos
, i
);
978 register tree basetype
= BINFO_TYPE (base_binfo
);
980 if (TYPE_SIZE (basetype
) == 0)
981 /* This error is now reported in xref_tag, thus giving better
982 location information. */
985 /* All basetypes are recorded in the association list of the
988 if (TREE_VIA_VIRTUAL (base_binfo
))
993 /* The offset for a virtual base class is only used in computing
994 virtual function tables and for initializing virtual base
995 pointers. It is built once `get_vbase_types' is called. */
997 /* If this basetype can come from another vbase pointer
998 without an additional indirection, we will share
999 that pointer. If an indirection is involved, we
1000 make our own pointer. */
1001 for (j
= 0; j
< n_baseclasses
; j
++)
1003 tree other_base_binfo
= TREE_VEC_ELT (binfos
, j
);
1004 if (! TREE_VIA_VIRTUAL (other_base_binfo
)
1005 && binfo_member (basetype
,
1006 CLASSTYPE_VBASECLASSES (BINFO_TYPE
1011 FORMAT_VBASE_NAME (name
, basetype
);
1012 decl
= build_lang_decl (FIELD_DECL
, get_identifier (name
),
1013 build_pointer_type (basetype
));
1014 /* If you change any of the below, take a look at all the
1015 other VFIELD_BASEs and VTABLE_BASEs in the code, and change
1017 DECL_ASSEMBLER_NAME (decl
) = get_identifier (VTABLE_BASE
);
1018 DECL_VIRTUAL_P (decl
) = 1;
1019 DECL_ARTIFICIAL (decl
) = 1;
1020 DECL_FIELD_CONTEXT (decl
) = rec
;
1021 DECL_CLASS_CONTEXT (decl
) = rec
;
1022 DECL_FCONTEXT (decl
) = basetype
;
1023 DECL_SAVED_INSNS (decl
) = 0;
1024 DECL_FIELD_SIZE (decl
) = 0;
1025 DECL_ALIGN (decl
) = TYPE_ALIGN (ptr_type_node
);
1026 TREE_CHAIN (decl
) = vbase_decls
;
1027 BINFO_VPTR_FIELD (base_binfo
) = decl
;
1031 /* The space this decl occupies has already been accounted for. */
1039 /* Hashing of lists so that we don't make duplicates.
1040 The entry point is `list_hash_canon'. */
1042 /* Each hash table slot is a bucket containing a chain
1043 of these structures. */
1047 struct list_hash
*next
; /* Next structure in the bucket. */
1048 int hashcode
; /* Hash code of this list. */
1049 tree list
; /* The list recorded here. */
1052 /* Now here is the hash table. When recording a list, it is added
1053 to the slot whose index is the hash code mod the table size.
1054 Note that the hash table is used for several kinds of lists.
1055 While all these live in the same table, they are completely independent,
1056 and the hash code is computed differently for each of these. */
1058 #define TYPE_HASH_SIZE 59
1059 static struct list_hash
*list_hash_table
[TYPE_HASH_SIZE
];
1061 /* Compute a hash code for a list (chain of TREE_LIST nodes
1062 with goodies in the TREE_PURPOSE, TREE_VALUE, and bits of the
1063 TREE_COMMON slots), by adding the hash codes of the individual entries. */
1066 list_hash (purpose
, value
, chain
)
1067 tree purpose
, value
, chain
;
1069 register int hashcode
= 0;
1072 hashcode
+= TYPE_HASH (chain
);
1075 hashcode
+= TYPE_HASH (value
);
1079 hashcode
+= TYPE_HASH (purpose
);
1085 /* Look in the type hash table for a type isomorphic to TYPE.
1086 If one is found, return it. Otherwise return 0. */
1089 list_hash_lookup (hashcode
, purpose
, value
, chain
)
1091 tree purpose
, value
, chain
;
1093 register struct list_hash
*h
;
1095 for (h
= list_hash_table
[hashcode
% TYPE_HASH_SIZE
]; h
; h
= h
->next
)
1096 if (h
->hashcode
== hashcode
1097 && TREE_PURPOSE (h
->list
) == purpose
1098 && TREE_VALUE (h
->list
) == value
1099 && TREE_CHAIN (h
->list
) == chain
)
1104 /* Add an entry to the list-hash-table
1105 for a list TYPE whose hash code is HASHCODE. */
1108 list_hash_add (hashcode
, list
)
1112 register struct list_hash
*h
;
1114 h
= (struct list_hash
*) obstack_alloc (&permanent_obstack
, sizeof (struct list_hash
));
1115 h
->hashcode
= hashcode
;
1117 h
->next
= list_hash_table
[hashcode
% TYPE_HASH_SIZE
];
1118 list_hash_table
[hashcode
% TYPE_HASH_SIZE
] = h
;
1121 /* Given list components PURPOSE, VALUE, AND CHAIN, return the canonical
1122 object for an identical list if one already exists. Otherwise, build a
1123 new one, and record it as the canonical object. */
1125 /* Set to 1 to debug without canonicalization. Never set by program. */
1127 static int debug_no_list_hash
= 0;
1130 hash_tree_cons (purpose
, value
, chain
)
1131 tree purpose
, value
, chain
;
1136 if (! debug_no_list_hash
)
1138 hashcode
= list_hash (purpose
, value
, chain
);
1139 t
= list_hash_lookup (hashcode
, purpose
, value
, chain
);
1144 t
= tree_cons (purpose
, value
, chain
);
1146 /* If this is a new list, record it for later reuse. */
1147 if (! debug_no_list_hash
)
1148 list_hash_add (hashcode
, t
);
1153 /* Constructor for hashed lists. */
1156 hash_tree_chain (value
, chain
)
1159 return hash_tree_cons (NULL_TREE
, value
, chain
);
1162 /* Similar, but used for concatenating two lists. */
1165 hash_chainon (list1
, list2
)
1172 if (TREE_CHAIN (list1
) == NULL_TREE
)
1173 return hash_tree_chain (TREE_VALUE (list1
), list2
);
1174 return hash_tree_chain (TREE_VALUE (list1
),
1175 hash_chainon (TREE_CHAIN (list1
), list2
));
1178 /* Build an association between TYPE and some parameters:
1180 OFFSET is the offset added to `this' to convert it to a pointer
1183 BINFO is the base binfo to use, if we are deriving from one. This
1184 is necessary, as we want specialized parent binfos from base
1185 classes, so that the VTABLE_NAMEs of bases are for the most derived
1186 type, instead of the simple type.
1188 VTABLE is the virtual function table with which to initialize
1189 sub-objects of type TYPE.
1191 VIRTUALS are the virtual functions sitting in VTABLE. */
1194 make_binfo (offset
, binfo
, vtable
, virtuals
)
1196 tree vtable
, virtuals
;
1198 tree new_binfo
= make_tree_vec (7);
1201 if (TREE_CODE (binfo
) == TREE_VEC
)
1202 type
= BINFO_TYPE (binfo
);
1206 binfo
= CLASS_TYPE_P (type
) ? TYPE_BINFO (binfo
) : NULL_TREE
;
1209 TREE_TYPE (new_binfo
) = TYPE_MAIN_VARIANT (type
);
1210 BINFO_OFFSET (new_binfo
) = offset
;
1211 BINFO_VTABLE (new_binfo
) = vtable
;
1212 BINFO_VIRTUALS (new_binfo
) = virtuals
;
1213 BINFO_VPTR_FIELD (new_binfo
) = NULL_TREE
;
1215 if (binfo
&& BINFO_BASETYPES (binfo
) != NULL_TREE
)
1216 BINFO_BASETYPES (new_binfo
) = copy_node (BINFO_BASETYPES (binfo
));
1220 /* Return the binfo value for ELEM in TYPE. */
1223 binfo_value (elem
, type
)
1227 if (get_base_distance (elem
, type
, 0, (tree
*)0) == -2)
1228 compiler_error ("base class `%s' ambiguous in binfo_value",
1229 TYPE_NAME_STRING (elem
));
1231 return TYPE_BINFO (type
);
1232 if (TREE_CODE (elem
) == RECORD_TYPE
&& TYPE_BINFO (elem
) == type
)
1234 return get_binfo (elem
, type
, 0);
1237 /* Return a reversed copy of the BINFO-chain given by PATH. (If the
1238 BINFO_INHERITANCE_CHAIN points from base classes to derived
1239 classes, it will instead point from derived classes to base
1240 classes.) Returns the first node in the reversed chain. */
1246 register tree prev
= NULL_TREE
, cur
;
1247 push_expression_obstack ();
1248 for (cur
= path
; cur
; cur
= BINFO_INHERITANCE_CHAIN (cur
))
1250 tree r
= copy_node (cur
);
1251 BINFO_INHERITANCE_CHAIN (r
) = prev
;
1262 unsigned HOST_WIDE_INT n
;
1265 fprintf (stderr
, "type \"%s\"; offset = %ld\n",
1266 TYPE_NAME_STRING (BINFO_TYPE (elem
)),
1267 (long) TREE_INT_CST_LOW (BINFO_OFFSET (elem
)));
1268 fprintf (stderr
, "vtable type:\n");
1269 debug_tree (BINFO_TYPE (elem
));
1270 if (BINFO_VTABLE (elem
))
1271 fprintf (stderr
, "vtable decl \"%s\"\n", IDENTIFIER_POINTER (DECL_NAME (BINFO_VTABLE (elem
))));
1273 fprintf (stderr
, "no vtable decl yet\n");
1274 fprintf (stderr
, "virtuals:\n");
1275 virtuals
= BINFO_VIRTUALS (elem
);
1277 n
= skip_rtti_stuff (&virtuals
, BINFO_TYPE (elem
));
1281 tree fndecl
= TREE_VALUE (virtuals
);
1282 fprintf (stderr
, "%s [%ld =? %ld]\n",
1283 IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (fndecl
)),
1284 (long) n
, (long) TREE_INT_CST_LOW (DECL_VINDEX (fndecl
)));
1286 virtuals
= TREE_CHAIN (virtuals
);
1295 if (TREE_CODE (t
) == FUNCTION_DECL
)
1297 else if (TREE_CODE (t
) == OVERLOAD
)
1299 for (i
=0; t
; t
= OVL_CHAIN (t
))
1304 my_friendly_abort (359);
1309 is_overloaded_fn (x
)
1312 /* A baselink is also considered an overloaded function. */
1313 if (TREE_CODE (x
) == OFFSET_REF
)
1314 x
= TREE_OPERAND (x
, 1);
1317 return (TREE_CODE (x
) == FUNCTION_DECL
1318 || TREE_CODE (x
) == TEMPLATE_ID_EXPR
1319 || DECL_FUNCTION_TEMPLATE_P (x
)
1320 || TREE_CODE (x
) == OVERLOAD
);
1324 really_overloaded_fn (x
)
1327 /* A baselink is also considered an overloaded function. */
1328 if (TREE_CODE (x
) == OFFSET_REF
)
1329 x
= TREE_OPERAND (x
, 1);
1332 return (TREE_CODE (x
) == OVERLOAD
1333 && (TREE_CHAIN (x
) != NULL_TREE
1334 || DECL_FUNCTION_TEMPLATE_P (OVL_FUNCTION (x
))));
1341 my_friendly_assert (is_overloaded_fn (from
), 9);
1342 /* A baselink is also considered an overloaded function. */
1343 if (BASELINK_P (from
))
1344 from
= TREE_VALUE (from
);
1345 return OVL_CURRENT (from
);
1348 /* Returns nonzero if T is a ->* or .* expression that refers to a
1355 return (TREE_CODE (t
) == OFFSET_REF
1356 && TYPE_PTRMEMFUNC_P (TREE_TYPE (TREE_OPERAND (t
, 1))));
1359 /* Return a new OVL node, concatenating it with the old one. */
1362 ovl_cons (decl
, chain
)
1366 tree result
= make_node (OVERLOAD
);
1367 TREE_TYPE (result
) = unknown_type_node
;
1368 OVL_FUNCTION (result
) = decl
;
1369 TREE_CHAIN (result
) = chain
;
1374 /* Same as ovl_cons, but on the scratch_obstack. */
1377 scratch_ovl_cons (value
, chain
)
1381 register struct obstack
*ambient_obstack
= current_obstack
;
1382 extern struct obstack
*expression_obstack
;
1383 current_obstack
= expression_obstack
;
1384 node
= ovl_cons (value
, chain
);
1385 current_obstack
= ambient_obstack
;
1389 /* Build a new overloaded function. If this is the first one,
1390 just return it; otherwise, ovl_cons the _DECLs */
1393 build_overload (decl
, chain
)
1397 if (! chain
&& TREE_CODE (decl
) != TEMPLATE_DECL
)
1399 if (chain
&& TREE_CODE (chain
) != OVERLOAD
)
1400 chain
= ovl_cons (chain
, NULL_TREE
);
1401 return ovl_cons (decl
, chain
);
1404 /* True if fn is in ovl. */
1407 ovl_member (fn
, ovl
)
1411 if (ovl
== NULL_TREE
)
1413 if (TREE_CODE (ovl
) != OVERLOAD
)
1415 for (; ovl
; ovl
= OVL_CHAIN (ovl
))
1416 if (OVL_FUNCTION (ovl
) == fn
)
1422 is_aggr_type_2 (t1
, t2
)
1425 if (TREE_CODE (t1
) != TREE_CODE (t2
))
1427 return IS_AGGR_TYPE (t1
) && IS_AGGR_TYPE (t2
);
1430 #define PRINT_RING_SIZE 4
1433 lang_printable_name (decl
, v
)
1437 static tree decl_ring
[PRINT_RING_SIZE
];
1438 static char *print_ring
[PRINT_RING_SIZE
];
1439 static int ring_counter
;
1442 /* Only cache functions. */
1444 || TREE_CODE (decl
) != FUNCTION_DECL
1445 || DECL_LANG_SPECIFIC (decl
) == 0)
1446 return lang_decl_name (decl
, v
);
1448 /* See if this print name is lying around. */
1449 for (i
= 0; i
< PRINT_RING_SIZE
; i
++)
1450 if (decl_ring
[i
] == decl
)
1451 /* yes, so return it. */
1452 return print_ring
[i
];
1454 if (++ring_counter
== PRINT_RING_SIZE
)
1457 if (current_function_decl
!= NULL_TREE
)
1459 if (decl_ring
[ring_counter
] == current_function_decl
)
1461 if (ring_counter
== PRINT_RING_SIZE
)
1463 if (decl_ring
[ring_counter
] == current_function_decl
)
1464 my_friendly_abort (106);
1467 if (print_ring
[ring_counter
])
1468 free (print_ring
[ring_counter
]);
1470 print_ring
[ring_counter
] = xstrdup (lang_decl_name (decl
, v
));
1471 decl_ring
[ring_counter
] = decl
;
1472 return print_ring
[ring_counter
];
1475 /* Build the FUNCTION_TYPE or METHOD_TYPE which may throw exceptions
1476 listed in RAISES. */
1479 build_exception_variant (type
, raises
)
1483 tree v
= TYPE_MAIN_VARIANT (type
);
1484 int type_quals
= TYPE_QUALS (type
);
1486 for (; v
; v
= TYPE_NEXT_VARIANT (v
))
1487 if (TYPE_QUALS (v
) == type_quals
1488 && comp_except_specs (raises
, TYPE_RAISES_EXCEPTIONS (v
), 1))
1491 /* Need to build a new variant. */
1492 v
= build_type_copy (type
);
1493 TYPE_RAISES_EXCEPTIONS (v
) = raises
;
1497 /* Given a TEMPLATE_TEMPLATE_PARM node T, create a new one together with its
1498 lang_specific field and its corresponding TEMPLATE_DECL node */
1501 copy_template_template_parm (t
)
1504 tree
template = TYPE_NAME (t
);
1507 /* Make sure these end up on the permanent_obstack. */
1508 push_permanent_obstack ();
1510 t2
= make_lang_type (TEMPLATE_TEMPLATE_PARM
);
1511 template = copy_node (template);
1512 copy_lang_decl (template);
1516 TREE_TYPE (template) = t2
;
1517 TYPE_NAME (t2
) = template;
1518 TYPE_STUB_DECL (t2
) = template;
1520 /* No need to copy these */
1521 TYPE_FIELDS (t2
) = TYPE_FIELDS (t
);
1522 TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (t2
)
1523 = TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (t
);
1527 /* Walk through the tree structure T, applying func. If func ever returns
1528 non-null, return that value. */
1531 search_tree (tp
, func
)
1533 tree (*func
) PROTO((tree
*));
1535 #define TRY(ARG) if (tmp=search_tree (&ARG, func), tmp != NULL_TREE) return tmp
1539 enum tree_code code
;
1548 /* Handle some common cases up front. */
1549 code
= TREE_CODE (t
);
1550 if (TREE_CODE_CLASS (code
) == '1')
1552 TRY (TREE_OPERAND (t
, 0));
1555 else if (TREE_CODE_CLASS (code
) == '2' || TREE_CODE_CLASS (code
) == '<')
1557 TRY (TREE_OPERAND (t
, 0));
1558 TRY (TREE_OPERAND (t
, 1));
1567 case IDENTIFIER_NODE
:
1574 case NAMESPACE_DECL
:
1578 TRY (TREE_TYPE (t
));
1582 TRY (TREE_TYPE (t
));
1583 TRY (TREE_CHAIN (t
));
1587 TRY (TREE_PURPOSE (t
));
1588 TRY (TREE_VALUE (t
));
1589 TRY (TREE_CHAIN (t
));
1593 TRY (OVL_FUNCTION (t
));
1594 TRY (OVL_CHAIN (t
));
1599 int len
= TREE_VEC_LENGTH (t
);
1603 TRY (TREE_VEC_ELT (t
, len
));
1614 TRY (TREE_TYPE (t
));
1619 case AGGR_INIT_EXPR
:
1621 TRY (TREE_OPERAND (t
, 0));
1622 TRY (TREE_OPERAND (t
, 1));
1623 TRY (TREE_OPERAND (t
, 2));
1626 case TRUTH_AND_EXPR
:
1628 case TRUTH_XOR_EXPR
:
1629 case TRUTH_ANDIF_EXPR
:
1630 case TRUTH_ORIF_EXPR
:
1631 case PREDECREMENT_EXPR
:
1632 case PREINCREMENT_EXPR
:
1633 case POSTDECREMENT_EXPR
:
1634 case POSTINCREMENT_EXPR
:
1637 case TRY_CATCH_EXPR
:
1638 case WITH_CLEANUP_EXPR
:
1644 TRY (TREE_OPERAND (t
, 0));
1645 TRY (TREE_OPERAND (t
, 1));
1651 case TRUTH_NOT_EXPR
:
1653 case CLEANUP_POINT_EXPR
:
1660 TRY (TREE_OPERAND (t
, 0));
1667 case PSEUDO_DTOR_EXPR
:
1671 TRY (TREE_REALPART (t
));
1672 TRY (TREE_IMAGPART (t
));
1676 TRY (CONSTRUCTOR_ELTS (t
));
1679 case TEMPLATE_TEMPLATE_PARM
:
1680 case TEMPLATE_PARM_INDEX
:
1681 case TEMPLATE_TYPE_PARM
:
1699 case REFERENCE_TYPE
:
1700 TRY (TREE_TYPE (t
));
1705 TRY (TREE_TYPE (t
));
1706 TRY (TYPE_ARG_TYPES (t
));
1710 TRY (TREE_TYPE (t
));
1711 TRY (TYPE_DOMAIN (t
));
1715 TRY (TYPE_MAX_VALUE (t
));
1719 TRY (TREE_TYPE (t
));
1720 TRY (TYPE_OFFSET_BASETYPE (t
));
1724 if (TYPE_PTRMEMFUNC_P (t
))
1725 TRY (TYPE_PTRMEMFUNC_FN_TYPE (t
));
1729 my_friendly_abort (19990803);
1737 /* Passed to search_tree. Checks for the use of types with no linkage. */
1740 no_linkage_helper (tp
)
1746 && (IS_AGGR_TYPE (t
) || TREE_CODE (t
) == ENUMERAL_TYPE
)
1747 && (decl_function_context (TYPE_MAIN_DECL (t
))
1748 || ANON_AGGRNAME_P (TYPE_IDENTIFIER (t
))))
1753 /* Check if the type T depends on a type with no linkage and if so, return
1757 no_linkage_check (t
)
1760 /* There's no point in checking linkage on template functions; we
1761 can't know their complete types. */
1762 if (processing_template_decl
)
1765 t
= search_tree (&t
, no_linkage_helper
);
1766 if (t
!= error_mark_node
)
1772 /* Make copies of all the nodes below T. If FUNC is non-NULL, call it
1778 tree (*func
) PROTO((tree
));
1781 enum tree_code code
;
1793 /* Handle some common cases up front. */
1794 code
= TREE_CODE (t
);
1795 if (TREE_CODE_CLASS (code
) == '1')
1798 TREE_TYPE (t
) = mapcar (TREE_TYPE (t
), func
);
1799 TREE_OPERAND (t
, 0) = mapcar (TREE_OPERAND (t
, 0), func
);
1802 else if (TREE_CODE_CLASS (code
) == '2' || TREE_CODE_CLASS (code
) == '<')
1805 TREE_TYPE (t
) = mapcar (TREE_TYPE (t
), func
);
1806 TREE_OPERAND (t
, 0) = mapcar (TREE_OPERAND (t
, 0), func
);
1807 TREE_OPERAND (t
, 1) = mapcar (TREE_OPERAND (t
, 1), func
);
1811 switch (TREE_CODE (t
))
1814 return error_mark_node
;
1819 /* Rather than aborting, return error_mark_node. This allows us
1820 to report a sensible error message on code like this:
1822 void g() { int i; f<i>(7); }
1826 void g() { const int i = 7; f<i>(7); }
1828 however, we must actually return the constant initializer. */
1829 if (TREE_READONLY_DECL_P (t
))
1831 tmp
= decl_constant_value (t
);
1833 return mapcar (tmp
, func
);
1835 return error_mark_node
;
1839 tree chain
= TREE_CHAIN (t
);
1841 TREE_CHAIN (t
) = mapcar (chain
, func
);
1842 TREE_TYPE (t
) = mapcar (TREE_TYPE (t
), func
);
1843 DECL_INITIAL (t
) = mapcar (DECL_INITIAL (t
), func
);
1844 DECL_SIZE (t
) = mapcar (DECL_SIZE (t
), func
);
1850 tree chain
= TREE_CHAIN (t
);
1852 TREE_PURPOSE (t
) = mapcar (TREE_PURPOSE (t
), func
);
1853 TREE_VALUE (t
) = mapcar (TREE_VALUE (t
), func
);
1854 TREE_CHAIN (t
) = mapcar (chain
, func
);
1860 tree chain
= OVL_CHAIN (t
);
1862 OVL_FUNCTION (t
) = mapcar (OVL_FUNCTION (t
), func
);
1863 OVL_CHAIN (t
) = mapcar (chain
, func
);
1869 int len
= TREE_VEC_LENGTH (t
);
1873 TREE_VEC_ELT (t
, len
) = mapcar (TREE_VEC_ELT (t
, len
), func
);
1880 return copy_node (t
);
1884 TREE_TYPE (t
) = mapcar (TREE_TYPE (t
), func
);
1885 PTRMEM_CST_MEMBER (t
) = mapcar (PTRMEM_CST_MEMBER (t
), func
);
1890 case AGGR_INIT_EXPR
:
1892 TREE_OPERAND (t
, 0) = mapcar (TREE_OPERAND (t
, 0), func
);
1893 TREE_OPERAND (t
, 1) = mapcar (TREE_OPERAND (t
, 1), func
);
1894 TREE_OPERAND (t
, 2) = mapcar (TREE_OPERAND (t
, 2), func
);
1897 case TRUTH_AND_EXPR
:
1899 case TRUTH_XOR_EXPR
:
1900 case TRUTH_ANDIF_EXPR
:
1901 case TRUTH_ORIF_EXPR
:
1902 case PREDECREMENT_EXPR
:
1903 case PREINCREMENT_EXPR
:
1904 case POSTDECREMENT_EXPR
:
1905 case POSTINCREMENT_EXPR
:
1908 case TRY_CATCH_EXPR
:
1909 case WITH_CLEANUP_EXPR
:
1915 TREE_OPERAND (t
, 0) = mapcar (TREE_OPERAND (t
, 0), func
);
1916 TREE_OPERAND (t
, 1) = mapcar (TREE_OPERAND (t
, 1), func
);
1921 TREE_TYPE (t
) = mapcar (TREE_TYPE (t
), func
);
1922 TREE_OPERAND (t
, 0) = mapcar (TREE_OPERAND (t
, 0), func
);
1923 TREE_OPERAND (t
, 1) = mapcar (TREE_OPERAND (t
, 1), func
);
1924 TREE_OPERAND (t
, 2) = NULL_TREE
;
1930 case TRUTH_NOT_EXPR
:
1932 case CLEANUP_POINT_EXPR
:
1937 TREE_TYPE (t
) = mapcar (TREE_TYPE (t
), func
);
1938 TREE_OPERAND (t
, 0) = mapcar (TREE_OPERAND (t
, 0), func
);
1942 tmp
= build_pointer_type (mapcar (TREE_TYPE (t
), func
));
1943 return cp_build_qualified_type (tmp
, TYPE_QUALS (t
));
1944 case REFERENCE_TYPE
:
1945 tmp
= build_reference_type (mapcar (TREE_TYPE (t
), func
));
1946 return cp_build_qualified_type (tmp
, TYPE_QUALS (t
));
1948 tmp
= build_function_type (mapcar (TREE_TYPE (t
), func
),
1949 mapcar (TYPE_ARG_TYPES (t
), func
));
1950 return cp_build_qualified_type (tmp
, TYPE_QUALS (t
));
1952 tmp
= build_cplus_array_type (mapcar (TREE_TYPE (t
), func
),
1953 mapcar (TYPE_DOMAIN (t
), func
));
1954 return cp_build_qualified_type (tmp
, CP_TYPE_QUALS (t
));
1956 tmp
= build_index_type (mapcar (TYPE_MAX_VALUE (t
), func
));
1957 return cp_build_qualified_type (tmp
, TYPE_QUALS (t
));
1959 tmp
= build_offset_type (mapcar (TYPE_OFFSET_BASETYPE (t
), func
),
1960 mapcar (TREE_TYPE (t
), func
));
1961 return cp_build_qualified_type (tmp
, TYPE_QUALS (t
));
1963 tmp
= build_cplus_method_type
1964 (mapcar (TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (t
))), func
),
1965 mapcar (TREE_TYPE (t
), func
),
1966 mapcar (TREE_CHAIN (TYPE_ARG_TYPES (t
)), func
));
1967 return cp_build_qualified_type (tmp
, TYPE_QUALS (t
));
1971 TREE_REALPART (t
) = mapcar (TREE_REALPART (t
), func
);
1972 TREE_IMAGPART (t
) = mapcar (TREE_REALPART (t
), func
);
1977 CONSTRUCTOR_ELTS (t
) = mapcar (CONSTRUCTOR_ELTS (t
), func
);
1980 case TEMPLATE_TEMPLATE_PARM
:
1981 return copy_template_template_parm (t
);
1985 TREE_OPERAND (t
, 0) = mapcar (TREE_OPERAND (t
, 0), func
);
1986 TREE_OPERAND (t
, 1) = mapcar (TREE_OPERAND (t
, 1), func
);
1987 TREE_OPERAND (t
, 2) = NULL_TREE
;
1992 TREE_OPERAND (t
, 0) = mapcar (TREE_OPERAND (t
, 0), func
);
1993 TREE_OPERAND (t
, 1) = mapcar (TREE_OPERAND (t
, 1), func
);
1994 TREE_OPERAND (t
, 2) = mapcar (TREE_OPERAND (t
, 2), func
);
1999 TREE_TYPE (t
) = mapcar (TREE_TYPE (t
), func
);
2000 TREE_OPERAND (t
, 0) = mapcar (TREE_OPERAND (t
, 0), func
);
2001 TREE_OPERAND (t
, 1) = mapcar (TREE_OPERAND (t
, 1), func
);
2002 TREE_OPERAND (t
, 2) = mapcar (TREE_OPERAND (t
, 2), func
);
2009 TREE_OPERAND (t
, 0) = mapcar (TREE_OPERAND (t
, 0), func
);
2014 TREE_TYPE (t
) = mapcar (TREE_TYPE (t
), func
);
2018 if (TYPE_PTRMEMFUNC_P (t
))
2019 return build_ptrmemfunc_type
2020 (mapcar (TYPE_PTRMEMFUNC_FN_TYPE (t
), func
));
2021 /* else fall through */
2024 my_friendly_abort (19990815);
2026 my_friendly_abort (107);
2031 #ifdef GATHER_STATISTICS
2032 extern int depth_reached
;
2036 print_lang_statistics ()
2038 print_search_statistics ();
2039 print_class_statistics ();
2040 #ifdef GATHER_STATISTICS
2041 fprintf (stderr
, "maximum template instantiation depth reached: %d\n",
2046 /* This is used by the `assert' macro. It is provided in libgcc.a,
2047 which `cc' doesn't know how to link. Note that the C++ front-end
2048 no longer actually uses the `assert' macro (instead, it calls
2049 my_friendly_assert). But all of the back-end files still need this. */
2052 __eprintf (string
, expression
, line
, filename
)
2054 const char *expression
;
2056 const char *filename
;
2058 fprintf (stderr
, string
, expression
, line
, filename
);
2063 /* Return, as an INTEGER_CST node, the number of elements for TYPE
2064 (which is an ARRAY_TYPE). This counts only elements of the top
2068 array_type_nelts_top (type
)
2071 return fold (build (PLUS_EXPR
, sizetype
,
2072 array_type_nelts (type
),
2076 /* Return, as an INTEGER_CST node, the number of elements for TYPE
2077 (which is an ARRAY_TYPE). This one is a recursive count of all
2078 ARRAY_TYPEs that are clumped together. */
2081 array_type_nelts_total (type
)
2084 tree sz
= array_type_nelts_top (type
);
2085 type
= TREE_TYPE (type
);
2086 while (TREE_CODE (type
) == ARRAY_TYPE
)
2088 tree n
= array_type_nelts_top (type
);
2089 sz
= fold (build (MULT_EXPR
, sizetype
, sz
, n
));
2090 type
= TREE_TYPE (type
);
2095 /* When we parse a default argument expression, we may create
2096 temporary variables via TARGET_EXPRs. When we actually use the
2097 default-argument expression, we make a copy of the expression, but
2098 we must relpace the temporaries with appropriate local versions. */
2100 /* A map from VAR_DECLs declared in TARGET_EXPRs in a default argument
2101 to corresponding "instantiations" of those variables. */
2102 static splay_tree target_remap
;
2103 static int target_remap_count
;
2105 /* Called from break_out_target_exprs via mapcar. */
2111 if (TREE_CODE (t
) != TREE_LIST
&& ! TREE_SIDE_EFFECTS (t
))
2113 else if (TREE_CODE (t
) == TARGET_EXPR
)
2117 if (TREE_CODE (TREE_OPERAND (t
, 1)) == AGGR_INIT_EXPR
)
2119 mark_used (TREE_OPERAND (TREE_OPERAND (TREE_OPERAND (t
, 1), 0), 0));
2121 (TREE_TYPE (t
), break_out_target_exprs (TREE_OPERAND (t
, 1)));
2126 TREE_OPERAND (u
, 0) = build (VAR_DECL
, TREE_TYPE (t
));
2127 layout_decl (TREE_OPERAND (u
, 0), 0);
2130 /* Map the old variable to the new one. */
2131 splay_tree_insert (target_remap
,
2132 (splay_tree_key
) TREE_OPERAND (t
, 0),
2133 (splay_tree_value
) TREE_OPERAND (u
, 0));
2136 else if (TREE_CODE (t
) == CALL_EXPR
)
2137 mark_used (TREE_OPERAND (TREE_OPERAND (t
, 0), 0));
2142 /* Replace all remapped VAR_DECLs in T with their new equivalents. */
2148 if (TREE_CODE (*t
) == VAR_DECL
)
2150 splay_tree_node n
= splay_tree_lookup (target_remap
,
2151 (splay_tree_key
) *t
);
2153 *t
= (tree
) n
->value
;
2159 /* Actually, we'll just clean out the target exprs for the moment. */
2162 break_out_target_exprs (t
)
2165 if (!target_remap_count
++)
2166 target_remap
= splay_tree_new (splay_tree_compare_pointers
,
2167 /*splay_tree_delete_key_fn=*/NULL
,
2168 /*splay_tree_delete_value_fn=*/NULL
);
2169 t
= mapcar (t
, bot_manip
);
2170 search_tree (&t
, bot_replace
);
2172 if (!--target_remap_count
)
2174 splay_tree_delete (target_remap
);
2175 target_remap
= NULL
;
2181 /* Obstack used for allocating nodes in template function and variable
2184 /* Similar to `build_nt', except we build
2185 on the permanent_obstack, regardless. */
2188 build_min_nt
VPROTO((enum tree_code code
, ...))
2190 #ifndef ANSI_PROTOTYPES
2191 enum tree_code code
;
2193 register struct obstack
*ambient_obstack
= expression_obstack
;
2196 register int length
;
2201 #ifndef ANSI_PROTOTYPES
2202 code
= va_arg (p
, enum tree_code
);
2205 expression_obstack
= &permanent_obstack
;
2207 t
= make_node (code
);
2208 length
= tree_code_length
[(int) code
];
2209 TREE_COMPLEXITY (t
) = lineno
;
2211 for (i
= 0; i
< length
; i
++)
2213 tree x
= va_arg (p
, tree
);
2214 TREE_OPERAND (t
, i
) = x
;
2218 expression_obstack
= ambient_obstack
;
2222 /* Similar to `build', except we build
2223 on the permanent_obstack, regardless. */
2226 build_min
VPROTO((enum tree_code code
, tree tt
, ...))
2228 #ifndef ANSI_PROTOTYPES
2229 enum tree_code code
;
2232 register struct obstack
*ambient_obstack
= expression_obstack
;
2235 register int length
;
2240 #ifndef ANSI_PROTOTYPES
2241 code
= va_arg (p
, enum tree_code
);
2242 tt
= va_arg (p
, tree
);
2245 expression_obstack
= &permanent_obstack
;
2247 t
= make_node (code
);
2248 length
= tree_code_length
[(int) code
];
2250 TREE_COMPLEXITY (t
) = lineno
;
2252 for (i
= 0; i
< length
; i
++)
2254 tree x
= va_arg (p
, tree
);
2255 TREE_OPERAND (t
, i
) = x
;
2259 expression_obstack
= ambient_obstack
;
2263 /* Same as `tree_cons' but make a permanent object. */
2266 min_tree_cons (purpose
, value
, chain
)
2267 tree purpose
, value
, chain
;
2270 register struct obstack
*ambient_obstack
= current_obstack
;
2271 current_obstack
= &permanent_obstack
;
2273 node
= tree_cons (purpose
, value
, chain
);
2275 current_obstack
= ambient_obstack
;
2283 if (TREE_CODE (t
) == TYPE_DECL
)
2285 if (TREE_CODE_CLASS (TREE_CODE (t
)) == 't')
2286 return TYPE_STUB_DECL (t
);
2288 my_friendly_abort (42);
2290 /* Stop compiler from complaining control reaches end of non-void function. */
2295 can_free (obstack
, t
)
2296 struct obstack
*obstack
;
2301 if (TREE_CODE (t
) == TREE_VEC
)
2302 size
= (TREE_VEC_LENGTH (t
)-1) * sizeof (tree
) + sizeof (struct tree_vec
);
2304 my_friendly_abort (42);
2306 #define ROUND(x) ((x + obstack_alignment_mask (obstack)) \
2307 & ~ obstack_alignment_mask (obstack))
2308 if ((char *)t
+ ROUND (size
) == obstack_next_free (obstack
))
2315 /* Return first vector element whose BINFO_TYPE is ELEM.
2316 Return 0 if ELEM is not in VEC. VEC may be NULL_TREE. */
2319 vec_binfo_member (elem
, vec
)
2325 for (i
= 0; i
< TREE_VEC_LENGTH (vec
); ++i
)
2326 if (same_type_p (elem
, BINFO_TYPE (TREE_VEC_ELT (vec
, i
))))
2327 return TREE_VEC_ELT (vec
, i
);
2332 /* Kludge around the fact that DECL_CONTEXT for virtual functions returns
2333 the wrong thing for decl_function_context. Hopefully the uses in the
2334 backend won't matter, since we don't need a static chain for local class
2338 hack_decl_function_context (decl
)
2341 if (TREE_CODE (decl
) == FUNCTION_DECL
&& DECL_FUNCTION_MEMBER_P (decl
))
2342 return decl_function_context (TYPE_MAIN_DECL (DECL_CLASS_CONTEXT (decl
)));
2343 return decl_function_context (decl
);
2346 /* Returns the namespace that contains DECL, whether directly or
2350 decl_namespace_context (decl
)
2355 if (TREE_CODE (decl
) == NAMESPACE_DECL
)
2357 else if (TYPE_P (decl
))
2358 decl
= CP_DECL_CONTEXT (TYPE_MAIN_DECL (decl
));
2360 decl
= CP_DECL_CONTEXT (decl
);
2364 /* Return truthvalue of whether T1 is the same tree structure as T2.
2365 Return 1 if they are the same.
2366 Return 0 if they are understandably different.
2367 Return -1 if either contains tree structure not understood by
2371 cp_tree_equal (t1
, t2
)
2374 register enum tree_code code1
, code2
;
2379 if (t1
== 0 || t2
== 0)
2382 code1
= TREE_CODE (t1
);
2383 code2
= TREE_CODE (t2
);
2385 if (code1
== NOP_EXPR
|| code1
== CONVERT_EXPR
|| code1
== NON_LVALUE_EXPR
)
2387 if (code2
== NOP_EXPR
|| code2
== CONVERT_EXPR
|| code2
== NON_LVALUE_EXPR
)
2388 return cp_tree_equal (TREE_OPERAND (t1
, 0), TREE_OPERAND (t2
, 0));
2390 return cp_tree_equal (TREE_OPERAND (t1
, 0), t2
);
2392 else if (code2
== NOP_EXPR
|| code2
== CONVERT_EXPR
2393 || code2
== NON_LVALUE_EXPR
)
2394 return cp_tree_equal (t1
, TREE_OPERAND (t2
, 0));
2402 return TREE_INT_CST_LOW (t1
) == TREE_INT_CST_LOW (t2
)
2403 && TREE_INT_CST_HIGH (t1
) == TREE_INT_CST_HIGH (t2
);
2406 return REAL_VALUES_EQUAL (TREE_REAL_CST (t1
), TREE_REAL_CST (t2
));
2409 return TREE_STRING_LENGTH (t1
) == TREE_STRING_LENGTH (t2
)
2410 && !bcmp (TREE_STRING_POINTER (t1
), TREE_STRING_POINTER (t2
),
2411 TREE_STRING_LENGTH (t1
));
2414 /* We need to do this when determining whether or not two
2415 non-type pointer to member function template arguments
2417 if (!(same_type_p (TREE_TYPE (t1
), TREE_TYPE (t2
))
2418 /* The first operand is RTL. */
2419 && TREE_OPERAND (t1
, 0) == TREE_OPERAND (t2
, 0)))
2421 return cp_tree_equal (TREE_OPERAND (t1
, 1), TREE_OPERAND (t2
, 1));
2424 cmp
= cp_tree_equal (TREE_PURPOSE (t1
), TREE_PURPOSE (t2
));
2427 cmp
= cp_tree_equal (TREE_VALUE (t1
), TREE_VALUE (t2
));
2430 return cp_tree_equal (TREE_CHAIN (t1
), TREE_CHAIN (t2
));
2433 return cp_tree_equal (TREE_OPERAND (t1
, 0), TREE_OPERAND (t2
, 0));
2436 cmp
= cp_tree_equal (TREE_OPERAND (t1
, 0), TREE_OPERAND (t2
, 0));
2439 return simple_cst_list_equal (TREE_OPERAND (t1
, 1), TREE_OPERAND (t2
, 1));
2442 /* Special case: if either target is an unallocated VAR_DECL,
2443 it means that it's going to be unified with whatever the
2444 TARGET_EXPR is really supposed to initialize, so treat it
2445 as being equivalent to anything. */
2446 if ((TREE_CODE (TREE_OPERAND (t1
, 0)) == VAR_DECL
2447 && DECL_NAME (TREE_OPERAND (t1
, 0)) == NULL_TREE
2448 && DECL_RTL (TREE_OPERAND (t1
, 0)) == 0)
2449 || (TREE_CODE (TREE_OPERAND (t2
, 0)) == VAR_DECL
2450 && DECL_NAME (TREE_OPERAND (t2
, 0)) == NULL_TREE
2451 && DECL_RTL (TREE_OPERAND (t2
, 0)) == 0))
2454 cmp
= cp_tree_equal (TREE_OPERAND (t1
, 0), TREE_OPERAND (t2
, 0));
2457 return cp_tree_equal (TREE_OPERAND (t1
, 1), TREE_OPERAND (t2
, 1));
2459 case WITH_CLEANUP_EXPR
:
2460 cmp
= cp_tree_equal (TREE_OPERAND (t1
, 0), TREE_OPERAND (t2
, 0));
2463 return cp_tree_equal (TREE_OPERAND (t1
, 2), TREE_OPERAND (t1
, 2));
2466 if (TREE_OPERAND (t1
, 1) == TREE_OPERAND (t2
, 1))
2467 return cp_tree_equal (TREE_OPERAND (t1
, 0), TREE_OPERAND (t2
, 0));
2476 case TEMPLATE_PARM_INDEX
:
2477 return TEMPLATE_PARM_IDX (t1
) == TEMPLATE_PARM_IDX (t2
)
2478 && TEMPLATE_PARM_LEVEL (t1
) == TEMPLATE_PARM_LEVEL (t2
);
2482 if (TREE_CODE (TREE_OPERAND (t1
, 0)) != TREE_CODE (TREE_OPERAND (t2
, 0)))
2484 if (TREE_CODE_CLASS (TREE_CODE (TREE_OPERAND (t1
, 0))) == 't')
2485 return same_type_p (TREE_OPERAND (t1
, 0), TREE_OPERAND (t2
, 0));
2489 /* Two pointer-to-members are the same if they point to the same
2490 field or function in the same class. */
2491 return (PTRMEM_CST_MEMBER (t1
) == PTRMEM_CST_MEMBER (t2
)
2492 && same_type_p (PTRMEM_CST_CLASS (t1
), PTRMEM_CST_CLASS (t2
)));
2498 switch (TREE_CODE_CLASS (code1
))
2508 for (i
=0; i
<tree_code_length
[(int) code1
]; ++i
)
2510 cmp
= cp_tree_equal (TREE_OPERAND (t1
, i
), TREE_OPERAND (t2
, i
));
2520 /* Similar to make_tree_vec, but build on the momentary_obstack.
2521 Thus, these vectors are really and truly temporary. */
2528 push_expression_obstack ();
2529 node
= make_tree_vec (len
);
2534 /* Build a wrapper around some pointer PTR so we can use it as a tree. */
2537 build_ptr_wrapper (ptr
)
2540 tree t
= make_node (WRAPPER
);
2541 WRAPPER_PTR (t
) = ptr
;
2545 /* Same, but on the expression_obstack. */
2548 build_expr_ptr_wrapper (ptr
)
2552 push_expression_obstack ();
2553 t
= build_ptr_wrapper (ptr
);
2558 /* Build a wrapper around some integer I so we can use it as a tree. */
2561 build_int_wrapper (i
)
2564 tree t
= make_node (WRAPPER
);
2565 WRAPPER_INT (t
) = i
;
2570 build_srcloc (file
, line
)
2576 t
= make_node (SRCLOC
);
2577 SRCLOC_FILE (t
) = file
;
2578 SRCLOC_LINE (t
) = line
;
2584 build_srcloc_here ()
2586 return build_srcloc (input_filename
, lineno
);
2590 push_expression_obstack ()
2592 push_obstacks_nochange ();
2593 current_obstack
= expression_obstack
;
2596 /* Begin allocating on the permanent obstack. When you're done
2597 allocating there, call pop_obstacks to return to the previous set
2601 push_permanent_obstack ()
2603 push_obstacks_nochange ();
2604 end_temporary_allocation ();
2607 /* The type of ARG when used as an lvalue. */
2613 tree type
= TREE_TYPE (arg
);
2614 if (TREE_CODE (arg
) == OVERLOAD
)
2615 type
= unknown_type_node
;
2619 /* The type of ARG for printing error messages; denote lvalues with
2626 tree type
= TREE_TYPE (arg
);
2627 if (TREE_CODE (type
) == ARRAY_TYPE
)
2629 else if (real_lvalue_p (arg
))
2630 type
= build_reference_type (lvalue_type (arg
));
2631 else if (IS_AGGR_TYPE (type
))
2632 type
= lvalue_type (arg
);
2637 /* Does FUNCTION use a variable-length argument list? */
2640 varargs_function_p (function
)
2643 tree parm
= TYPE_ARG_TYPES (TREE_TYPE (function
));
2644 for (; parm
; parm
= TREE_CHAIN (parm
))
2645 if (TREE_VALUE (parm
) == void_type_node
)
2650 /* Returns 1 if decl is a member of a class. */
2656 tree ctx
= DECL_CONTEXT (decl
);
2657 return (ctx
&& TREE_CODE_CLASS (TREE_CODE (ctx
)) == 't');
2660 /* Create a placeholder for member access where we don't actually have an
2661 object that the access is against. */
2664 build_dummy_object (type
)
2667 tree decl
= build1 (NOP_EXPR
, build_pointer_type (type
), void_zero_node
);
2668 return build_indirect_ref (decl
, NULL_PTR
);
2671 /* We've gotten a reference to a member of TYPE. Return *this if appropriate,
2672 or a dummy object otherwise. If BINFOP is non-0, it is filled with the
2673 binfo path from current_class_type to TYPE, or 0. */
2676 maybe_dummy_object (type
, binfop
)
2682 if (current_class_type
2683 && get_base_distance (type
, current_class_type
, 0, binfop
) != -1)
2684 context
= current_class_type
;
2687 /* Reference from a nested class member function. */
2690 *binfop
= TYPE_BINFO (type
);
2693 if (current_class_ref
&& context
== current_class_type
)
2694 decl
= current_class_ref
;
2696 decl
= build_dummy_object (context
);
2701 /* Returns 1 if OB is a placeholder object, or a pointer to one. */
2704 is_dummy_object (ob
)
2707 if (TREE_CODE (ob
) == INDIRECT_REF
)
2708 ob
= TREE_OPERAND (ob
, 0);
2709 return (TREE_CODE (ob
) == NOP_EXPR
2710 && TREE_OPERAND (ob
, 0) == void_zero_node
);
2713 /* Returns 1 iff type T is a POD type, as defined in [basic.types]. */
2719 while (TREE_CODE (t
) == ARRAY_TYPE
)
2722 if (INTEGRAL_TYPE_P (t
))
2723 return 1; /* integral, character or enumeral type */
2724 if (FLOAT_TYPE_P (t
))
2727 return 1; /* pointer to non-member */
2728 if (TYPE_PTRMEM_P (t
))
2729 return 1; /* pointer to member object */
2730 if (TYPE_PTRMEMFUNC_P (t
))
2731 return 1; /* pointer to member function */
2733 if (! CLASS_TYPE_P (t
))
2734 return 0; /* other non-class type (reference or function) */
2735 if (CLASSTYPE_NON_POD_P (t
))
2740 /* Return a 1 if ATTR_NAME and ATTR_ARGS denote a valid C++-specific
2741 attribute for either declaration DECL or type TYPE and 0 otherwise.
2742 Plugged into valid_lang_attribute. */
2745 cp_valid_lang_attribute (attr_name
, attr_args
, decl
, type
)
2747 tree attr_args ATTRIBUTE_UNUSED
;
2748 tree decl ATTRIBUTE_UNUSED
;
2749 tree type ATTRIBUTE_UNUSED
;
2751 if (is_attribute_p ("com_interface", attr_name
))
2753 if (! flag_vtable_thunks
)
2755 error ("`com_interface' only supported with -fvtable-thunks");
2759 if (attr_args
!= NULL_TREE
2760 || decl
!= NULL_TREE
2761 || ! CLASS_TYPE_P (type
)
2762 || type
!= TYPE_MAIN_VARIANT (type
))
2764 warning ("`com_interface' attribute can only be applied to class definitions");
2768 CLASSTYPE_COM_INTERFACE (type
) = 1;
2771 else if (is_attribute_p ("init_priority", attr_name
))
2773 tree initp_expr
= (attr_args
? TREE_VALUE (attr_args
): NULL_TREE
);
2777 STRIP_NOPS (initp_expr
);
2779 if (!initp_expr
|| TREE_CODE (initp_expr
) != INTEGER_CST
)
2781 error ("requested init_priority is not an integer constant");
2785 pri
= TREE_INT_CST_LOW (initp_expr
);
2787 while (TREE_CODE (type
) == ARRAY_TYPE
)
2788 type
= TREE_TYPE (type
);
2790 if (decl
== NULL_TREE
2791 || TREE_CODE (decl
) != VAR_DECL
2792 || ! TREE_STATIC (decl
)
2793 || DECL_EXTERNAL (decl
)
2794 || (TREE_CODE (type
) != RECORD_TYPE
2795 && TREE_CODE (type
) != UNION_TYPE
)
2796 /* Static objects in functions are initialized the
2797 first time control passes through that
2798 function. This is not precise enough to pin down an
2799 init_priority value, so don't allow it. */
2800 || current_function_decl
)
2802 error ("can only use init_priority attribute on file-scope definitions of objects of class type");
2806 if (pri
> MAX_INIT_PRIORITY
|| pri
<= 0)
2808 error ("requested init_priority is out of range");
2812 /* Check for init_priorities that are reserved for
2813 language and runtime support implementations.*/
2814 if (pri
<= MAX_RESERVED_INIT_PRIORITY
)
2817 ("requested init_priority is reserved for internal use");
2820 DECL_INIT_PRIORITY (decl
) = pri
;
2827 /* Return a new PTRMEM_CST of the indicated TYPE. The MEMBER is the
2828 thing pointed to by the constant. */
2831 make_ptrmem_cst (type
, member
)
2835 tree ptrmem_cst
= make_node (PTRMEM_CST
);
2836 /* If would seem a great convenience if make_node would set
2837 TREE_CONSTANT for things of class `c', but it does not. */
2838 TREE_CONSTANT (ptrmem_cst
) = 1;
2839 TREE_TYPE (ptrmem_cst
) = type
;
2840 PTRMEM_CST_MEMBER (ptrmem_cst
) = member
;
2844 /* Mark ARG (which is really a list_hash_table **) for GC. */
2847 mark_list_hash (arg
)
2850 struct list_hash
*lh
;
2852 for (lh
= * ((struct list_hash
**) arg
); lh
; lh
= lh
->next
)
2853 ggc_mark_tree (lh
->list
);
2856 /* Initialize tree.c. */
2861 make_lang_type_fn
= cp_make_lang_type
;
2862 lang_unsave_expr_now
= cplus_unsave_expr_now
;
2863 ggc_add_root (list_hash_table
,
2864 sizeof (list_hash_table
) / sizeof (struct list_hash
*),
2865 sizeof (struct list_hash
*),
2869 /* The C++ version of unsave_expr_now.
2870 See gcc/tree.c:unsave_expr_now for comments. */
2873 cplus_unsave_expr_now (expr
)
2879 else if (TREE_CODE (expr
) == AGGR_INIT_EXPR
)
2881 unsave_expr_now (TREE_OPERAND (expr
,0));
2882 if (TREE_OPERAND (expr
, 1)
2883 && TREE_CODE (TREE_OPERAND (expr
, 1)) == TREE_LIST
)
2885 tree exp
= TREE_OPERAND (expr
, 1);
2888 unsave_expr_now (TREE_VALUE (exp
));
2889 exp
= TREE_CHAIN (exp
);
2892 unsave_expr_now (TREE_OPERAND (expr
,2));