aboutsummaryrefslogtreecommitdiffhomepage
path: root/lib/Module/Checks.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Module/Checks.cpp')
-rw-r--r--lib/Module/Checks.cpp10
1 files changed, 9 insertions, 1 deletions
diff --git a/lib/Module/Checks.cpp b/lib/Module/Checks.cpp
index 79fd4afc..80b6b245 100644
--- a/lib/Module/Checks.cpp
+++ b/lib/Module/Checks.cpp
@@ -83,7 +83,12 @@ bool DivCheckPass::runOnModule(Module &M) {
divZeroCheckFunction = cast<Function>(fc);
}
- CallInst::Create(divZeroCheckFunction, denominator, "", &*i);
+ CallInst * ci = CallInst::Create(divZeroCheckFunction, denominator, "", &*i);
+
+ // Set debug location of checking call to that of the div/rem
+ // operation so error locations are reported in the correct
+ // location.
+ ci->setDebugLoc(binOp->getDebugLoc());
moduleChanged = true;
}
}
@@ -138,11 +143,14 @@ bool OvershiftCheckPass::runOnModule(Module &M) {
}
// Inject CallInstr to check if overshifting possible
+ CallInst* ci =
#if LLVM_VERSION_CODE >= LLVM_VERSION(3, 0)
CallInst::Create(overshiftCheckFunction, args, "", &*i);
#else
CallInst::Create(overshiftCheckFunction, args.begin(), args.end(), "", &*i);
#endif
+ // set debug information from binary operand to preserve it
+ ci->setDebugLoc(binOp->getDebugLoc());
moduleChanged = true;
}
}