1 /* { dg-do compile } */ 2 /* { dg-options "-fgnu-tm -fdump-tree-ealias -O" } */ 3 4 typedef __UINTPTR_TYPE__ ptrcast; 5 6 #if (__SIZEOF_POINTER__ == 4) 7 #define TM_LOAD __builtin__ITM_RU4 8 #define TM_STORE __builtin__ITM_WU4 9 #elif (__SIZEOF_POINTER__ == 8) 10 #define TM_LOAD __builtin__ITM_RU8 11 #define TM_STORE __builtin__ITM_WU8 12 #else 13 #error Add target support here 14 #endif 15 16 void candy (); 17 18 struct mystruct_type { 19 ptrcast *ptr; 20 } *mystruct, *mystruct2; 21 22 ptrcast *someptr, **pp; 23 ptrcast ui; 24 25 void tootsie_roll () __attribute__((transaction_wrap (candy))); tootsie_roll()26void tootsie_roll () 27 { 28 ui = TM_LOAD (&mystruct); 29 mystruct2 = (struct mystruct_type *) ui; 30 31 pp = &mystruct2->ptr; 32 } 33 foo()34void foo() 35 { 36 candy(); 37 } 38 39 /* { dg-final { scan-tree-dump-times "ui\..* = .*same as mystruct" 1 "ealias" } } */ 40 /* { dg-final { scan-tree-dump-times "mystruct.*ESCAPED" 1 "ealias" } } */ 41 /* { dg-final { scan-tree-dump-times "pp = .*same as mystruct" 1 "ealias" } } */ 42 /* { dg-final { cleanup-tree-dump "ealias" } } */ 43