| /* { dg-do run } */ | |
| extern void abort (void); | |
| struct node { struct node *next, *prev; } node; | |
| struct head { struct node *first; } heads[5]; | |
| int k = 2; | |
| struct head *head = &heads[2]; | |
| static int __attribute__((noinline)) | |
| foo() | |
| { | |
| node.prev = (void *)head; | |
| head->first = &node; | |
| struct node *n = head->first; | |
| struct head *h = &heads[k]; | |
| if (n->prev == (void *)h) | |
| h->first = n->next; | |
| else | |
| n->prev->next = n->next; | |
| n->next = h->first; | |
| return n->next == &node; | |
| } | |
| int main() | |
| { | |
| if (foo ()) | |
| abort (); | |
| return 0; | |
| } |