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