c++: Fix base copy elision thinko [PR98744]
As Jakub points out in the PR, I was mixing up DECL_HAS_IN_CHARGE_PARM_P (which is true for the abstract maybe-in-charge constructor) and DECL_HAS_VTT_PARM_P (which is true for a base constructor that needs to handle virtual bases). gcc/cp/ChangeLog: PR c++/98744 * call.c (make_base_init_ok): Use DECL_HAS_VTT_PARM_P. gcc/testsuite/ChangeLog: PR c++/98744 * g++.dg/init/elide7.C: New test.
This commit is contained in:
parent
a9ed18295b
commit
90cbc76900
2 changed files with 10 additions and 1 deletions
|
@ -8470,7 +8470,7 @@ make_base_init_ok (tree exp)
|
|||
return true;
|
||||
gcc_assert (DECL_COMPLETE_CONSTRUCTOR_P (fn));
|
||||
fn = base_ctor_for (fn);
|
||||
if (!fn || DECL_HAS_IN_CHARGE_PARM_P (fn))
|
||||
if (!fn || DECL_HAS_VTT_PARM_P (fn))
|
||||
/* The base constructor has more parameters, so we can't just change the
|
||||
call target. It would be possible to splice in the appropriate
|
||||
arguments, but probably not worth the complexity. */
|
||||
|
|
9
gcc/testsuite/g++.dg/init/elide7.C
Normal file
9
gcc/testsuite/g++.dg/init/elide7.C
Normal file
|
@ -0,0 +1,9 @@
|
|||
// PR c++/98744
|
||||
// { dg-additional-options "-O2 -fno-inline -Wmaybe-uninitialized" }
|
||||
|
||||
struct A {};
|
||||
struct B : virtual A {};
|
||||
struct C : B {
|
||||
C() : B(B()) {}
|
||||
};
|
||||
int main() { C c; return 0; }
|
Loading…
Add table
Reference in a new issue