https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78689
--- Comment #3 from Jakub Jelinek <jakub at gcc dot gnu.org> --- I had further look at this. E.g. build_over_call's nargs = 2 in: if (ctor_omit_inherited_parms (fn)) nargs = 2; is seen in inh-ctor23.C, inh-ctor24.C and inh-ctor28.C testcases. Looking at these testcases and checking where the current tree-inline.c COND_EXPR with folded to INTEGER_CST condition, I see one conditional clobber (non-interesting), one call to some constructor with nameless PARM_DECLs and one case where __vtt_parm parameter is used. None of these contain user labels, so worst case scanning for user labels in the tree-inline.c code might work. Anyway, what I see is that in the complete ctor during the tree-inline.c body copying the __vtt_parm is replaced with 0 and (unexpectedly) the base ctor has the unnamed extra params like the complete ctor. So I don't see why things wouldn't work with the tree-inline.c changes reverted. Unless the extra arguments from the base ctor are meant to be removed.