c++: make build_throw SFINAE-friendly [PR98388]
Here the problem is that we give hard errors while substituting template parameters during overload resolution of is_throwable which has an invalid throw in decltype. The backtrace shows that fn_type_unification -> instantiate_template -> tsubst* passes complain=0 as expected, but build_throw doesn't have a complain parameter. So let's add one. Also remove a redundant local variable which I should have removed in my P2266 patch. There's still one problem for which I opened <https://gcc.gnu.org/PR113853>. We need to patch up treat_lvalue_as_rvalue_p and remove the dg-bogus. Thanks to Patrick for notifying me of this PR. This doesn't fully fix 113789; there I think I'll have to figure our why a candidate wasn't discarded from the overload set. PR c++/98388 gcc/cp/ChangeLog: * coroutines.cc (coro_rewrite_function_body): Pass tf_warning_or_error to build_throw. (morph_fn_to_coro): Likewise. * cp-tree.h (build_throw): Adjust. * except.cc (expand_end_catch_block): Pass tf_warning_or_error to build_throw. (build_throw): Add a tsubst_flags_t parameter. Use it. Remove redundant variable. Guard an inform call. * parser.cc (cp_parser_throw_expression): Pass tf_warning_or_error to build_throw. * pt.cc (tsubst_expr) <case THROW_EXPR>: Pass complain to build_throw. libcc1/ChangeLog: * libcp1plugin.cc (plugin_build_unary_expr): Pass tf_error to build_throw. gcc/testsuite/ChangeLog: * g++.dg/cpp0x/sfinae69.C: New test.
Showing
- gcc/cp/coroutines.cc 2 additions, 2 deletionsgcc/cp/coroutines.cc
- gcc/cp/cp-tree.h 2 additions, 1 deletiongcc/cp/cp-tree.h
- gcc/cp/except.cc 14 additions, 19 deletionsgcc/cp/except.cc
- gcc/cp/parser.cc 1 addition, 1 deletiongcc/cp/parser.cc
- gcc/cp/pt.cc 1 addition, 1 deletiongcc/cp/pt.cc
- gcc/testsuite/g++.dg/cpp0x/sfinae69.C 21 additions, 0 deletionsgcc/testsuite/g++.dg/cpp0x/sfinae69.C
- libcc1/libcp1plugin.cc 2 additions, 2 deletionslibcc1/libcp1plugin.cc
Loading
Please register or sign in to comment