| // 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(""), |
| }; |