diff options
| author | bors <bors@rust-lang.org> | 2016-03-19 15:41:42 -0700 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2016-03-19 15:41:42 -0700 |
| commit | 02310fd313cf3eed11fe5ac11921b73cc3b648d4 (patch) | |
| tree | 1993add0adf2c378c5071eff9f57dde930de0b76 /src/rustllvm/RustWrapper.cpp | |
| parent | 8eeb5062d115b846a66685e73ce29697f7eeee11 (diff) | |
| parent | ba89b255e86817e0a2f43198a6b802dafbc6ae9e (diff) | |
| download | rust-02310fd313cf3eed11fe5ac11921b73cc3b648d4.tar.gz rust-02310fd313cf3eed11fe5ac11921b73cc3b648d4.zip | |
Auto merge of #32362 - bluss:float-fast-math, r=eddyb
Fix floating point fast-math intrinsics The implementation did not handle the case where both operands were constants, which caused an llvm assertion: ``` rustc: //buildslave//rust-buildbot//slave//nightly-dist-rustc-musl-linux//build//src//llvm//include/llvm/Support/Casting.h:237: typename llvm::cast_retty<X, Y*>::ret_type llvm::cast(Y*) [with X = llvm::Instruction; Y = llvm::Value; typename llvm::cast_retty<X, Y*>::ret_type = llvm::Instruction*]: Assertion `isa<X>(Val) && "cast<Ty>() argument of incompatible type!"' failed. ```
Diffstat (limited to 'src/rustllvm/RustWrapper.cpp')
| -rw-r--r-- | src/rustllvm/RustWrapper.cpp | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/src/rustllvm/RustWrapper.cpp b/src/rustllvm/RustWrapper.cpp index f488a517b23..33174c1e9df 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<Instruction>(Instr)->setHasUnsafeAlgebra(true); +extern "C" void LLVMRustSetHasUnsafeAlgebra(LLVMValueRef V) { + if (auto I = dyn_cast<Instruction>(unwrap<Value>(V))) { + I->setHasUnsafeAlgebra(true); + } } extern "C" LLVMValueRef LLVMBuildAtomicLoad(LLVMBuilderRef B, |
