1/* { dg-do compile } */ 2/* { dg-options "-fgnu-tm -fdump-tree-ealias -O" } */ 3 4typedef __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 16void candy (); 17 18struct mystruct_type { 19 ptrcast *ptr; 20} *mystruct, *mystruct2; 21 22ptrcast *someptr, **pp; 23ptrcast ui; 24 25void tootsie_roll () __attribute__((transaction_wrap (candy))); 26void tootsie_roll () 27{ 28 ui = TM_LOAD (&mystruct); 29 mystruct2 = (struct mystruct_type *) ui; 30 31 pp = &mystruct2->ptr; 32} 33 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