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()9 int 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