aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarek Polacek <polacek@redhat.com>2017-03-20 15:02:09 +0000
committerMarek Polacek <mpolacek@gcc.gnu.org>2017-03-20 15:02:09 +0000
commit92377255c1a2591085f9cd87e4ddc4bd34ba17a5 (patch)
treee6d18fb9dc27873baedf50eb40857bd031e0b288
parenta74560ebeb9e088e410139595a6ca74f6720b502 (diff)
downloadgcc-92377255c1a2591085f9cd87e4ddc4bd34ba17a5.zip
gcc-92377255c1a2591085f9cd87e4ddc4bd34ba17a5.tar.gz
gcc-92377255c1a2591085f9cd87e4ddc4bd34ba17a5.tar.bz2
PR c++/80059 - ICE with noexcept and __transaction_atomic
PR c++/80059 - ICE with noexcept and __transaction_atomic * except.c (build_must_not_throw_expr): Call instantiate_non_dependent_expr_sfinae. * g++.dg/tm/pr80059-2.C: New test. * g++.dg/tm/pr80059.C: New test. Co-Authored-By: Paolo Carlini <paolo.carlini@oracle.com> From-SVN: r246279
-rw-r--r--gcc/cp/ChangeLog7
-rw-r--r--gcc/cp/except.c1
-rw-r--r--gcc/testsuite/ChangeLog7
-rw-r--r--gcc/testsuite/g++.dg/tm/pr80059-2.C13
-rw-r--r--gcc/testsuite/g++.dg/tm/pr80059.C13
5 files changed, 41 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 7ffd818..a356fc7 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,10 @@
+2017-03-20 Marek Polacek <polacek@redhat.com>
+ Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR c++/80059 - ICE with noexcept and __transaction_atomic
+ * except.c (build_must_not_throw_expr): Call
+ instantiate_non_dependent_expr_sfinae.
+
2017-03-19 Jason Merrill <jason@redhat.com>
PR c++/80084 - wrong C++17 decomposition by reference of parameter.
diff --git a/gcc/cp/except.c b/gcc/cp/except.c
index 45d00cc..f65b717 100644
--- a/gcc/cp/except.c
+++ b/gcc/cp/except.c
@@ -271,6 +271,7 @@ build_must_not_throw_expr (tree body, tree cond)
cond = perform_implicit_conversion_flags (boolean_type_node, cond,
tf_warning_or_error,
LOOKUP_NORMAL);
+ cond = instantiate_non_dependent_expr (cond);
cond = cxx_constant_value (cond);
if (integer_zerop (cond))
return body;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 2a76758..abfaa5c 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,10 @@
+2017-03-20 Marek Polacek <polacek@redhat.com>
+ Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR c++/80059 - ICE with noexcept and __transaction_atomic
+ * g++.dg/tm/pr80059-2.C: New test.
+ * g++.dg/tm/pr80059.C: New test.
+
2017-03-20 Martin Liska <mliska@suse.cz>
PR middle-end/79753
diff --git a/gcc/testsuite/g++.dg/tm/pr80059-2.C b/gcc/testsuite/g++.dg/tm/pr80059-2.C
new file mode 100644
index 0000000..10edb3a
--- /dev/null
+++ b/gcc/testsuite/g++.dg/tm/pr80059-2.C
@@ -0,0 +1,13 @@
+// PR c++/80059
+// { dg-do compile { target c++11 } }
+// { dg-options "-fgnu-tm" }
+
+template<typename T> int foo(T b)
+{
+ return __transaction_atomic noexcept(b) (0); // { dg-error "is not a constant expression" }
+}
+
+void bar()
+{
+ foo(true);
+}
diff --git a/gcc/testsuite/g++.dg/tm/pr80059.C b/gcc/testsuite/g++.dg/tm/pr80059.C
new file mode 100644
index 0000000..1b705b6
--- /dev/null
+++ b/gcc/testsuite/g++.dg/tm/pr80059.C
@@ -0,0 +1,13 @@
+// PR c++/80059
+// { dg-do compile { target c++11 } }
+// { dg-options "-fgnu-tm" }
+
+template<typename> int foo(bool b)
+{
+ return __transaction_atomic noexcept(b) (0); // { dg-error "is not a constant expression" }
+}
+
+void bar()
+{
+ foo<int>(true);
+}