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
7int x;
8
9__attribute__((noinline, noclone))
10void
11barrier (void)
12{
13  asm volatile ("" : : : "memory");
14  if (++x == 3)
15    __builtin_exit (0);
16}
17
18int
19main (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