1799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar// Test the handle_sigfpe option. 2799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar// RUN: %clang %s -o %t 3799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar// RUN: not %run %t 2>&1 | FileCheck --check-prefix=CHECK1 %s 4799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar// RUN: %env_tool_opts=handle_sigfpe=0 not --crash %run %t 2>&1 | FileCheck --check-prefix=CHECK0 %s 5799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar// RUN: %env_tool_opts=handle_sigfpe=1 not %run %t 2>&1 | FileCheck --check-prefix=CHECK1 %s 6799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar// FIXME: implement in other sanitizers, not just asan. 7799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar// XFAIL: msan 8799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar// XFAIL: lsan 9799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar// XFAIL: tsan 10799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar// 11799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar// FIXME: seems to fail on ARM 12c58a43648cd6121c51a2e795a28e2ef90d7813e6Pirama Arumuga Nainar// REQUIRES: x86_64-target-arch 13799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar#include <assert.h> 14799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar#include <stdio.h> 15799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar#include <sanitizer/asan_interface.h> 16799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar 17799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainarvoid death() { 18799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar fprintf(stderr, "DEATH CALLBACK\n"); 19799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar} 20799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar 21799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainarint main(int argc, char **argv) { 22799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar __sanitizer_set_death_callback(death); 23799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar volatile int one = 1; 24799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar volatile int zero = 0; 25799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar volatile int sink; 26799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar sink = one / zero; 27799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar} 28799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar// CHECK1: ERROR: {{.*}}Sanitizer: 29799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar// CHECK1: DEATH CALLBACK 30799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar// CHECK0-NOT: Sanitizer 31