diff options
author | Jason Merrill <jason@redhat.com> | 2019-04-17 23:32:24 -0400 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2019-04-17 23:32:24 -0400 |
commit | 5a58e967b526eba3d9b850cd7bc76dcc580bf708 (patch) | |
tree | 844ecad256d70dffae00df101a967a92775604d0 /libstdc++-v3/testsuite/23_containers/forward_list | |
parent | 19caab83ca8b30a1a37ec968aaea8086b096d113 (diff) | |
download | gcc-5a58e967b526eba3d9b850cd7bc76dcc580bf708.tar.gz |
PR c++/90047 - ICE with enable_if alias template.
In order to make alias templates useful for SFINAE we instantiate them under
the prevailing 'complain' argument, so an error encountered while
instantiating during SFINAE context is silent. The problem in this PR comes
when we later look up the erroneous instantiation and don't give an error at
that point. Fixed by not adding an erroneous instantiation to the hash
table, so we instantiate it again when needed and get the error. This
required changes to a number of tests, which previously said "substitution
failed:" with no explanation of what the failure was; now we properly
explain.
* pt.c (tsubst_decl) [TYPE_DECL]: Don't put an erroneous decl in the
hash table when we're in SFINAE context.
From-SVN: r270433
Diffstat (limited to 'libstdc++-v3/testsuite/23_containers/forward_list')
4 files changed, 8 insertions, 0 deletions
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/requirements/dr438/assign_neg.cc b/libstdc++-v3/testsuite/23_containers/forward_list/requirements/dr438/assign_neg.cc index a45833b1799..e5b680e5bdf 100644 --- a/libstdc++-v3/testsuite/23_containers/forward_list/requirements/dr438/assign_neg.cc +++ b/libstdc++-v3/testsuite/23_containers/forward_list/requirements/dr438/assign_neg.cc @@ -30,3 +30,5 @@ void f() test_type l; l.assign(10, 1); // { dg-error "no matching" } } + +// { dg-prune-output "iterator_traits" } diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/requirements/dr438/constructor_1_neg.cc b/libstdc++-v3/testsuite/23_containers/forward_list/requirements/dr438/constructor_1_neg.cc index c362d8c3f19..e0147fe42a3 100644 --- a/libstdc++-v3/testsuite/23_containers/forward_list/requirements/dr438/constructor_1_neg.cc +++ b/libstdc++-v3/testsuite/23_containers/forward_list/requirements/dr438/constructor_1_neg.cc @@ -24,3 +24,5 @@ void f() typedef std::forward_list<std::forward_list<int> > test_type; test_type l(10, 1); // { dg-error "no matching" } } + +// { dg-prune-output "iterator_traits" } diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/requirements/dr438/constructor_2_neg.cc b/libstdc++-v3/testsuite/23_containers/forward_list/requirements/dr438/constructor_2_neg.cc index e7b41f93964..9a1a5ad6a0a 100644 --- a/libstdc++-v3/testsuite/23_containers/forward_list/requirements/dr438/constructor_2_neg.cc +++ b/libstdc++-v3/testsuite/23_containers/forward_list/requirements/dr438/constructor_2_neg.cc @@ -25,3 +25,5 @@ void f() typedef std::forward_list<std::forward_list<std::pair<char, char> > > test_type; test_type l('a', 'b'); // { dg-error "no matching" } } + +// { dg-prune-output "iterator_traits" } diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/requirements/dr438/insert_neg.cc b/libstdc++-v3/testsuite/23_containers/forward_list/requirements/dr438/insert_neg.cc index 18897779742..0a48debdec3 100644 --- a/libstdc++-v3/testsuite/23_containers/forward_list/requirements/dr438/insert_neg.cc +++ b/libstdc++-v3/testsuite/23_containers/forward_list/requirements/dr438/insert_neg.cc @@ -30,3 +30,5 @@ void f() test_type l; l.insert_after(l.begin(), 10, 1); // { dg-error "no matching" } } + +// { dg-prune-output "iterator_traits" } |