diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/cp/class.c | 6 |
2 files changed, 11 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index f47df48..efb6c3d 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -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 diff --git a/gcc/cp/class.c b/gcc/cp/class.c index de37e43..e0df9ef 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)) |