(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
guality/
pr67192.c
       1  /* PR debug/67192 */
       2  /* { dg-do run } */
       3  /* { dg-options "-g -Wmisleading-indentation" } */
       4  
       5  volatile int cnt = 0;
       6  
       7  __attribute__((noinline, noclone)) static int
       8  last (void)
       9  {
      10    return ++cnt % 5 == 0;
      11  }
      12  
      13  __attribute__((noinline, noclone)) static void
      14  do_it (void)
      15  {
      16    asm volatile ("" : : "r" (&cnt) : "memory");
      17  }
      18  
      19  __attribute__((noinline, noclone)) static void
      20  f1 (void)
      21  {
      22    for (;; do_it())
      23      {
      24        if (last ())
      25  	break;
      26      }
      27    do_it (); /* { dg-final { gdb-test . "cnt" "5" } } */
      28  }
      29  
      30  __attribute__((noinline, noclone)) static void
      31  f2 (void)
      32  {
      33    while (1)
      34      {
      35        if (last ())
      36  	break;
      37        do_it ();
      38      }
      39    do_it (); /* { dg-final { gdb-test . "cnt" "10" } } */
      40  }
      41  
      42  __attribute__((noinline, noclone)) static void
      43  f3 (void)
      44  {
      45    for (;; do_it())
      46      if (last ())
      47        break;
      48    do_it (); /* { dg-final { gdb-test . "cnt" "15" } } */
      49  }
      50  
      51  __attribute__((noinline, noclone)) static void
      52  f4 (void)
      53  {
      54    while (1) /* { dg-final { gdb-test . "cnt" "15" } } */
      55      if (last ())
      56        break;
      57      else
      58        do_it ();
      59    do_it (); /* { dg-final { gdb-test . "cnt" "20" } } */
      60  }
      61  
      62  void (*volatile fnp1) (void) = f1;
      63  void (*volatile fnp2) (void) = f2;
      64  void (*volatile fnp3) (void) = f3;
      65  void (*volatile fnp4) (void) = f4;
      66  
      67  int
      68  main ()
      69  {
      70    asm volatile ("" : : "r" (&fnp1) : "memory");
      71    asm volatile ("" : : "r" (&fnp2) : "memory");
      72    asm volatile ("" : : "r" (&fnp3) : "memory");
      73    asm volatile ("" : : "r" (&fnp4) : "memory");
      74    fnp1 ();
      75    fnp2 ();
      76    fnp3 ();
      77    fnp4 ();
      78    return 0;
      79  }