Change inferred getCast into specific getCast. Passes all tests.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@32469 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Transforms/Utils/LowerInvoke.cpp b/lib/Transforms/Utils/LowerInvoke.cpp
index dfeb834..4fbd43c 100644
--- a/lib/Transforms/Utils/LowerInvoke.cpp
+++ b/lib/Transforms/Utils/LowerInvoke.cpp
@@ -215,8 +215,12 @@
unsigned NumArgs = FT->getNumParams();
for (unsigned i = 0; i != 3; ++i)
if (i < NumArgs && FT->getParamType(i) != Args[i]->getType())
- Args[i] = ConstantExpr::getCast(cast<Constant>(Args[i]),
- FT->getParamType(i));
+ if (Args[i]->getType()->isInteger())
+ Args[i] = ConstantExpr::getIntegerCast(cast<Constant>(Args[i]),
+ FT->getParamType(i), true);
+ else
+ Args[i] = ConstantExpr::getBitCast(cast<Constant>(Args[i]),
+ FT->getParamType(i));
(new CallInst(WriteFn, Args, "", IB))->setTailCall();
}