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