aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.9/gcc/testsuite/c-c++-common/tm/20111206.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc-4.9/gcc/testsuite/c-c++-common/tm/20111206.c')
-rw-r--r--gcc-4.9/gcc/testsuite/c-c++-common/tm/20111206.c53
1 files changed, 53 insertions, 0 deletions
diff --git a/gcc-4.9/gcc/testsuite/c-c++-common/tm/20111206.c b/gcc-4.9/gcc/testsuite/c-c++-common/tm/20111206.c
new file mode 100644
index 000000000..74a551966
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/c-c++-common/tm/20111206.c
@@ -0,0 +1,53 @@
+/* { dg-do compile } */
+/* { dg-options "-fgnu-tm -O2" } */
+/* This test case triggered block sharing between the two transactions. */
+
+void func1 (void) __attribute__ ((transaction_callable, used));
+long func2 (void) __attribute__ ((transaction_callable, used));
+unsigned long rand (void);
+
+void client_run (void)
+{
+ long types[100];
+ long i;
+
+ for (i = 0; i < 100; i++)
+ {
+ long action = rand ();
+
+ switch (action)
+ {
+ case 0:
+ {
+ __transaction_relaxed
+ {
+ long bill = func2 ();
+ if (bill >= 0)
+ {
+ func1 ();
+ }
+ }
+ break;
+ }
+
+ case 1:
+ {
+ long n;
+ __transaction_relaxed
+ {
+ for (n = 0; n < 100; n++)
+ {
+ long t = types[n];
+ switch (t)
+ {
+ case 0:
+ func1 ();
+ break;
+ }
+ }
+ }
+ break;
+ }
+ }
+ }
+}