[PATCH] D20629: Port the strip-invalid-debuginfo logic to the legacy verifier pass, too.
Adrian Prantl via llvm-commits
llvm-commits at lists.llvm.org
Wed May 25 09:19:35 PDT 2016
aprantl removed rL LLVM as the repository for this revision.
aprantl updated this revision to Diff 58439.
aprantl added a comment.
Fixed a logic error that would have prevented the assertion from firing at all.
http://reviews.llvm.org/D20629
Files:
lib/IR/Verifier.cpp
unittests/IR/VerifierTest.cpp
Index: unittests/IR/VerifierTest.cpp
===================================================================
--- unittests/IR/VerifierTest.cpp
+++ unittests/IR/VerifierTest.cpp
@@ -7,16 +7,17 @@
//
//===----------------------------------------------------------------------===//
-#include "llvm/IR/Verifier.h"
#include "llvm/IR/Constants.h"
#include "llvm/IR/DIBuilder.h"
#include "llvm/IR/DerivedTypes.h"
#include "llvm/IR/Function.h"
#include "llvm/IR/GlobalAlias.h"
#include "llvm/IR/GlobalVariable.h"
#include "llvm/IR/Instructions.h"
#include "llvm/IR/LLVMContext.h"
+#include "llvm/IR/LegacyPassManager.h"
#include "llvm/IR/Module.h"
+#include "llvm/IR/Verifier.h"
#include "gtest/gtest.h"
namespace llvm {
@@ -198,5 +199,26 @@
}
#endif
+TEST(VerifierTest, StripInvalidDebugInfoLegacy) {
+ LLVMContext C;
+ Module M("M", C);
+ DIBuilder DIB(M);
+ DIB.createCompileUnit(dwarf::DW_LANG_C89, "broken.c", "/",
+ "unittest", false, "", 0);
+ DIB.finalize();
+ EXPECT_FALSE(verifyModule(M));
+
+ // Now break it.
+ auto *File = DIB.createFile("not-a-CU.f", ".");
+ NamedMDNode *NMD = M.getOrInsertNamedMetadata("llvm.dbg.cu");
+ NMD->addOperand(File);
+ EXPECT_TRUE(verifyModule(M));
+
+ legacy::PassManager Passes;
+ Passes.add(createVerifierPass(false));
+ Passes.run(M);
+ EXPECT_FALSE(verifyModule(M));
+}
+
} // end anonymous namespace
} // end namespace llvm
Index: lib/IR/Verifier.cpp
===================================================================
--- lib/IR/Verifier.cpp
+++ lib/IR/Verifier.cpp
@@ -4460,17 +4460,16 @@
static char ID;
Verifier V;
- bool FatalErrors;
+ bool FatalErrors = true;
VerifierLegacyPass()
: FunctionPass(ID),
- V(&dbgs(), /*ShouldTreatBrokenDebugInfoAsError=*/true),
- FatalErrors(true) {
+ V(&dbgs(), /*ShouldTreatBrokenDebugInfoAsError=*/true) {
initializeVerifierLegacyPassPass(*PassRegistry::getPassRegistry());
}
explicit VerifierLegacyPass(bool FatalErrors)
: FunctionPass(ID),
- V(&dbgs(), /*ShouldTreatBrokenDebugInfoAsError=*/true),
+ V(&dbgs(), /*ShouldTreatBrokenDebugInfoAsError=*/false),
FatalErrors(FatalErrors) {
initializeVerifierLegacyPassPass(*PassRegistry::getPassRegistry());
}
@@ -4483,9 +4482,20 @@
}
bool doFinalization(Module &M) override {
- if (!V.verify(M) && FatalErrors)
- report_fatal_error("Broken module found, compilation aborted!");
+ bool HasErrors = !V.verify(M);
+ if (FatalErrors) {
+ if (HasErrors)
+ report_fatal_error("Broken module found, compilation aborted!");
+ assert(!V.hasBrokenDebugInfo() && "Module contains invalid debug info");
+ }
+ // Strip broken debug info.
+ if (V.hasBrokenDebugInfo()) {
+ DiagnosticInfoIgnoringInvalidDebugMetadata DiagInvalid(M);
+ M.getContext().diagnose(DiagInvalid);
+ if (!StripDebugInfo(M))
+ report_fatal_error("Failed to strip malformed debug info");
+ }
return false;
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D20629.58439.patch
Type: text/x-patch
Size: 3028 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160525/fba00448/attachment.bin>
More information about the llvm-commits
mailing list