aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAldy Hernandez <aldyh@redhat.com>2013-02-26 12:40:27 +0000
committerAldy Hernandez <aldyh@gcc.gnu.org>2013-02-26 12:40:27 +0000
commit6f2d959b9e7774bf79e3e8fb33143e2d980691c4 (patch)
treea130cd504c572cd0ea68502caca8947915824b5a
parentf1ad33546dc659604fd842520a9b4600cb966c75 (diff)
downloadgcc-6f2d959b9e7774bf79e3e8fb33143e2d980691c4.zip
gcc-6f2d959b9e7774bf79e3e8fb33143e2d980691c4.tar.gz
gcc-6f2d959b9e7774bf79e3e8fb33143e2d980691c4.tar.bz2
re PR c++/56419 (transactions in for-loops disappear)
PR c++/56419 * semantics.c (begin_transaction_stmt): Set TREE_SIDE_EFFECTS. (build_transaction_expr): Same. From-SVN: r196282
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/semantics.c2
-rw-r--r--gcc/testsuite/g++.dg/tm/pr56419.C13
3 files changed, 21 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index c2a2b3c..7ab31f3 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+2013-02-25 Aldy Hernandez <aldyh@redhat.com>
+
+ PR c++/56419
+ * semantics.c (begin_transaction_stmt): Set TREE_SIDE_EFFECTS.
+ (build_transaction_expr): Same.
+
2013-02-25 Jason Merrill <jason@redhat.com>
PR c++/56377
diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c
index 60271b5..9446f83 100644
--- a/gcc/cp/semantics.c
+++ b/gcc/cp/semantics.c
@@ -5108,6 +5108,7 @@ begin_transaction_stmt (location_t loc, tree *pcompound, int flags)
"transactional memory support enabled")));
TRANSACTION_EXPR_BODY (r) = push_stmt_list ();
+ TREE_SIDE_EFFECTS (r) = 1;
return r;
}
@@ -5157,6 +5158,7 @@ build_transaction_expr (location_t loc, tree expr, int flags, tree noex)
ret = build1 (TRANSACTION_EXPR, TREE_TYPE (expr), expr);
if (flags & TM_STMT_ATTR_RELAXED)
TRANSACTION_EXPR_RELAXED (ret) = 1;
+ TREE_SIDE_EFFECTS (ret) = 1;
SET_EXPR_LOCATION (ret, loc);
return ret;
}
diff --git a/gcc/testsuite/g++.dg/tm/pr56419.C b/gcc/testsuite/g++.dg/tm/pr56419.C
new file mode 100644
index 0000000..c9a33a8
--- /dev/null
+++ b/gcc/testsuite/g++.dg/tm/pr56419.C
@@ -0,0 +1,13 @@
+// { dg-do compile }
+// { dg-options "-fgnu-tm" }
+
+int x = 0;
+int inc_func(int i) {
+ for (int j = 0; j < i; ++j)
+ {
+ __transaction_atomic { x+=1; }
+ }
+ return 0;
+}
+
+// { dg-final { scan-assembler "ITM_commitTransaction" } }