aboutsummaryrefslogtreecommitdiff
path: root/gcc/cp
diff options
context:
space:
mode:
authorMark Mitchell <mark@codesourcery.com>2000-01-17 20:18:43 +0000
committerMark Mitchell <mmitchel@gcc.gnu.org>2000-01-17 20:18:43 +0000
commit051e6fd745109c9de4d707ccd949722904a74987 (patch)
tree2fdd9d6f9a01df98507c3bc1b73c1ec015341f25 /gcc/cp
parent7af85558553980230b15cc7df9288ed0718af73c (diff)
downloadgcc-051e6fd745109c9de4d707ccd949722904a74987.zip
gcc-051e6fd745109c9de4d707ccd949722904a74987.tar.gz
gcc-051e6fd745109c9de4d707ccd949722904a74987.tar.bz2
cp-tree.h (scratchalloc): Remove.
* cp-tree.h (scratchalloc): Remove. (build_scratch_list): Likewise. * call.c (convert_class_to_reference): Replace build_scratch_list and build_expr_list with build_tree_list. (add_candidate): Replace scratchalloc with expralloc. Note memory leak. (build_user_type_conversion_1): Replace build_scratch_list and build_expr_list with build_tree_list. (build_new_op): Likewise. (build_op_delete_call): Likewise. (convert_like): Likewise. * cvt.c (ocp_convert): Likewise. * decl.c (start_decl): Likewise. (start_function): Likewise. (finish_destructor_body): Likewise. (maybe_build_cleanup_1): Likewise. * decl2.c (reparse_decl_as_expr): Likewise. * init.c (perform_member_init): Likewise. (expand_cleanup_for_base): Likewise. (build_builtin_delete_call): Likewise. (build_new_1): Likewise. (build_delete): Likewise. * method.c (do_build_assign_ref): Likewise. * parse.y (already_scoped_stmt): Likewise. (nontrivial_exprlist): Likewise. (net_initializer): Likewise. (initlist): Likewise. * parse.c: Regenerated. * rtti.c (build_x_typeid): Likewise. (build_dynamic_cast_1): Likewise. * typeck.c (build_x_compound_expr): Likewise. (build_static_cast): Likewise. (build_modify_expr): Likewise. * cp-tree.h (DECL_VINDEX): Add documentation. * class.c (build_vtable_entry): Likewise. (start_vtable): Add comment. (add_virtual_function): Replace pending_hard_virtuals with overridden_virtuals and pending_virtuals with new_virtuals. Replace redundant assignments with assertions. (check_for_override): Add comment. (check_bases_and_members): Replace pending_hard_virtuals with overridden_virtuals and pending_virtuals with new_virtuals. (create_vtbl_ptr): Likewise. (layout_class_type): Likewise. (finish_struct_1): Likewise. Add comments. From-SVN: r31473
Diffstat (limited to 'gcc/cp')
-rw-r--r--gcc/cp/ChangeLog49
-rw-r--r--gcc/cp/call.c22
-rw-r--r--gcc/cp/class.c130
-rw-r--r--gcc/cp/cp-tree.h24
-rw-r--r--gcc/cp/cvt.c2
-rw-r--r--gcc/cp/decl.c8
-rw-r--r--gcc/cp/decl2.c2
-rw-r--r--gcc/cp/init.c26
-rw-r--r--gcc/cp/method.c2
-rw-r--r--gcc/cp/parse.c16
-rw-r--r--gcc/cp/parse.y16
-rw-r--r--gcc/cp/rtti.c4
-rw-r--r--gcc/cp/typeck.c8
13 files changed, 188 insertions, 121 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index ae00eaf..04ee628 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,52 @@
+2000-01-17 Mark Mitchell <mark@codesourcery.com>
+
+ * cp-tree.h (scratchalloc): Remove.
+ (build_scratch_list): Likewise.
+ * call.c (convert_class_to_reference): Replace build_scratch_list
+ and build_expr_list with build_tree_list.
+ (add_candidate): Replace scratchalloc with expralloc. Note memory
+ leak.
+ (build_user_type_conversion_1): Replace build_scratch_list
+ and build_expr_list with build_tree_list.
+ (build_new_op): Likewise.
+ (build_op_delete_call): Likewise.
+ (convert_like): Likewise.
+ * cvt.c (ocp_convert): Likewise.
+ * decl.c (start_decl): Likewise.
+ (start_function): Likewise.
+ (finish_destructor_body): Likewise.
+ (maybe_build_cleanup_1): Likewise.
+ * decl2.c (reparse_decl_as_expr): Likewise.
+ * init.c (perform_member_init): Likewise.
+ (expand_cleanup_for_base): Likewise.
+ (build_builtin_delete_call): Likewise.
+ (build_new_1): Likewise.
+ (build_delete): Likewise.
+ * method.c (do_build_assign_ref): Likewise.
+ * parse.y (already_scoped_stmt): Likewise.
+ (nontrivial_exprlist): Likewise.
+ (net_initializer): Likewise.
+ (initlist): Likewise.
+ * parse.c: Regenerated.
+ * rtti.c (build_x_typeid): Likewise.
+ (build_dynamic_cast_1): Likewise.
+ * typeck.c (build_x_compound_expr): Likewise.
+ (build_static_cast): Likewise.
+ (build_modify_expr): Likewise.
+
+ * cp-tree.h (DECL_VINDEX): Add documentation.
+ * class.c (build_vtable_entry): Likewise.
+ (start_vtable): Add comment.
+ (add_virtual_function): Replace pending_hard_virtuals with
+ overridden_virtuals and pending_virtuals with new_virtuals.
+ Replace redundant assignments with assertions.
+ (check_for_override): Add comment.
+ (check_bases_and_members): Replace pending_hard_virtuals with
+ overridden_virtuals and pending_virtuals with new_virtuals.
+ (create_vtbl_ptr): Likewise.
+ (layout_class_type): Likewise.
+ (finish_struct_1): Likewise. Add comments.
+
2000-01-16 Mark Mitchell <mark@codesourcery.com>
* class.c (finish_struct_1): Replace redundant code with
diff --git a/gcc/cp/call.c b/gcc/cp/call.c
index e589f9f..7114d02 100644
--- a/gcc/cp/call.c
+++ b/gcc/cp/call.c
@@ -869,7 +869,7 @@ convert_class_to_reference (t, s, expr)
cast to the appropriate type. */
arglist = build_int_2 (0, 0);
TREE_TYPE (arglist) = build_pointer_type (s);
- arglist = build_scratch_list (NULL_TREE, arglist);
+ arglist = build_tree_list (NULL_TREE, arglist);
for (conversions = lookup_conversions (s);
conversions;
@@ -1214,8 +1214,10 @@ add_candidate (candidates, fn, convs, viable)
tree fn, convs;
int viable;
{
+ /* FIXME: This is a memory leak. Presumably, we should use
+ ggc_alloc instead. */
struct z_candidate *cand
- = (struct z_candidate *) scratchalloc (sizeof (struct z_candidate));
+ = (struct z_candidate *) expralloc (sizeof (struct z_candidate));
cand->fn = fn;
cand->convs = convs;
@@ -2269,7 +2271,7 @@ build_user_type_conversion_1 (totype, expr, flags)
{
tree t = build_int_2 (0, 0);
TREE_TYPE (t) = build_pointer_type (totype);
- args = build_scratch_list (NULL_TREE, expr);
+ args = build_tree_list (NULL_TREE, expr);
if (TYPE_USES_VIRTUAL_BASECLASSES (totype))
args = tree_cons (NULL_TREE, integer_one_node, args);
args = tree_cons (NULL_TREE, t, args);
@@ -2302,7 +2304,7 @@ build_user_type_conversion_1 (totype, expr, flags)
}
if (convs)
- args = build_scratch_list (NULL_TREE, build_this (expr));
+ args = build_tree_list (NULL_TREE, build_this (expr));
for (; convs; convs = TREE_CHAIN (convs))
{
@@ -3164,11 +3166,11 @@ build_new_op (code, flags, arg1, arg2, arg3)
if (arg2 && arg3)
arglist = tree_cons (NULL_TREE, arg1, tree_cons
- (NULL_TREE, arg2, build_scratch_list (NULL_TREE, arg3)));
+ (NULL_TREE, arg2, build_tree_list (NULL_TREE, arg3)));
else if (arg2)
- arglist = tree_cons (NULL_TREE, arg1, build_scratch_list (NULL_TREE, arg2));
+ arglist = tree_cons (NULL_TREE, arg1, build_tree_list (NULL_TREE, arg2));
else
- arglist = build_scratch_list (NULL_TREE, arg1);
+ arglist = build_tree_list (NULL_TREE, arg1);
fns = lookup_function_nonclass (fnname, arglist);
@@ -3567,7 +3569,7 @@ build_op_delete_call (code, addr, size, flags, placement)
enforce_access (TREE_PURPOSE (fns), fn);
return build_function_call
(fn, tree_cons (NULL_TREE, addr,
- build_expr_list (NULL_TREE, size)));
+ build_tree_list (NULL_TREE, size)));
}
/* finish_function passes LOOKUP_SPECULATIVELY if we're in a
@@ -3650,7 +3652,7 @@ convert_like (convs, expr)
tree t = build_int_2 (0, 0);
TREE_TYPE (t) = build_pointer_type (DECL_CONTEXT (fn));
- args = build_scratch_list (NULL_TREE, expr);
+ args = build_tree_list (NULL_TREE, expr);
if (TYPE_USES_VIRTUAL_BASECLASSES (DECL_CONTEXT (fn)))
args = tree_cons (NULL_TREE, integer_one_node, args);
args = tree_cons (NULL_TREE, t, args);
@@ -3911,7 +3913,7 @@ build_over_call (cand, args, flags)
enforce_access (cand->basetype_path, fn);
if (args && TREE_CODE (args) != TREE_LIST)
- args = build_scratch_list (NULL_TREE, args);
+ args = build_tree_list (NULL_TREE, args);
arg = args;
/* The implicit parameters to a constructor are not considered by overload
diff --git a/gcc/cp/class.c b/gcc/cp/class.c
index 9b14ded..6d221eb 100644
--- a/gcc/cp/class.c
+++ b/gcc/cp/class.c
@@ -573,7 +573,7 @@ build_vtable_entry (delta, pfn)
extern int flag_huge_objects;
tree elems = tree_cons (NULL_TREE, delta,
tree_cons (NULL_TREE, integer_zero_node,
- build_expr_list (NULL_TREE, pfn)));
+ build_tree_list (NULL_TREE, pfn)));
tree entry = build (CONSTRUCTOR, vtable_entry_type, NULL_TREE, elems);
/* DELTA used to be constructed by `size_int' and/or size_binop,
@@ -1139,6 +1139,9 @@ start_vtable (t, has_virtual_p)
{
if (*has_virtual_p == 0 && ! CLASSTYPE_COM_INTERFACE (t))
{
+ /* If we are using thunks, use two slots at the front, one
+ for the offset pointer, one for the tdesc pointer.
+ For ARM-style vtables, use the same slot for both. */
if (flag_vtable_thunks)
*has_virtual_p = 2;
else
@@ -1151,40 +1154,35 @@ start_vtable (t, has_virtual_p)
allocate a new slot in our table. If it is error_mark_node, we
know that no other function from another vtable is overridden by X.
HAS_VIRTUAL keeps track of how many virtuals there are in our main
- vtable for the type, and we build upon the PENDING_VIRTUALS list
+ vtable for the type, and we build upon the NEW_VIRTUALS list
and return it. */
static void
-add_virtual_function (pv, phv, has_virtual, fndecl, t)
- tree *pv, *phv;
+add_virtual_function (new_virtuals_p, overridden_virtuals_p,
+ has_virtual, fndecl, t)
+ tree *new_virtuals_p;
+ tree *overridden_virtuals_p;
int *has_virtual;
tree fndecl;
tree t; /* Structure type. */
{
- tree pending_virtuals = *pv;
- tree pending_hard_virtuals = *phv;
-
-#ifndef DUMB_USER
- if (current_class_type == 0)
- cp_warning ("internal problem, current_class_type is zero when adding `%D', please report",
- fndecl);
- if (current_class_type && t != current_class_type)
- cp_warning ("internal problem, current_class_type differs when adding `%D', please report",
- fndecl);
-#endif
-
- /* If the virtual function is a redefinition of a prior one,
- figure out in which base class the new definition goes,
- and if necessary, make a fresh virtual function table
- to hold that entry. */
- if (DECL_VINDEX (fndecl) == error_mark_node)
+ my_friendly_assert (DECL_CONTEXT (fndecl) == t, 20000116);
+
+ /* If this function doesn't override anything from a base class, we
+ can just assign it a new DECL_VINDEX now. Otherwise, if it does
+ override something, we keep it around and assign its DECL_VINDEX
+ later, in modify_all_vtables. */
+ if (TREE_CODE (DECL_VINDEX (fndecl)) == INTEGER_CST)
+ /* We've already dealt with this function. */
+ ;
+ else if (DECL_VINDEX (fndecl) == error_mark_node)
{
+ /* FNDECL is a new virtual function; it doesn't override any
+ virtual function in a base class. */
+
/* We remember that this was the base sub-object for rtti. */
CLASSTYPE_RTTI (t) = t;
- /* If we are using thunks, use two slots at the front, one
- for the offset pointer, one for the tdesc pointer.
- For ARM-style vtables, use the same slot for both. */
start_vtable (t, has_virtual);
/* Build a new INT_CST for this DECL_VINDEX. */
@@ -1205,25 +1203,17 @@ add_virtual_function (pv, phv, has_virtual, fndecl, t)
/* Now assign virtual dispatch information. */
DECL_VINDEX (fndecl) = idx;
- DECL_CONTEXT (fndecl) = t;
}
- /* Save the state we've computed on the PENDING_VIRTUALS list. */
- pending_virtuals = tree_cons (integer_zero_node,
- fndecl,
- pending_virtuals);
+ /* Save the state we've computed on the NEW_VIRTUALS list. */
+ *new_virtuals_p = tree_cons (integer_zero_node,
+ fndecl,
+ *new_virtuals_p);
}
- /* Might already be INTEGER_CST if declared twice in class. We will
- give error later or we've already given it. */
else if (TREE_CODE (DECL_VINDEX (fndecl)) != INTEGER_CST)
- {
- /* Need an entry in some other virtual function table.
- Deal with this after we have laid out our virtual base classes. */
- pending_hard_virtuals = tree_cons (NULL_TREE,
- fndecl,
- pending_hard_virtuals);
- }
- *pv = pending_virtuals;
- *phv = pending_hard_virtuals;
+ /* FNDECL overrides a function from a base class. */
+ *overridden_virtuals_p = tree_cons (NULL_TREE,
+ fndecl,
+ *overridden_virtuals_p);
}
extern struct obstack *current_obstack;
@@ -3126,8 +3116,12 @@ check_for_override (decl, ctype)
}
virtualp = 1;
- DECL_VINDEX (decl)
- = tree_cons (NULL_TREE, tmp, DECL_VINDEX (decl));
+ /* Set DECL_VINDEX to a value that is neither an
+ INTEGER_CST nor the error_mark_node so that
+ add_virtual_function will realize this is an
+ overridden function. */
+ DECL_VINDEX (decl)
+ = tree_cons (tmp, NULL_TREE, DECL_VINDEX (decl));
/* We now know that DECL overrides something,
which is all that is important. But, we must
@@ -4202,12 +4196,12 @@ check_bases_and_members (t, empty_p)
static void
create_vtable_ptr (t, empty_p, has_virtual_p,
- pending_virtuals_p, pending_hard_virtuals_p)
+ new_virtuals_p, overridden_virtuals_p)
tree t;
int *empty_p;
int *has_virtual_p;
- tree *pending_virtuals_p;
- tree *pending_hard_virtuals_p;
+ tree *new_virtuals_p;
+ tree *overridden_virtuals_p;
{
tree fn;
@@ -4215,7 +4209,7 @@ create_vtable_ptr (t, empty_p, has_virtual_p,
vtables. */
for (fn = TYPE_METHODS (t); fn; fn = TREE_CHAIN (fn))
if (DECL_VINDEX (fn))
- add_virtual_function (pending_virtuals_p, pending_hard_virtuals_p,
+ add_virtual_function (new_virtuals_p, overridden_virtuals_p,
has_virtual_p, fn, t);
/* Even if there weren't any new virtual functions, we might need a
@@ -4609,12 +4603,12 @@ layout_basetypes (rec)
static void
layout_class_type (t, empty_p, has_virtual_p,
- pending_virtuals_p, pending_hard_virtuals_p)
+ new_virtuals_p, overridden_virtuals_p)
tree t;
int *empty_p;
int *has_virtual_p;
- tree *pending_virtuals_p;
- tree *pending_hard_virtuals_p;
+ tree *new_virtuals_p;
+ tree *overridden_virtuals_p;
{
/* If possible, we reuse the virtual function table pointer from one
of our base classes. */
@@ -4629,7 +4623,7 @@ layout_class_type (t, empty_p, has_virtual_p,
/* Create a pointer to our virtual function table. */
create_vtable_ptr (t, empty_p, has_virtual_p,
- pending_virtuals_p, pending_hard_virtuals_p);
+ new_virtuals_p, overridden_virtuals_p);
/* CLASSTYPE_INLINE_FRIENDS is really TYPE_NONCOPIED_PARTS. Thus,
we have to save this before we start modifying
@@ -4725,8 +4719,15 @@ finish_struct_1 (t)
{
tree x;
int has_virtual;
- tree pending_virtuals = NULL_TREE;
- tree pending_hard_virtuals = NULL_TREE;
+ /* The NEW_VIRTUALS is a TREE_LIST. The TREE_VALUE of each node is
+ a FUNCTION_DECL. Each of these functions is a virtual function
+ declared in T that does not override any virtual function from a
+ base class. */
+ tree new_virtuals = NULL_TREE;
+ /* The OVERRIDDEN_VIRTUALS list is like the NEW_VIRTUALS list,
+ except that each declaration here overrides the declaration from
+ a base class. */
+ tree overridden_virtuals = NULL_TREE;
int n_fields = 0;
tree vfield;
int empty = 1;
@@ -4745,7 +4746,6 @@ finish_struct_1 (t)
/* If this type was previously laid out as a forward reference,
make sure we lay it out again. */
-
TYPE_SIZE (t) = NULL_TREE;
CLASSTYPE_GOT_SEMICOLON (t) = 0;
CLASSTYPE_VFIELD_PARENT (t) = -1;
@@ -4758,7 +4758,7 @@ finish_struct_1 (t)
/* Layout the class itself. */
layout_class_type (t, &empty, &has_virtual,
- &pending_virtuals, &pending_hard_virtuals);
+ &new_virtuals, &overridden_virtuals);
if (TYPE_USES_VIRTUAL_BASECLASSES (t))
{
@@ -4818,13 +4818,13 @@ finish_struct_1 (t)
TYPE_VFIELD (t) = vfield;
}
- if (flag_rtti && TYPE_CONTAINS_VPTR_P (t) && !pending_hard_virtuals)
+ if (flag_rtti && TYPE_CONTAINS_VPTR_P (t) && !overridden_virtuals)
modify_all_vtables (t, NULL_TREE);
- for (pending_hard_virtuals = nreverse (pending_hard_virtuals);
- pending_hard_virtuals;
- pending_hard_virtuals = TREE_CHAIN (pending_hard_virtuals))
- modify_all_vtables (t, TREE_VALUE (pending_hard_virtuals));
+ for (overridden_virtuals = nreverse (overridden_virtuals);
+ overridden_virtuals;
+ overridden_virtuals = TREE_CHAIN (overridden_virtuals))
+ modify_all_vtables (t, TREE_VALUE (overridden_virtuals));
if (TYPE_USES_VIRTUAL_BASECLASSES (t))
{
@@ -4850,10 +4850,10 @@ finish_struct_1 (t)
}
/* If necessary, create the vtable for this class. */
- if (pending_virtuals
+ if (new_virtuals
|| (TYPE_CONTAINS_VPTR_P (t) && vptrs_present_everywhere_p ()))
{
- pending_virtuals = nreverse (pending_virtuals);
+ new_virtuals = nreverse (new_virtuals);
/* We must enter these virtuals into the table. */
if (!CLASSTYPE_HAS_PRIMARY_BASE_P (t))
{
@@ -4861,12 +4861,12 @@ finish_struct_1 (t)
{
/* The second slot is for the tdesc pointer when thunks are used. */
if (flag_vtable_thunks)
- pending_virtuals = tree_cons (NULL_TREE, NULL_TREE, pending_virtuals);
+ new_virtuals = tree_cons (NULL_TREE, NULL_TREE, new_virtuals);
/* The first slot is for the rtti offset. */
- pending_virtuals = tree_cons (NULL_TREE, NULL_TREE, pending_virtuals);
+ new_virtuals = tree_cons (NULL_TREE, NULL_TREE, new_virtuals);
- set_rtti_entry (pending_virtuals,
+ set_rtti_entry (new_virtuals,
convert (ssizetype, integer_zero_node), t);
}
build_vtable (NULL_TREE, t);
@@ -4917,7 +4917,7 @@ finish_struct_1 (t)
/* Entries for virtual functions defined in the primary base are
followed by entries for new functions unique to this class. */
TYPE_BINFO_VIRTUALS (t)
- = chainon (TYPE_BINFO_VIRTUALS (t), pending_virtuals);
+ = chainon (TYPE_BINFO_VIRTUALS (t), new_virtuals);
}
/* Now lay out the virtual function table. */
diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h
index b171b1f..366181d 100644
--- a/gcc/cp/cp-tree.h
+++ b/gcc/cp/cp-tree.h
@@ -126,7 +126,18 @@ Boston, MA 02111-1307, USA. */
entry does not have a TREE_VALUE; it is just an offset.
DECL_ARGUMENTS
- For a VAR_DECL this is DECL_ANON_UNION_ELEMS. */
+ For a VAR_DECL this is DECL_ANON_UNION_ELEMS.
+
+ DECL_VINDEX
+ This field is NULL for a non-virtual function. For a virtual
+ function, it is eventually set to an INTEGER_CST indicating the
+ index in the vtable at which this function can be found. When
+ a virtual function is declared, but before it is known what
+ function is overriden, this field is the error_mark_node.
+
+ Temporarily, it may be set to a TREE_LIST whose TREE_VALUE is
+ the virtual function this one overrides, and whose TREE_CHAIN is
+ the old DECL_VINDEX. */
/* Language-specific tree checkers. */
@@ -214,6 +225,14 @@ extern int flag_rtti;
alternative; otherwise, we choose the former. */
#define vptrs_present_everywhere_p() (flag_new_abi)
+/* Nonzero if the vtable for a derived class should contain the
+ virtual functions from the primary base and all virtual functions
+ present in the class itself. Zero if, instead, it should contain
+ only those virtual functions from the primary base together with
+ the functions declared in the derived class (but not in any base
+ class). */
+#define all_overridden_vfuns_in_vtables_p() (flag_new_abi)
+
/* Language-dependent contents of an identifier. */
@@ -4181,9 +4200,6 @@ extern void remap_save_expr PROTO((tree *, splay_tree, tree,
#define cp_build_qualified_type(TYPE, QUALS) \
cp_build_qualified_type_real ((TYPE), (QUALS), /*complain=*/1)
-#define scratchalloc expralloc
-#define build_scratch_list build_expr_list
-
/* in typeck.c */
extern int string_conv_p PROTO((tree, tree, int));
extern tree condition_conversion PROTO((tree));
diff --git a/gcc/cp/cvt.c b/gcc/cp/cvt.c
index 34acdd0..bcc467a 100644
--- a/gcc/cp/cvt.c
+++ b/gcc/cp/cvt.c
@@ -807,7 +807,7 @@ ocp_convert (type, expr, convtype, flags)
ctor = build_user_type_conversion (type, ctor, flags);
if (ctor)
ctor = build_method_call (NULL_TREE, ctor_identifier,
- build_expr_list (NULL_TREE, ctor),
+ build_tree_list (NULL_TREE, ctor),
TYPE_BINFO (type), flags);
if (ctor)
return build_cplus_new (type, ctor);
diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c
index 0a5dc56..bd8ba63 100644
--- a/gcc/cp/decl.c
+++ b/gcc/cp/decl.c
@@ -6668,7 +6668,7 @@ start_decl (declarator, declspecs, initialized, attributes, prefix_attributes)
}
if (attributes || prefix_attributes)
- attrlist = build_scratch_list (attributes, prefix_attributes);
+ attrlist = build_tree_list (attributes, prefix_attributes);
else
attrlist = NULL_TREE;
@@ -12968,7 +12968,7 @@ start_function (declspecs, declarator, attrs, flags)
if (CLASS_TYPE_P (restype) && !CLASSTYPE_GOT_SEMICOLON (restype))
{
cp_error ("semicolon missing after declaration of `%#T'", restype);
- shadow_tag (build_expr_list (NULL_TREE, restype));
+ shadow_tag (build_tree_list (NULL_TREE, restype));
CLASSTYPE_GOT_SEMICOLON (restype) = 1;
if (TREE_CODE (fntype) == FUNCTION_TYPE)
fntype = build_function_type (integer_type_node,
@@ -13600,7 +13600,7 @@ finish_destructor_body ()
finish_expr_stmt
(build_scoped_method_call
(current_class_ref, vb, dtor_identifier,
- build_expr_list (NULL_TREE, integer_zero_node)));
+ build_tree_list (NULL_TREE, integer_zero_node)));
}
vbases = TREE_CHAIN (vbases);
}
@@ -14276,7 +14276,7 @@ maybe_build_cleanup_1 (decl, auto_delete)
if (TYPE_USES_VIRTUAL_BASECLASSES (type)
&& ! TYPE_HAS_DESTRUCTOR (type))
rval = build_compound_expr (tree_cons (NULL_TREE, rval,
- build_expr_list (NULL_TREE, build_vbase_delete (type, decl))));
+ build_tree_list (NULL_TREE, build_vbase_delete (type, decl))));
return rval;
}
diff --git a/gcc/cp/decl2.c b/gcc/cp/decl2.c
index 10d071e..aa8b5a7 100644
--- a/gcc/cp/decl2.c
+++ b/gcc/cp/decl2.c
@@ -4026,7 +4026,7 @@ reparse_decl_as_expr (type, decl)
{
decl = build_expr_from_tree (decl);
if (type)
- return build_functional_cast (type, build_expr_list (NULL_TREE, decl));
+ return build_functional_cast (type, build_tree_list (NULL_TREE, decl));
else
return decl;
}
diff --git a/gcc/cp/init.c b/gcc/cp/init.c
index b5a1ac4..7d7c084 100644
--- a/gcc/cp/init.c
+++ b/gcc/cp/init.c
@@ -162,7 +162,7 @@ perform_member_init (member, name, init, explicit)
/* Since `init' is already a TREE_LIST on the current_member_init_list,
only build it into one if we aren't already a list. */
if (init != NULL_TREE && TREE_CODE (init) != TREE_LIST)
- init = build_expr_list (NULL_TREE, init);
+ init = build_tree_list (NULL_TREE, init);
if (explicit
&& TREE_CODE (type) == ARRAY_TYPE
@@ -695,7 +695,7 @@ expand_cleanup_for_base (binfo, flag)
/* Call the destructor. */
expr = (build_scoped_method_call
(current_class_ref, binfo, dtor_identifier,
- build_expr_list (NULL_TREE, integer_zero_node)));
+ build_tree_list (NULL_TREE, integer_zero_node)));
if (flag)
expr = fold (build (COND_EXPR, void_type_node,
truthvalue_conversion (flag),
@@ -1186,7 +1186,7 @@ expand_default_init (binfo, true_exp, exp, init, flags)
init = TREE_VALUE (parms);
}
else
- parms = build_expr_list (NULL_TREE, init);
+ parms = build_tree_list (NULL_TREE, init);
if (TYPE_USES_VIRTUAL_BASECLASSES (type))
{
@@ -1361,7 +1361,7 @@ get_type_value (name)
else
return NULL_TREE;
}
-
+
/* This code could just as well go in `class.c', but is placed here for
modularity. */
@@ -1619,7 +1619,7 @@ build_offset_ref (type, name)
/* The code in instantiate_type which will process this
expects to encounter OVERLOADs, not raw functions. */
t = ovl_cons (t, NULL_TREE);
-
+
return build (OFFSET_REF,
unknown_type_node,
decl,
@@ -1772,7 +1772,7 @@ resolve_offset_ref (exp)
basetype = DECL_CONTEXT (member);
base = current_class_ptr;
-
+
if (get_base_distance (basetype, TREE_TYPE (TREE_TYPE (base)), 0, &basetype_path) < 0)
{
error_not_base_type (basetype, TREE_TYPE (TREE_TYPE (base)));
@@ -1812,7 +1812,7 @@ resolve_offset_ref (exp)
basetype = TYPE_OFFSET_BASETYPE (TREE_TYPE (TREE_TYPE (member)));
addr = convert_pointer_to (basetype, addr);
member = cp_convert (ptrdiff_type_node, member);
-
+
/* Pointer to data members are offset by one, so that a null
pointer with a real value of 0 is distinguishable from an
offset of the first member of a structure. */
@@ -1861,7 +1861,7 @@ build_builtin_delete_call (addr)
{
mark_used (global_delete_fndecl);
return build_call (global_delete_fndecl,
- void_type_node, build_expr_list (NULL_TREE, addr));
+ void_type_node, build_tree_list (NULL_TREE, addr));
}
/* Generate a C++ "new" expression. DECL is either a TREE_LIST
@@ -2258,7 +2258,7 @@ build_new_1 (exp)
rval = cp_convert (build_pointer_type (true_type), rval);
rval = build_compound_expr
(tree_cons (NULL_TREE, exp1,
- build_expr_list (NULL_TREE, rval)));
+ build_tree_list (NULL_TREE, rval)));
}
if (rval == error_mark_node)
@@ -3059,7 +3059,7 @@ build_delete (type, addr, auto_delete, flags, use_global_delete)
passed_auto_delete = auto_delete;
expr = build_method_call
- (ref, dtor_identifier, build_expr_list (NULL_TREE, passed_auto_delete),
+ (ref, dtor_identifier, build_tree_list (NULL_TREE, passed_auto_delete),
NULL_TREE, flags);
if (do_delete)
@@ -3108,7 +3108,7 @@ build_delete (type, addr, auto_delete, flags, use_global_delete)
cond = NULL_TREE;
if (cond)
- exprstmt = build_expr_list (NULL_TREE, cond);
+ exprstmt = build_tree_list (NULL_TREE, cond);
if (base_binfo
&& ! TREE_VIA_VIRTUAL (base_binfo)
@@ -3123,7 +3123,7 @@ build_delete (type, addr, auto_delete, flags, use_global_delete)
expr = build_scoped_method_call
(ref, base_binfo, dtor_identifier,
- build_expr_list (NULL_TREE, this_auto_delete));
+ build_tree_list (NULL_TREE, this_auto_delete));
exprstmt = tree_cons (NULL_TREE, expr, exprstmt);
}
@@ -3137,7 +3137,7 @@ build_delete (type, addr, auto_delete, flags, use_global_delete)
expr = build_scoped_method_call
(ref, base_binfo, dtor_identifier,
- build_expr_list (NULL_TREE, integer_zero_node));
+ build_tree_list (NULL_TREE, integer_zero_node));
exprstmt = tree_cons (NULL_TREE, expr, exprstmt);
}
diff --git a/gcc/cp/method.c b/gcc/cp/method.c
index ba8d594..4d99885 100644
--- a/gcc/cp/method.c
+++ b/gcc/cp/method.c
@@ -2277,7 +2277,7 @@ do_build_assign_ref (fndecl)
CONV_IMPLICIT|CONV_CONST, LOOKUP_COMPLAIN, NULL_TREE);
p = convert_from_reference (p);
p = build_member_call (basetype, ansi_opname [MODIFY_EXPR],
- build_expr_list (NULL_TREE, p));
+ build_tree_list (NULL_TREE, p));
finish_expr_stmt (p);
}
for (; fields; fields = TREE_CHAIN (fields))
diff --git a/gcc/cp/parse.c b/gcc/cp/parse.c
index 2821100..364d2f4 100644
--- a/gcc/cp/parse.c
+++ b/gcc/cp/parse.c
@@ -5252,24 +5252,24 @@ case 208:
case 210:
#line 1061 "parse.y"
{ yyval.ttype = tree_cons (NULL_TREE, yyval.ttype,
- build_expr_list (NULL_TREE, yyvsp[0].ttype)); ;
+ build_tree_list (NULL_TREE, yyvsp[0].ttype)); ;
break;}
case 211:
#line 1064 "parse.y"
{ yyval.ttype = tree_cons (NULL_TREE, yyval.ttype,
- build_expr_list (NULL_TREE, error_mark_node)); ;
+ build_tree_list (NULL_TREE, error_mark_node)); ;
break;}
case 212:
#line 1067 "parse.y"
-{ chainon (yyval.ttype, build_expr_list (NULL_TREE, yyvsp[0].ttype)); ;
+{ chainon (yyval.ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ;
break;}
case 213:
#line 1069 "parse.y"
-{ chainon (yyval.ttype, build_expr_list (NULL_TREE, error_mark_node)); ;
+{ chainon (yyval.ttype, build_tree_list (NULL_TREE, error_mark_node)); ;
break;}
case 214:
#line 1074 "parse.y"
-{ yyval.ttype = build_expr_list (NULL_TREE, yyval.ttype); ;
+{ yyval.ttype = build_tree_list (NULL_TREE, yyval.ttype); ;
break;}
case 216:
#line 1080 "parse.y"
@@ -5421,7 +5421,7 @@ case 246:
pedwarn ("ANSI C++ forbids initialization of new expression with `='");
if (TREE_CODE (yyvsp[0].ttype) != TREE_LIST
&& TREE_CODE (yyvsp[0].ttype) != CONSTRUCTOR)
- yyval.ttype = build_expr_list (NULL_TREE, yyvsp[0].ttype);
+ yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype);
else
yyval.ttype = yyvsp[0].ttype;
;
@@ -6297,11 +6297,11 @@ case 454:
break;}
case 455:
#line 2007 "parse.y"
-{ yyval.ttype = build_expr_list (yyvsp[-2].ttype, yyvsp[0].ttype); ;
+{ yyval.ttype = build_tree_list (yyvsp[-2].ttype, yyvsp[0].ttype); ;
break;}
case 456:
#line 2009 "parse.y"
-{ yyval.ttype = build_expr_list (yyval.ttype, yyvsp[0].ttype); ;
+{ yyval.ttype = build_tree_list (yyval.ttype, yyvsp[0].ttype); ;
break;}
case 457:
#line 2011 "parse.y"
diff --git a/gcc/cp/parse.y b/gcc/cp/parse.y
index 7360eaa..702a960 100644
--- a/gcc/cp/parse.y
+++ b/gcc/cp/parse.y
@@ -1059,19 +1059,19 @@ already_scoped_stmt:
nontrivial_exprlist:
expr_no_commas ',' expr_no_commas
{ $$ = tree_cons (NULL_TREE, $$,
- build_expr_list (NULL_TREE, $3)); }
+ build_tree_list (NULL_TREE, $3)); }
| expr_no_commas ',' error
{ $$ = tree_cons (NULL_TREE, $$,
- build_expr_list (NULL_TREE, error_mark_node)); }
+ build_tree_list (NULL_TREE, error_mark_node)); }
| nontrivial_exprlist ',' expr_no_commas
- { chainon ($$, build_expr_list (NULL_TREE, $3)); }
+ { chainon ($$, build_tree_list (NULL_TREE, $3)); }
| nontrivial_exprlist ',' error
- { chainon ($$, build_expr_list (NULL_TREE, error_mark_node)); }
+ { chainon ($$, build_tree_list (NULL_TREE, error_mark_node)); }
;
nonnull_exprlist:
expr_no_commas
- { $$ = build_expr_list (NULL_TREE, $$); }
+ { $$ = build_tree_list (NULL_TREE, $$); }
| nontrivial_exprlist
;
@@ -1181,7 +1181,7 @@ new_initializer:
pedwarn ("ANSI C++ forbids initialization of new expression with `='");
if (TREE_CODE ($2) != TREE_LIST
&& TREE_CODE ($2) != CONSTRUCTOR)
- $$ = build_expr_list (NULL_TREE, $2);
+ $$ = build_tree_list (NULL_TREE, $2);
else
$$ = $2;
}
@@ -2004,9 +2004,9 @@ initlist:
{ $$ = tree_cons (NULL_TREE, $3, $$); }
/* These are for labeled elements. */
| '[' expr_no_commas ']' init
- { $$ = build_expr_list ($2, $4); }
+ { $$ = build_tree_list ($2, $4); }
| identifier ':' init
- { $$ = build_expr_list ($$, $3); }
+ { $$ = build_tree_list ($$, $3); }
| initlist ',' identifier ':' init
{ $$ = tree_cons ($3, $5, $$); }
;
diff --git a/gcc/cp/rtti.c b/gcc/cp/rtti.c
index cddefe7d..a90da0d 100644
--- a/gcc/cp/rtti.c
+++ b/gcc/cp/rtti.c
@@ -295,7 +295,7 @@ build_x_typeid (exp)
tree bad = throw_bad_typeid ();
bad = build_compound_expr
- (tree_cons (NULL_TREE, bad, build_expr_list
+ (tree_cons (NULL_TREE, bad, build_tree_list
(NULL_TREE, cp_convert (type, integer_zero_node))));
exp = build (COND_EXPR, type, cond, exp, bad);
}
@@ -680,7 +680,7 @@ build_dynamic_cast_1 (type, expr)
expr1 = throw_bad_cast ();
expr1 = build_compound_expr
(tree_cons (NULL_TREE, expr1,
- build_expr_list (NULL_TREE, cp_convert (type, integer_zero_node))));
+ build_tree_list (NULL_TREE, cp_convert (type, integer_zero_node))));
TREE_TYPE (expr1) = type;
result = save_expr (result);
return build (COND_EXPR, type, result, result, expr1);
diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c
index 13b090a..f232779 100644
--- a/gcc/cp/typeck.c
+++ b/gcc/cp/typeck.c
@@ -5092,7 +5092,7 @@ build_x_compound_expr (list)
return build_compound_expr
(tree_cons (NULL_TREE, TREE_VALUE (list),
- build_expr_list (NULL_TREE,
+ build_tree_list (NULL_TREE,
build_x_compound_expr (rest))));
}
@@ -5177,7 +5177,7 @@ build_static_cast (type, expr)
if (IS_AGGR_TYPE (type))
return build_cplus_new
(type, (build_method_call
- (NULL_TREE, ctor_identifier, build_expr_list (NULL_TREE, expr),
+ (NULL_TREE, ctor_identifier, build_tree_list (NULL_TREE, expr),
TYPE_BINFO (type), LOOKUP_NORMAL)));
expr = decay_conversion (expr);
@@ -5702,7 +5702,7 @@ build_modify_expr (lhs, modifycode, rhs)
else
{
result = build_method_call (lhs, ctor_identifier,
- build_expr_list (NULL_TREE, rhs),
+ build_tree_list (NULL_TREE, rhs),
TYPE_BINFO (lhstype), LOOKUP_NORMAL);
if (result == NULL_TREE)
return error_mark_node;
@@ -5932,7 +5932,7 @@ build_modify_expr (lhs, modifycode, rhs)
if (TREE_SIDE_EFFECTS (lhs))
cond = build_compound_expr (tree_cons
(NULL_TREE, lhs,
- build_expr_list (NULL_TREE, cond)));
+ build_tree_list (NULL_TREE, cond)));
/* Cannot have two identical lhs on this one tree (result) as preexpand
calls will rip them out and fill in RTL for them, but when the