diff options
author | Duncan P. N. Exon Smith <dexonsmith@apple.com> | 2015-03-16 21:23:56 +0000 |
---|---|---|
committer | Duncan P. N. Exon Smith <dexonsmith@apple.com> | 2015-03-16 21:23:56 +0000 |
commit | 7401b1e78007f6ce14dbb9f087e07025e0a9d140 (patch) | |
tree | 26fa9c1a47304c0c32b19d913baebf8530fe485b /llvm/lib/IR/Verifier.cpp | |
parent | 3d510665e98e12838abf8b949c96191bbe2b3935 (diff) | |
download | bcm5719-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.cpp | 7 |
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 { |