1 /* { dg-do compile } */ 2 /* { dg-options "-fgnu-tm -O -fdump-tree-tmmark" } */ 3 4 extern int something(void) __attribute__((transaction_safe)); 5 extern void *malloc (__SIZE_TYPE__) __attribute__((malloc,transaction_safe)); 6 7 struct large { int foo[500]; }; 8 f()9int f() 10 { 11 int *p; 12 struct large *lp; 13 14 __transaction_atomic { 15 p = malloc (sizeof (*p) * 100); 16 lp = malloc (sizeof (*lp) * 100); 17 18 /* No instrumentation necessary; P and LP are transaction local. */ 19 p[5] = 123; 20 lp->foo[66] = 123; 21 22 if (something()) 23 __transaction_cancel; 24 } 25 return p[5]; 26 } 27 28 /* { dg-final { scan-tree-dump-times "ITM_WU" 0 "tmmark" } } */ 29 /* { dg-final { cleanup-tree-dump "tmmark" } } */ 30