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()26 void tootsie_roll ()
27 {
28   ui = TM_LOAD  (&mystruct);
29   mystruct2 = (struct mystruct_type *) ui;
30 
31   pp = &mystruct2->ptr;
32 }
33 
foo()34 void 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