xref: /llvm-project/compiler-rt/test/nsan/nan.cpp (revision 52ae891036e3ab1f668eb103c46ca57257901c6b)
151365212SAlexander Shaposhnikov // RUN: %clangxx_nsan -O0 -g %s -o %t
2*52ae8910SHarini0924 // RUN: env NSAN_OPTIONS=check_nan=true,halt_on_error=0 %run %t 2>&1 | FileCheck %s
351365212SAlexander Shaposhnikov 
451365212SAlexander Shaposhnikov // RUN: %clangxx_nsan -O3 -g %s -o %t
5*52ae8910SHarini0924 // RUN: env NSAN_OPTIONS=check_nan=true,halt_on_error=0 %run %t 2>&1 | FileCheck %s
651365212SAlexander Shaposhnikov 
751365212SAlexander Shaposhnikov // RUN: %clangxx_nsan -O0 -g %s -o %t
8*52ae8910SHarini0924 // RUN: env NSAN_OPTIONS=check_nan=true,halt_on_error=1 not %run %t
951365212SAlexander Shaposhnikov 
1051365212SAlexander Shaposhnikov #include <cmath>
1151365212SAlexander Shaposhnikov #include <cstdio>
1251365212SAlexander Shaposhnikov 
1351365212SAlexander Shaposhnikov // This function returns a NaN value for triggering the NaN detection.
1451365212SAlexander Shaposhnikov __attribute__((noinline)) float ReturnNaN(float p, float q) {
1551365212SAlexander Shaposhnikov   float ret = p / q;
1651365212SAlexander Shaposhnikov   return ret;
1751365212SAlexander Shaposhnikov   // CHECK: WARNING: NumericalStabilitySanitizer: NaN detected
1851365212SAlexander Shaposhnikov }
1951365212SAlexander Shaposhnikov 
2051365212SAlexander Shaposhnikov int main() {
2151365212SAlexander Shaposhnikov   float val = ReturnNaN(0., 0.);
2251365212SAlexander Shaposhnikov   printf("%f\n", val);
2351365212SAlexander Shaposhnikov   // CHECK: WARNING: NumericalStabilitySanitizer: NaN detected
2451365212SAlexander Shaposhnikov   return 0;
2551365212SAlexander Shaposhnikov }
26