aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorMarek Polacek <mpolacek@gcc.gnu.org>2013-09-25 07:48:47 +0000
committerMarek Polacek <mpolacek@gcc.gnu.org>2013-09-25 07:48:47 +0000
commit550dfe7f28a031f5ffe59c423c7790d219414ff6 (patch)
tree4cf8e83b7c042a6b7a6eba0f1e6ae6fb83762c51 /gcc
parent28d18db363050e2e8122d202cd59d131a3ffa167 (diff)
downloadgcc-550dfe7f28a031f5ffe59c423c7790d219414ff6.zip
gcc-550dfe7f28a031f5ffe59c423c7790d219414ff6.tar.gz
gcc-550dfe7f28a031f5ffe59c423c7790d219414ff6.tar.bz2
re PR c++/58516 (ICE with __transaction_atomic)
PR c++/58516 cp/ * semantics.c (finish_transaction_stmt): Check for EXPR_P before setting the expr location. testsuite/ * g++.dg/tm/pr58516.C: New test. From-SVN: r202883
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/semantics.c4
-rw-r--r--gcc/testsuite/ChangeLog11
-rw-r--r--gcc/testsuite/g++.dg/tm/pr58516.C7
4 files changed, 24 insertions, 4 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index ec40ed5..5cbc070 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+2013-09-25 Marek Polacek <polacek@redhat.com>
+
+ PR c++/58516
+ * semantics.c (finish_transaction_stmt): Check for EXPR_P before
+ setting the expr location.
+
2013-09-23 Adam Butcher <adam@jessamine.co.uk>
PR c++/58500
diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c
index 0299b69..1327794 100644
--- a/gcc/cp/semantics.c
+++ b/gcc/cp/semantics.c
@@ -5199,7 +5199,9 @@ finish_transaction_stmt (tree stmt, tree compound_stmt, int flags, tree noex)
{
tree body = build_must_not_throw_expr (TRANSACTION_EXPR_BODY (stmt),
noex);
- SET_EXPR_LOCATION (body, EXPR_LOCATION (TRANSACTION_EXPR_BODY (stmt)));
+ /* This may not be true when the STATEMENT_LIST is empty. */
+ if (EXPR_P (body))
+ SET_EXPR_LOCATION (body, EXPR_LOCATION (TRANSACTION_EXPR_BODY (stmt)));
TREE_SIDE_EFFECTS (body) = 1;
TRANSACTION_EXPR_BODY (stmt) = body;
}
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index dc1f282..68e38cc9 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,8 +1,13 @@
+2013-09-25 Marek Polacek <polacek@redhat.com>
+
+ PR c++/58516
+ * g++.dg/tm/pr58516.C: New test.
+
2013-09-24 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
- * lib/target-supports.exp (check_effective_target_arm_cond_exec):
- New procedure.
- * gcc.target/arm/minmax_minus.c: Check for cond_exec target.
+ * lib/target-supports.exp (check_effective_target_arm_cond_exec):
+ New procedure.
+ * gcc.target/arm/minmax_minus.c: Check for cond_exec target.
2013-09-24 Richard Biener <rguenther@suse.de>
diff --git a/gcc/testsuite/g++.dg/tm/pr58516.C b/gcc/testsuite/g++.dg/tm/pr58516.C
new file mode 100644
index 0000000..b1ada3c
--- /dev/null
+++ b/gcc/testsuite/g++.dg/tm/pr58516.C
@@ -0,0 +1,7 @@
+// { dg-do compile }
+// { dg-options "-std=c++11 -fgnu-tm" }
+
+void foo()
+{
+ __transaction_atomic noexcept(false) {}
+}