From c3337b44c40dd1545e00034cb8e1ae1c0dae0fa6 Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Mon, 24 Jun 2019 10:34:35 -0400 Subject: [PATCH] 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 --- gcc/cp/ChangeLog | 5 +++++ gcc/cp/class.c | 6 ++++++ 2 files changed, 11 insertions(+) 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)) -- 2.30.2