c++: ICE on invalid with NSDMI in C++98 [PR98352]
NSDMIs are a C++11 thing, and here we ICE with them on the non-C++11 path. Fortunately all we need is a small tweak to my recent r11-7835 patch. gcc/cp/ChangeLog: PR c++/98352 * method.c (implicitly_declare_fn): Pass &raises to synthesized_method_walk. gcc/testsuite/ChangeLog: PR c++/98352 * g++.dg/cpp0x/inh-ctor37.C: Remove dg-error. * g++.dg/cpp0x/nsdmi17.C: New test.
This commit is contained in:
parent
5f070ba298
commit
c453a81712
@ -3002,7 +3002,7 @@ implicitly_declare_fn (special_function_kind kind, tree type,
|
||||
member initializer (c++/89914). Also, in C++98, we might have
|
||||
failed to deduce RAISES, so try again but complain this time. */
|
||||
if (cxx_dialect < cxx11)
|
||||
synthesized_method_walk (type, kind, const_p, nullptr, nullptr,
|
||||
synthesized_method_walk (type, kind, const_p, &raises, nullptr,
|
||||
nullptr, nullptr, /*diag=*/true,
|
||||
&inherited_ctor, inherited_parms);
|
||||
/* We should have seen an error at this point. */
|
||||
|
||||
@ -22,5 +22,5 @@ struct S { S(B<A> *); };
|
||||
S
|
||||
fn ()
|
||||
{
|
||||
return S(new B<A>(10.5)); // { dg-error "no matching function" "" { target c++98_only } }
|
||||
return S(new B<A>(10.5));
|
||||
}
|
||||
|
||||
8
gcc/testsuite/g++.dg/cpp0x/nsdmi17.C
Normal file
8
gcc/testsuite/g++.dg/cpp0x/nsdmi17.C
Normal file
@ -0,0 +1,8 @@
|
||||
// PR c++/98352
|
||||
// { dg-do compile }
|
||||
|
||||
struct A {
|
||||
int i = (A(), 42); // { dg-error "default member initializer" }
|
||||
// { dg-error "only available" "" { target c++98_only } .-1 }
|
||||
};
|
||||
A a;
|
||||
Loading…
Reference in New Issue
Block a user