diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/cp/except.c | 4 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/noexcept43.C | 10 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/noexcept44.C | 8 |
5 files changed, 37 insertions, 2 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index c958318..0afd0e6 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,12 @@ +2019-06-21 Marek Polacek <polacek@redhat.com> + + PR c++/90490 - fix decltype issues in noexcept-specifier. + * except.c (build_noexcept_spec): Call + instantiate_non_dependent_expr_sfinae before + build_converted_constant_expr instead of calling + instantiate_non_dependent_expr after it. Add + processing_template_decl_sentinel. + 2019-06-21 Jakub Jelinek <jakub@redhat.com> PR c++/90950 diff --git a/gcc/cp/except.c b/gcc/cp/except.c index 892d520..71f5d60 100644 --- a/gcc/cp/except.c +++ b/gcc/cp/except.c @@ -1285,8 +1285,10 @@ build_noexcept_spec (tree expr, tsubst_flags_t complain) if (TREE_CODE (expr) != DEFERRED_NOEXCEPT && !value_dependent_expression_p (expr)) { + expr = instantiate_non_dependent_expr_sfinae (expr, complain); + /* Don't let convert_like_real create more template codes. */ + processing_template_decl_sentinel s; expr = build_converted_constant_bool_expr (expr, complain); - expr = instantiate_non_dependent_expr (expr); expr = cxx_constant_value (expr); } if (TREE_CODE (expr) == INTEGER_CST) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 2c80ac4..b56645f 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2019-06-21 Marek Polacek <polacek@redhat.com> + + PR c++/90490 - fix decltype issues in noexcept-specifier. + * g++.dg/cpp0x/noexcept43.C: New test. + * g++.dg/cpp0x/noexcept44.C: New test. + 2019-06-21 Matthew Beliveau <mbelivea@redhat.com> PR c++/90875 - added -Wswitch-outside-range option @@ -13,7 +19,7 @@ 2019-06-21 Jeff Law <law@redhat.com> - PR tree-optimization/90949 + PR tree-optimization/90949 * gcc.c-torture/execute/pr90949.c: New test. 2019-06-21 Marek Polacek <polacek@redhat.com> diff --git a/gcc/testsuite/g++.dg/cpp0x/noexcept43.C b/gcc/testsuite/g++.dg/cpp0x/noexcept43.C new file mode 100644 index 0000000..faa7d14 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/noexcept43.C @@ -0,0 +1,10 @@ +// PR c++/90490 +// { dg-do compile { target c++11 } } + +struct R { constexpr operator bool() { return false;} }; + +template <typename> +struct S { + void g() noexcept(decltype(R{ }) { }) { + } +}; diff --git a/gcc/testsuite/g++.dg/cpp0x/noexcept44.C b/gcc/testsuite/g++.dg/cpp0x/noexcept44.C new file mode 100644 index 0000000..78c9d12 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/noexcept44.C @@ -0,0 +1,8 @@ +// PR c++/90490 +// { dg-do compile { target c++11 } } + +template <typename> +struct S { + void g() noexcept(decltype(int{ }) { }) { + } +}; |