// CHECK-LABEL: define void @bar( void bar() { float f; double d; long double ld; // LLVM's hex representation of float constants is really unfortunate; // basically it does a float-to-double "conversion" and then prints the // hex form of that. That gives us weird artifacts like exponents // that aren't numerically similar to the original exponent and // significand bit-patterns that are offset by three bits (because // the exponent was expanded from 8 bits to 11). // // 0xAE98 == 1010111010011000 // 0x15D3 == 1010111010011 f = __builtin_huge_valf(); // CHECK: float 0x7FF0000000000000 d = __builtin_huge_val(); // CHECK: double 0x7FF0000000000000 ld = __builtin_huge_vall(); // CHECK: x86_fp80 0xK7FFF8000000000000000 f = __builtin_nanf(""); // CHECK: float 0x7FF8000000000000 d = __builtin_nan(""); // CHECK: double 0x7FF8000000000000 ld = __builtin_nanl(""); // CHECK: x86_fp80 0xK7FFFC000000000000000 f = __builtin_nanf("0xAE98"); // CHECK: float 0x7FF815D300000000 d = __builtin_nan("0xAE98"); // CHECK: double 0x7FF800000000AE98 ld = __builtin_nanl("0xAE98"); // CHECK: x86_fp80 0xK7FFFC00000000000AE98 f = __builtin_nansf(""); // CHECK: float 0x7FF4000000000000 d = __builtin_nans(""); // CHECK: double 0x7FF4000000000000 ld = __builtin_nansl(""); // CHECK: x86_fp80 0xK7FFFA000000000000000 f = __builtin_nansf("0xAE98"); // CHECK: float 0x7FF015D300000000 d = __builtin_nans("0xAE98"); // CHECK: double 0x7FF000000000AE98 ld = __builtin_nansl("0xAE98");// CHECK: x86_fp80 0xK7FFF800000000000AE98 }
int main() { volatile float a = __builtin_nanf(""); if (!__builtin_isnan(a)) { return 1; } volatile float b = __builtin_nansf(""); if (!__builtin_isnan(b)) { return 1; } volatile double c = __builtin_nan(""); if (!__builtin_isnan(c)) { return 1; } volatile double d = __builtin_nans(""); if (!__builtin_isnan(d)) { return 1; } volatile long double e = __builtin_nanl(""); if (!__builtin_isnan(e)) { return 1; } volatile long double f = __builtin_nansl(""); if (!__builtin_isnan(f)) { return 1; } volatile float g = 0; if (__builtin_isnan(g)) { return 1; } volatile double h = 0; if (__builtin_isnan(h)) { return 1; } volatile long double i = 0; if (__builtin_isnan(i)) { return 1; } return 0; }