(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
pr22335-2.c
       1  /* { dg-do compile } */
       2  /* { dg-options "-O2"  } */
       3  void abort(void) __attribute__((__noreturn__));
       4  typedef struct {
       5    int container;
       6  } edge_iterator;
       7  struct ls_expr
       8  {
       9    int index;
      10    int stores;
      11    struct ls_expr * next;
      12  };
      13  struct ls_expr * pre_ldst_mems;
      14  edge_iterator ei;
      15  void
      16  store_motion (void)
      17  {
      18    struct ls_expr * ptr, **prev_next_ptr_ptr;
      19    edge_iterator ei1;
      20    edge_iterator ei2;
      21    int a = ptr != ((void *)0);
      22    for (ptr = pre_ldst_mems, prev_next_ptr_ptr = &pre_ldst_mems;
      23         ptr != ((void *)0);
      24         ptr = *prev_next_ptr_ptr)
      25      if (!((ptr)->stores))
      26       *prev_next_ptr_ptr = ptr->next;
      27      else
      28        prev_next_ptr_ptr = &ptr->next;
      29  
      30    for (ptr = pre_ldst_mems; ptr != 0; ptr = ptr->next)
      31      ;
      32    ei1 = ei;
      33    ei2 = ei1;
      34    if (!ei2.container)
      35      abort ();
      36    ei2 = ei1;
      37    if (!ei2.container)
      38      abort ();
      39  }