From 3f70fbfc3d3b0cc2cc9263277979be256a39dd6e Mon Sep 17 00:00:00 2001 From: Jiri Slaby Date: Wed, 23 May 2018 15:01:34 +0200 Subject: llvm5: Intrinsic::objectsize has three arguments Modify the IntrinsicCleaner accordingly. We do not do anything with the third argument as we do not handle the first argument in any way. Signed-off-by: Jiri Slaby --- lib/Module/IntrinsicCleaner.cpp | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/lib/Module/IntrinsicCleaner.cpp b/lib/Module/IntrinsicCleaner.cpp index ab16a265..ee65be69 100644 --- a/lib/Module/IntrinsicCleaner.cpp +++ b/lib/Module/IntrinsicCleaner.cpp @@ -227,13 +227,29 @@ bool IntrinsicCleanerPass::runOnBasicBlock(BasicBlock &b, Module &M) { case Intrinsic::objectsize: { // We don't know the size of an object in general so we replace // with 0 or -1 depending on the second argument to the intrinsic. +#if LLVM_VERSION_CODE >= LLVM_VERSION(5, 0) + assert(ii->getNumArgOperands() == 3 && "wrong number of arguments"); +#else assert(ii->getNumArgOperands() == 2 && "wrong number of arguments"); +#endif + Value *minArg = ii->getArgOperand(1); assert(minArg && "Failed to get second argument"); ConstantInt *minArgAsInt = dyn_cast(minArg); assert(minArgAsInt && "Second arg is not a ConstantInt"); assert(minArgAsInt->getBitWidth() == 1 && "Second argument is not an i1"); + +#if LLVM_VERSION_CODE >= LLVM_VERSION(5, 0) + auto nullArg = ii->getArgOperand(2); + assert(nullArg && "Failed to get second argument"); + auto nullArgAsInt = dyn_cast(nullArg); + assert(nullArgAsInt && "Third arg is not a ConstantInt"); + assert(nullArgAsInt->getBitWidth() == 1 && + "Third argument is not an i1"); + /* TODO should we do something with the 3rd argument? */ +#endif + Value *replacement = NULL; IntegerType *intType = dyn_cast(ii->getType()); assert(intType && "intrinsic does not have integer return type"); -- cgit 1.4.1