174989affSNico Weber // Test the handle_sigfpe option.
274989affSNico Weber // RUN: %clangxx %s -o %t
374989affSNico Weber // RUN:                               not         %run %t 2>&1 | FileCheck --check-prefix=CHECK1 %s
474989affSNico Weber // RUN: %env_tool_opts=handle_sigfpe=0 not --crash %run %t 2>&1 | FileCheck --check-prefix=CHECK0 %s
574989affSNico Weber // RUN: %env_tool_opts=handle_sigfpe=1 not         %run %t 2>&1 | FileCheck --check-prefix=CHECK1 %s
674989affSNico Weber 
774989affSNico Weber // FIXME: seems to fail on ARM
874989affSNico Weber // REQUIRES: x86_64-target-arch
974989affSNico Weber #include <assert.h>
1074989affSNico Weber #include <stdio.h>
1174989affSNico Weber #include <sanitizer/asan_interface.h>
1274989affSNico Weber 
death()1374989affSNico Weber void death() {
1474989affSNico Weber   fprintf(stderr, "DEATH CALLBACK\n");
1574989affSNico Weber }
1674989affSNico Weber 
main(int argc,char ** argv)1774989affSNico Weber int main(int argc, char **argv) {
1874989affSNico Weber   __sanitizer_set_death_callback(death);
1974989affSNico Weber   volatile int one = 1;
2074989affSNico Weber   volatile int zero = 0;
2174989affSNico Weber   volatile int sink;
2274989affSNico Weber   sink = one / zero;
2374989affSNico Weber }
2474989affSNico Weber 
2574989affSNico Weber // CHECK0-NOT: Sanitizer:DEADLYSIGNAL
2674989affSNico Weber // CHECK1: ERROR: {{.*}}Sanitizer: FPE
27bb7ad98aSNico Weber // CHECK1: {{#[0-9]+.* main .*fpe\.cpp}}:[[@LINE-5]]
2874989affSNico Weber // CHECK1: DEATH CALLBACK
29*ac3dce59SMax Moroz // CHECK0-NOT: {{.*}}Sanitizer: FPE
30