// RUN: %clang -target aarch64 -emit-llvm -S %s -o - | FileCheck %s // RUN: %clang -target lanai -emit-llvm -S %s -o - | FileCheck %s // RUN: %clang -target riscv64 -emit-llvm -S %s -o - | FileCheck %s // RUN: %clang -target x86_64 -emit-llvm -S %s -o - | FileCheck %s // Run a variety of targets to ensure there's no target-based difference. // An SNaN with no payload is formed by setting the bit after the // the quiet bit (MSB of the significand). // CHECK: float 0x7FF8000000000000, float 0x7FF4000000000000 float f[] = { __builtin_nanf(""), __builtin_nansf(""), }; // Doubles are created and converted to floats. // Converting (truncating) to float quiets the NaN (sets the MSB // of the significand) and raises the APFloat invalidOp exception // but that should not cause a compilation error in the default // (ignore FP exceptions) mode. // CHECK: float 0x7FF8000000000000, float 0x7FFC000000000000 float converted_to_float[] = { __builtin_nan(""), __builtin_nans(""), }; // CHECK: double 0x7FF8000000000000, double 0x7FF4000000000000 double d[] = { __builtin_nan(""), __builtin_nans(""), };