From 6f2d959b9e7774bf79e3e8fb33143e2d980691c4 Mon Sep 17 00:00:00 2001
From: Aldy Hernandez <aldyh@redhat.com>
Date: Tue, 26 Feb 2013 12:40:27 +0000
Subject: [PATCH] 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
---
 gcc/cp/ChangeLog                  |  6 ++++++
 gcc/cp/semantics.c                |  2 ++
 gcc/testsuite/g++.dg/tm/pr56419.C | 13 +++++++++++++
 3 files changed, 21 insertions(+)
 create mode 100644 gcc/testsuite/g++.dg/tm/pr56419.C

diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index c2a2b3c223a6..7ab31f3e8ad6 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 60271b511ad0..9446f831bd5f 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 000000000000..c9a33a813198
--- /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" } }
-- 
GitLab