Don't use a separate CLASSTYPE_AS_BASE if it's the same size.
authorJason Merrill <jason@redhat.com>
Mon, 24 Jun 2019 14:34:35 +0000 (10:34 -0400)
committerJason Merrill <jason@gcc.gnu.org>
Mon, 24 Jun 2019 14:34:35 +0000 (10:34 -0400)
* class.c (layout_class_type): Don't use a separate
CLASSTYPE_AS_BASE if it's the same size.

From-SVN: r272618

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

index f47df489a3de76dd8fe98cef8778c0f505394924..efb6c3dd7b141dca0382013cb2dfe29865c0a7b6 100644 (file)
@@ -1,3 +1,8 @@
+2019-06-24  Jason Merrill  <jason@redhat.com>
+
+       * class.c (layout_class_type): Don't use a separate
+       CLASSTYPE_AS_BASE if it's the same size.
+
 2019-06-23  Marek Polacek  <polacek@redhat.com>
 
        * call.c (convert_default_arg): Use DEFERRED_PARSE instead of
index de37e43d04c1960191a377a58edc7ac338070b29..e0df9ef2b20a436870dbe8d232d1a6f1608d68e1 100644 (file)
@@ -6453,6 +6453,12 @@ layout_class_type (tree t, tree *virtuals_p)
   /* Let the back end lay out the type.  */
   finish_record_layout (rli, /*free_p=*/true);
 
+  /* If we didn't end up needing an as-base type, don't use it.  */
+  if (CLASSTYPE_AS_BASE (t) != t
+      && tree_int_cst_equal (TYPE_SIZE (t),
+                            TYPE_SIZE (CLASSTYPE_AS_BASE (t))))
+    CLASSTYPE_AS_BASE (t) = t;
+
   if (TYPE_SIZE_UNIT (t)
       && TREE_CODE (TYPE_SIZE_UNIT (t)) == INTEGER_CST
       && !TREE_OVERFLOW (TYPE_SIZE_UNIT (t))