111
|
1 /* { dg-do compile } */
|
|
2 /* { dg-options "-fgnu-tm -O2" } */
|
|
3 /* This test case triggered block sharing between the two transactions. */
|
|
4
|
|
5 void func1 (void) __attribute__ ((transaction_callable, used));
|
|
6 long func2 (void) __attribute__ ((transaction_callable, used));
|
|
7 unsigned long rand (void);
|
|
8
|
|
9 void client_run (void)
|
|
10 {
|
|
11 long types[100];
|
|
12 long i;
|
|
13
|
|
14 for (i = 0; i < 100; i++)
|
|
15 {
|
|
16 long action = rand ();
|
|
17
|
|
18 switch (action)
|
|
19 {
|
|
20 case 0:
|
|
21 {
|
|
22 __transaction_relaxed
|
|
23 {
|
|
24 long bill = func2 ();
|
|
25 if (bill >= 0)
|
|
26 {
|
|
27 func1 ();
|
|
28 }
|
|
29 }
|
|
30 break;
|
|
31 }
|
|
32
|
|
33 case 1:
|
|
34 {
|
|
35 long n;
|
|
36 __transaction_relaxed
|
|
37 {
|
|
38 for (n = 0; n < 100; n++)
|
|
39 {
|
|
40 long t = types[n];
|
|
41 switch (t)
|
|
42 {
|
|
43 case 0:
|
|
44 func1 ();
|
|
45 break;
|
|
46 }
|
|
47 }
|
|
48 }
|
|
49 break;
|
|
50 }
|
|
51 }
|
|
52 }
|
|
53 }
|