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