summaryrefslogtreecommitdiffstats
path: root/llvm/lib/IR/Verifier.cpp
diff options
context:
space:
mode:
authorDuncan P. N. Exon Smith <dexonsmith@apple.com>2015-03-16 21:23:56 +0000
committerDuncan P. N. Exon Smith <dexonsmith@apple.com>2015-03-16 21:23:56 +0000
commit7401b1e78007f6ce14dbb9f087e07025e0a9d140 (patch)
tree26fa9c1a47304c0c32b19d913baebf8530fe485b /llvm/lib/IR/Verifier.cpp
parent3d510665e98e12838abf8b949c96191bbe2b3935 (diff)
downloadbcm5719-llvm-7401b1e78007f6ce14dbb9f087e07025e0a9d140.tar.gz
bcm5719-llvm-7401b1e78007f6ce14dbb9f087e07025e0a9d140.zip
Verifier: Don't call debug info verifier if the module is broken
If `Verifier` has already found a failure, don't call `DebugInfoVerifier`. The latter sometimes crashes in `DebugInfoFinder` when the former would give a nice message. The only two cases I found it crashing are explicit verifier tests I've added: - test/Verifier/llvm.dbg.declare-expression.ll - test/Verifier/llvm.dbg.value-expression.ll However, I assume frontends with bugs will create invalid IR as well. IMO, the `DebugInfoVerifier` should never crash (instead, it should fail to verify), but subtleties like that will be easier to work out once it's enabled again. This is part of PR22777. llvm-svn: 232418
Diffstat (limited to 'llvm/lib/IR/Verifier.cpp')
-rw-r--r--llvm/lib/IR/Verifier.cpp7
1 files changed, 6 insertions, 1 deletions
diff --git a/llvm/lib/IR/Verifier.cpp b/llvm/lib/IR/Verifier.cpp
index 5e2186d12a6..13da05ee302 100644
--- a/llvm/lib/IR/Verifier.cpp
+++ b/llvm/lib/IR/Verifier.cpp
@@ -3113,8 +3113,13 @@ bool llvm::verifyModule(const Module &M, raw_ostream *OS) {
// Note that this function's return value is inverted from what you would
// expect of a function called "verify".
+ if (!V.verify(M) || Broken)
+ return true;
+
+ // Run the debug info verifier only if the regular verifier succeeds, since
+ // sometimes checks that have already failed will cause crashes here.
DebugInfoVerifier DIV(OS ? *OS : NullStr);
- return !V.verify(M) || !DIV.verify(M) || Broken;
+ return !DIV.verify(M);
}
namespace {
OpenPOWER on IntegriCloud