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