]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
class.c (finish_struct_1): Still check for ANON_AGGR_TYPE_P.
authorJason Merrill <jason@yorick.cygnus.com>
Thu, 20 May 1999 12:21:53 +0000 (12:21 +0000)
committerJason Merrill <jason@gcc.gnu.org>
Thu, 20 May 1999 12:21:53 +0000 (08:21 -0400)
* 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

gcc/cp/ChangeLog
gcc/cp/class.c
gcc/cp/search.c

index 801aeea9e6d9714958340289f1b7d4155fd55d28..5ac9e81f7360681b2585ab8d7f6a9d6771bc80e1 100644 (file)
@@ -1,5 +1,13 @@
 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.
        (build_cplus_new): Make sure that what we return is of the right type.
 
index 94c891ead81ad3e9e4c15d3feb44ee3c180aaa0c..fe56078644c6392f8a4260fa613cb4dd568955b5 100644 (file)
@@ -1649,7 +1649,7 @@ finish_base_struct (t, b)
              ("COM interface type `%T' must be the leftmost base class",
               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'",
                    t, basetype);
@@ -2356,7 +2356,7 @@ modify_one_vtable (binfo, t, fndecl, pfn)
   if (fndecl == NULL_TREE)
     return;
 
-  n = skip_rtti_stuff (&virtuals, t);
+  n = skip_rtti_stuff (&virtuals, BINFO_TYPE (binfo));
 
   while (virtuals)
     {
@@ -2450,7 +2450,7 @@ fixup_vtable_deltas1 (binfo, t)
   tree virtuals = BINFO_VIRTUALS (binfo);
   unsigned HOST_WIDE_INT n;
   
-  n = skip_rtti_stuff (&virtuals, t);
+  n = skip_rtti_stuff (&virtuals, BINFO_TYPE (binfo));
 
   while (virtuals)
     {
@@ -2623,8 +2623,8 @@ override_one_vtable (binfo, old, t)
   if (BINFO_NEW_VTABLE_MARKED (binfo))
     choose = NEITHER;
 
-  skip_rtti_stuff (&virtuals, t);
-  skip_rtti_stuff (&old_virtuals, t);
+  skip_rtti_stuff (&virtuals, BINFO_TYPE (binfo));
+  skip_rtti_stuff (&old_virtuals, BINFO_TYPE (binfo));
 
   while (virtuals)
     {
@@ -3523,7 +3523,7 @@ finish_struct_1 (t, warn_anon)
          while (TREE_CODE (type) == ARRAY_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
                 make it through without complaint.  */
index 906aa131b3d4cef63fb02fcf779a367df1b25bde..63b733d3ad82e52ad58a4b5f8fe6e77f2f7c71ef 100644 (file)
@@ -2013,7 +2013,7 @@ get_abstract_virtuals (type)
     {
       tree virtuals = BINFO_VIRTUALS (vbases);
 
-      skip_rtti_stuff (&virtuals, type);
+      skip_rtti_stuff (&virtuals, BINFO_TYPE (vbases));
 
       while (virtuals)
        {
@@ -2476,7 +2476,7 @@ expand_upcast_fixups (binfo, addr, orig_addr, vbase, vbase_addr, t,
       *vbase_offsets = delta;
     }
 
-  n = skip_rtti_stuff (&virtuals, t);
+  n = skip_rtti_stuff (&virtuals, BINFO_TYPE (binfo));
 
   while (virtuals)
     {