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