1 /* { dg-do run } */ 2 3 extern void abort (void); 4 5 struct node { struct node *next, *prev; } node; 6 struct head { struct node *first; } heads[5]; 7 int k = 2; 8 struct head *head = &heads[2]; 9 10 static int __attribute__((noinline)) foo()11foo() 12 { 13 node.prev = (void *)head; 14 head->first = &node; 15 16 struct node *n = head->first; 17 struct head *h = &heads[k]; 18 19 if (n->prev == (void *)h) 20 h->first = n->next; 21 else 22 n->prev->next = n->next; 23 24 n->next = h->first; 25 return n->next == &node; 26 } 27 main()28int main() 29 { 30 if (foo ()) 31 abort (); 32 return 0; 33 } 34