diff options
author | Jason Merrill <jason@redhat.com> | 2017-08-09 14:32:02 -0400 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2017-08-09 14:32:02 -0400 |
commit | 9fb82e652cee118b5c9d77e1e60a351a37a55dc8 (patch) | |
tree | 1ff0784160f8c2d88777310405e7581704bfedb3 /gcc/testsuite | |
parent | 04d07b61cb80fd97e98eb39451ff6a8675a63d90 (diff) | |
download | gcc-9fb82e652cee118b5c9d77e1e60a351a37a55dc8.zip gcc-9fb82e652cee118b5c9d77e1e60a351a37a55dc8.tar.gz gcc-9fb82e652cee118b5c9d77e1e60a351a37a55dc8.tar.bz2 |
PR c++/81359 - Unparsed NSDMI error from SFINAE context.
* init.c (get_nsdmi): Add complain parm.
* typeck2.c (digest_nsdmi_init): Add complain parm.
(process_init_constructor_record): Pass complain to get_nsdmi.
* pt.c (maybe_instantiate_noexcept): Add complain parm, return bool.
* method.c (get_defaulted_eh_spec): Add complain parm. Pass it into
synthesized_method_walk.
(synthesized_method_walk): Adjust.
(walk_field_subobs): Pass complain to get_nsdmi.
(defaulted_late_check): Skip other checks if deleted.
* decl2.c (mark_used): Pass complain to maybe_instantiate_noexcept.
* call.c (build_aggr_conv): Pass complain to get_nsdmi.
* parser.c (defarg_location): New.
* error.c (location_of): Use it.
From-SVN: r250994
Diffstat (limited to 'gcc/testsuite')
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/nsdmi-defer6.C | 2 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/nsdmi-template14.C | 4 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/nsdmi10.C | 4 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/sfinae59.C | 19 |
4 files changed, 24 insertions, 5 deletions
diff --git a/gcc/testsuite/g++.dg/cpp0x/nsdmi-defer6.C b/gcc/testsuite/g++.dg/cpp0x/nsdmi-defer6.C index 0f06343..056d16d 100644 --- a/gcc/testsuite/g++.dg/cpp0x/nsdmi-defer6.C +++ b/gcc/testsuite/g++.dg/cpp0x/nsdmi-defer6.C @@ -2,7 +2,7 @@ struct A { - int i = (A(), 42); // { dg-error "constructor required" } + int i = (A(), 42); // { dg-error "" } }; A a; diff --git a/gcc/testsuite/g++.dg/cpp0x/nsdmi-template14.C b/gcc/testsuite/g++.dg/cpp0x/nsdmi-template14.C index 1a00ec0..a885a24 100644 --- a/gcc/testsuite/g++.dg/cpp0x/nsdmi-template14.C +++ b/gcc/testsuite/g++.dg/cpp0x/nsdmi-template14.C @@ -3,14 +3,14 @@ template<int> struct A { - int i = (A<0>(), 0); // { dg-error "recursive instantiation of non-static data" } + int i = (A<0>(), 0); // { dg-error "recursive instantiation of default" } }; A<0> a; template<int N> struct B { - B* p = new B<N>; // { dg-error "recursive instantiation of non-static data" } + B* p = new B<N>; // { dg-error "recursive instantiation of default" } }; B<1> x; diff --git a/gcc/testsuite/g++.dg/cpp0x/nsdmi10.C b/gcc/testsuite/g++.dg/cpp0x/nsdmi10.C index 56f9ff0..d8588b7 100644 --- a/gcc/testsuite/g++.dg/cpp0x/nsdmi10.C +++ b/gcc/testsuite/g++.dg/cpp0x/nsdmi10.C @@ -6,7 +6,7 @@ struct A1 { int y1 = 1; }; - A1(const B1& opts = B1()) {} // { dg-error "constructor" } + A1(const B1& opts = B1()) {} // { dg-error "default member initializer" } }; struct A2 { @@ -14,5 +14,5 @@ struct A2 { int x2, y2 = 1; }; - A2(const B2& opts = B2()) {} // { dg-error "constructor" } + A2(const B2& opts = B2()) {} // { dg-error "default member initializer" } }; diff --git a/gcc/testsuite/g++.dg/cpp0x/sfinae59.C b/gcc/testsuite/g++.dg/cpp0x/sfinae59.C new file mode 100644 index 0000000..d1c730b --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/sfinae59.C @@ -0,0 +1,19 @@ +// PR c++/81359 +// { dg-do compile { target c++11 } } + +template<typename _Tp, typename = decltype(_Tp())> +static int test(int); + +template<typename> +static void test(...); + +template <class T, class = decltype(test<T>(0))> +struct A { }; + +struct B +{ + struct C { + int i = 0; + }; + A<C> a; +}; |