1/* { dg-do compile } */
2/* { dg-options "-fgnu-tm -O -fdump-tree-tmmark" } */
3
4extern int test(void) __attribute__((transaction_safe));
5extern int something (void);
6extern void *malloc (__SIZE_TYPE__) __attribute__((malloc,transaction_safe));
7
8struct large { int foo[500]; };
9
10int f()
11{
12  int *p1, *p2, *p3;
13
14  p1 = malloc (sizeof (*p1)*5000);
15  __transaction_atomic {
16    *p1 = 0;
17
18    p2 = malloc (sizeof (*p2)*6000);
19    *p2 = 1;
20
21    /* p3 = PHI (p1, p2) */
22    if (test())
23      p3 = p1;
24    else
25      p3 = p2;
26
27    /* Since both p1 and p2 are thread-private, we can inherit the
28       logging already done.  No ITM_W* instrumentation necessary.  */
29    *p3 = 555;
30  }
31  return p3[something()];
32}
33
34/* { dg-final { scan-tree-dump-times "ITM_WU" 0 "tmmark" } } */
35/* { dg-final { cleanup-tree-dump "tmmark" } } */
36