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