/* { dg-do run } */ /* { dg-options "-O2 -ftree-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); }