Commit 6d813d4d by Jason Merrill Committed by Jason Merrill

class.c (finish_struct_1): Still check for ANON_AGGR_TYPE_P.

	* class.c (finish_struct_1): Still check for ANON_AGGR_TYPE_P.
	* class.c (finish_base_struct): Allow non-COM bases for COM classes
	except at the leftmost position.
	(modify_one_vtable, fixup_vtable_deltas1, override_one_vtable):
	Pass the binfo's class, not the most derived, to skip_rtti_stuff.
	* search.c (get_abstract_virtuals, expand_upcast_fixups): Likewise.

From-SVN: r27065
parent 75153fba
1999-05-20 Jason Merrill <jason@yorick.cygnus.com> 1999-05-20 Jason Merrill <jason@yorick.cygnus.com>
* class.c (finish_struct_1): Still check for ANON_AGGR_TYPE_P.
* class.c (finish_base_struct): Allow non-COM bases for COM classes
except at the leftmost position.
(modify_one_vtable, fixup_vtable_deltas1, override_one_vtable):
Pass the binfo's class, not the most derived, to skip_rtti_stuff.
* search.c (get_abstract_virtuals, expand_upcast_fixups): Likewise.
* tree.c (lvalue_p_1): A NOP_EXPR can be an lvalue. * tree.c (lvalue_p_1): A NOP_EXPR can be an lvalue.
(build_cplus_new): Make sure that what we return is of the right type. (build_cplus_new): Make sure that what we return is of the right type.
......
...@@ -1649,7 +1649,7 @@ finish_base_struct (t, b) ...@@ -1649,7 +1649,7 @@ finish_base_struct (t, b)
("COM interface type `%T' must be the leftmost base class", ("COM interface type `%T' must be the leftmost base class",
basetype); basetype);
} }
else if (CLASSTYPE_COM_INTERFACE (t)) else if (CLASSTYPE_COM_INTERFACE (t) && i == 0)
{ {
cp_error ("COM interface type `%T' with non-COM base class `%T'", cp_error ("COM interface type `%T' with non-COM base class `%T'",
t, basetype); t, basetype);
...@@ -2356,7 +2356,7 @@ modify_one_vtable (binfo, t, fndecl, pfn) ...@@ -2356,7 +2356,7 @@ modify_one_vtable (binfo, t, fndecl, pfn)
if (fndecl == NULL_TREE) if (fndecl == NULL_TREE)
return; return;
n = skip_rtti_stuff (&virtuals, t); n = skip_rtti_stuff (&virtuals, BINFO_TYPE (binfo));
while (virtuals) while (virtuals)
{ {
...@@ -2450,7 +2450,7 @@ fixup_vtable_deltas1 (binfo, t) ...@@ -2450,7 +2450,7 @@ fixup_vtable_deltas1 (binfo, t)
tree virtuals = BINFO_VIRTUALS (binfo); tree virtuals = BINFO_VIRTUALS (binfo);
unsigned HOST_WIDE_INT n; unsigned HOST_WIDE_INT n;
n = skip_rtti_stuff (&virtuals, t); n = skip_rtti_stuff (&virtuals, BINFO_TYPE (binfo));
while (virtuals) while (virtuals)
{ {
...@@ -2623,8 +2623,8 @@ override_one_vtable (binfo, old, t) ...@@ -2623,8 +2623,8 @@ override_one_vtable (binfo, old, t)
if (BINFO_NEW_VTABLE_MARKED (binfo)) if (BINFO_NEW_VTABLE_MARKED (binfo))
choose = NEITHER; choose = NEITHER;
skip_rtti_stuff (&virtuals, t); skip_rtti_stuff (&virtuals, BINFO_TYPE (binfo));
skip_rtti_stuff (&old_virtuals, t); skip_rtti_stuff (&old_virtuals, BINFO_TYPE (binfo));
while (virtuals) while (virtuals)
{ {
...@@ -3523,7 +3523,7 @@ finish_struct_1 (t, warn_anon) ...@@ -3523,7 +3523,7 @@ finish_struct_1 (t, warn_anon)
while (TREE_CODE (type) == ARRAY_TYPE) while (TREE_CODE (type) == ARRAY_TYPE)
type = TREE_TYPE (type); type = TREE_TYPE (type);
if (CLASS_TYPE_P (type)) if (CLASS_TYPE_P (type) && ! ANON_AGGR_TYPE_P (type))
{ {
/* Never let anything with uninheritable virtuals /* Never let anything with uninheritable virtuals
make it through without complaint. */ make it through without complaint. */
......
...@@ -2013,7 +2013,7 @@ get_abstract_virtuals (type) ...@@ -2013,7 +2013,7 @@ get_abstract_virtuals (type)
{ {
tree virtuals = BINFO_VIRTUALS (vbases); tree virtuals = BINFO_VIRTUALS (vbases);
skip_rtti_stuff (&virtuals, type); skip_rtti_stuff (&virtuals, BINFO_TYPE (vbases));
while (virtuals) while (virtuals)
{ {
...@@ -2476,7 +2476,7 @@ expand_upcast_fixups (binfo, addr, orig_addr, vbase, vbase_addr, t, ...@@ -2476,7 +2476,7 @@ expand_upcast_fixups (binfo, addr, orig_addr, vbase, vbase_addr, t,
*vbase_offsets = delta; *vbase_offsets = delta;
} }
n = skip_rtti_stuff (&virtuals, t); n = skip_rtti_stuff (&virtuals, BINFO_TYPE (binfo));
while (virtuals) while (virtuals)
{ {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment