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