1 /* { dg-do run } */
2 /* { dg-options "-fsanitize=integer-divide-by-zero -Wno-div-by-zero -fno-sanitize-recover=integer-divide-by-zero" } */
3 /* { dg-shouldfail "ubsan" } */
4 
5 #include <stdio.h>
6 
7 int x;
8 
9 __attribute__((noinline, noclone))
10 void
barrier(void)11 barrier (void)
12 {
13   asm volatile ("" : : : "memory");
14   if (++x == 3)
15     __builtin_exit (0);
16 }
17 
18 int
main(void)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" } */
42