| /* { dg-do run } */ |
| /* { dg-options "-O2 -fno-tree-tail-merge" } */ |
| |
| struct node |
| { |
| struct node *next; |
| struct node *prev; |
| }; |
| |
| struct node node; |
| |
| struct head |
| { |
| struct node *first; |
| }; |
| |
| struct head heads[5]; |
| |
| int k = 2; |
| |
| struct head *head = &heads[2]; |
| |
| int |
| main () |
| { |
| struct node *p; |
| |
| node.next = (void*)0; |
| |
| node.prev = (void *)head; |
| |
| head->first = &node; |
| |
| struct node *n = head->first; |
| |
| struct head *h = &heads[k]; |
| |
| heads[2].first = n->next; |
| |
| if ((void*)n->prev == (void *)h) |
| p = h->first; |
| else |
| /* Dead tbaa-unsafe load from ((struct node *)&heads[2])->next. */ |
| p = n->prev->next; |
| |
| return !(p == (void*)0); |
| } |