(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
pr62030.c
       1  /* { dg-do run } */
       2  /* { dg-options "-O2" } */
       3  
       4  extern void abort (void);
       5  
       6  struct node
       7  {
       8    struct node *next;
       9    struct node *prev;
      10  };
      11  
      12  struct node node;
      13  
      14  struct head
      15  {
      16    struct node *first;
      17  };
      18  
      19  struct head heads[5];
      20  
      21  int k = 2;
      22  
      23  struct head *head = &heads[2];
      24  
      25  static int __attribute__((noinline))
      26  foo (void)
      27  {
      28    node.prev = (void *)head;
      29    head->first = &node;
      30  
      31    struct node *n = head->first;
      32    struct head *h = &heads[k];
      33    struct node *next = n->next;
      34  
      35    if (n->prev == (void *)h)
      36      h->first = next;
      37    else
      38      n->prev->next = next;
      39  
      40    n->next = h->first;
      41    return n->next == &node;
      42  }
      43  
      44  int
      45  main (void)
      46  {
      47    if (foo ())
      48      abort ();
      49    return 0;
      50  }