On 6/19/19 9:28 AM, Jan Hubicka wrote:
Jason,
I also wonder if something like this would make sense:

        * decl.c (build_clobber_this): Use original basetype if they
        match.

Index: decl.c
===================================================================
--- decl.c      (revision 272381)
+++ decl.c      (working copy)
@@ -15210,7 +15210,11 @@ build_clobber_this ()
tree ctype = current_class_type;
    if (!vbases)
-    ctype = CLASSTYPE_AS_BASE (ctype);
+    {
+      if (!tree_int_cst_equal (TYPE_SIZE (ctype),
+                              TYPE_SIZE (CLASSTYPE_AS_BASE (ctype))))
+        ctype = CLASSTYPE_AS_BASE (ctype);
+    }
tree clobber = build_clobber (ctype);

I have noticed we build a distinct as-base type in rather more cases than strictly necessary. For instance when there's a member of reference type or we have a non-trivial dtor. (CLASSTYPE_NON_LAYOUT_POD_P gets set by a bunch of things that don't affect ABI layout)

nathan

--
Nathan Sidwell

Reply via email to