diff --git a/src/rustllvm/RustWrapper.cpp b/src/rustllvm/RustWrapper.cpp index f488a517b23fcc292c80ad29cae66445c1c124e2..33174c1e9dfe36abdb0c91aa82000320b8e7c6a6 100644 --- a/src/rustllvm/RustWrapper.cpp +++ b/src/rustllvm/RustWrapper.cpp @@ -165,8 +165,10 @@ extern "C" void LLVMRemoveFunctionAttrString(LLVMValueRef fn, unsigned index, co } // enable fpmath flag UnsafeAlgebra -extern "C" void LLVMRustSetHasUnsafeAlgebra(LLVMValueRef Instr) { - unwrap(Instr)->setHasUnsafeAlgebra(true); +extern "C" void LLVMRustSetHasUnsafeAlgebra(LLVMValueRef V) { + if (auto I = dyn_cast(unwrap(V))) { + I->setHasUnsafeAlgebra(true); + } } extern "C" LLVMValueRef LLVMBuildAtomicLoad(LLVMBuilderRef B, diff --git a/src/test/run-pass/float_math.rs b/src/test/run-pass/float_math.rs index 396b7321f45d0af954676478488616f2a5626411..c1b4b55bd3723fca5f4c7ae882b6dac689c8823e 100644 --- a/src/test/run-pass/float_math.rs +++ b/src/test/run-pass/float_math.rs @@ -12,13 +12,19 @@ use std::intrinsics::{fadd_fast, fsub_fast, fmul_fast, fdiv_fast, frem_fast}; -fn main() { +#[inline(never)] +pub fn test_operations(a: f64, b: f64) { // make sure they all map to the correct operation unsafe { - assert_eq!(fadd_fast(1., 2.), 1. + 2.); - assert_eq!(fsub_fast(1., 2.), 1. - 2.); - assert_eq!(fmul_fast(2., 3.), 2. * 3.); - assert_eq!(fdiv_fast(10., 5.), 10. / 5.); - assert_eq!(frem_fast(10., 5.), 10. % 5.); + assert_eq!(fadd_fast(a, b), a + b); + assert_eq!(fsub_fast(a, b), a - b); + assert_eq!(fmul_fast(a, b), a * b); + assert_eq!(fdiv_fast(a, b), a / b); + assert_eq!(frem_fast(a, b), a % b); } } + +fn main() { + test_operations(1., 2.); + test_operations(10., 5.); +}