From: Jason Merrill Date: Mon, 24 Jun 2019 14:34:35 +0000 (-0400) Subject: Don't use a separate CLASSTYPE_AS_BASE if it's the same size. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=c3337b44c40dd1545e00034cb8e1ae1c0dae0fa6;p=gcc.git Don't use a separate CLASSTYPE_AS_BASE if it's the same size. * class.c (layout_class_type): Don't use a separate CLASSTYPE_AS_BASE if it's the same size. From-SVN: r272618 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index f47df489a3d..efb6c3dd7b1 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2019-06-24 Jason Merrill + + * class.c (layout_class_type): Don't use a separate + CLASSTYPE_AS_BASE if it's the same size. + 2019-06-23 Marek Polacek * call.c (convert_default_arg): Use DEFERRED_PARSE instead of diff --git a/gcc/cp/class.c b/gcc/cp/class.c index de37e43d04c..e0df9ef2b20 100644 --- a/gcc/cp/class.c +++ b/gcc/cp/class.c @@ -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))