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); Having to LTO stream many classtypes twice just for clobber seems wasteful call.c already seem to contain similar logic in build_over_call: it checks both types for match and if they do it uses class type for the copy and otherwise it builds array and copies it (I wonder why I does not just copy CLASSTYPE_AS_BASE instead, though I see that with the type merging bug this may break with LTO) Honza