(root)/
gcc-13.2.0/
gcc/
testsuite/
c-c++-common/
ubsan/
div-by-zero-6.c
       1  /* { dg-do run } */
       2  /* { dg-options "-fsanitize=integer-divide-by-zero -Wno-div-by-zero" } */
       3  /* { dg-options "-fsanitize=integer-divide-by-zero -Wno-div-by-zero -Wno-volatile" { target c++ } } */
       4  
       5  #include <stdio.h>
       6  
       7  int x;
       8  
       9  __attribute__((noinline, noclone))
      10  void
      11  barrier (void)
      12  {
      13    asm volatile ("" : : : "memory");
      14    if (x)
      15      __builtin_exit (1);
      16  }
      17  
      18  int
      19  main (void)
      20  {
      21    volatile int a = 0;
      22    volatile long long int b = 0;
      23    volatile unsigned int c = 1;
      24  
      25    barrier (); fputs ("1st\n", stderr); barrier ();
      26    a / b;
      27    barrier (); fputs ("2nd\n", stderr); barrier ();
      28    0 / 0;
      29    barrier (); fputs ("3rd\n", stderr); barrier ();
      30    a / 0;
      31    barrier (); fputs ("4th\n", stderr); barrier ();
      32    0 / b;
      33    barrier (); fputs ("5th\n", stderr); barrier ();
      34    2 / --c;
      35    barrier (); fputs ("6th\n", stderr); barrier ();
      36  
      37    return 0;
      38  }
      39  
      40  /* { dg-output "1st(\n|\r\n|\r)" } */
      41  /* { dg-output "\[^\n\r]*division by zero\[^\n\r]*(\n|\r\n|\r)" } */
      42  /* { dg-output "2nd(\n|\r\n|\r)" } */
      43  /* { dg-output "\[^\n\r]*division by zero\[^\n\r]*(\n|\r\n|\r)" } */
      44  /* { dg-output "3rd(\n|\r\n|\r)" } */
      45  /* { dg-output "\[^\n\r]*division by zero\[^\n\r]*(\n|\r\n|\r)" } */
      46  /* { dg-output "4th(\n|\r\n|\r)" } */
      47  /* { dg-output "\[^\n\r]*division by zero\[^\n\r]*(\n|\r\n|\r)" } */
      48  /* { dg-output "5th(\n|\r\n|\r)" } */
      49  /* { dg-output "\[^\n\r]*division by zero\[^\n\r]*(\n|\r\n|\r)" } */
      50  /* { dg-output "6th" } */