aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog9
-rw-r--r--gcc/cp/except.c4
-rw-r--r--gcc/testsuite/ChangeLog8
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/noexcept43.C10
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/noexcept44.C8
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{ }) { }) {
+ }
+};