Index: lib/Bitcode/NaCl/TestUtils/NaClBitcodeMunge.cpp |
diff --git a/lib/Bitcode/NaCl/TestUtils/NaClBitcodeMunge.cpp b/lib/Bitcode/NaCl/TestUtils/NaClBitcodeMunge.cpp |
index effe128cac9e5f4d4ce9539864837383de623ded..e216535c53762c809f8a8f1e26a815a09ff454b7 100644 |
--- a/lib/Bitcode/NaCl/TestUtils/NaClBitcodeMunge.cpp |
+++ b/lib/Bitcode/NaCl/TestUtils/NaClBitcodeMunge.cpp |
@@ -29,7 +29,7 @@ using namespace llvm; |
// For debugging. When true, shows each test being run. |
static bool TraceTestRuns = false; |
-void NaClBitcodeMunger::setupTest( |
+bool NaClBitcodeMunger::setupTest( |
const char *TestName, const uint64_t Munges[], size_t MungesSize, |
bool AddHeader) { |
assert(DumpStream == nullptr && "Test run with DumpStream already defined"); |
@@ -53,8 +53,10 @@ void NaClBitcodeMunger::setupTest( |
&& !(WriteFlags.getTryToRecover() |
&& Results.NumRepairs == Results.NumErrors) |
&& !(WriteFlags.getWriteBadAbbrevIndex() |
- && Results.WroteBadAbbrevIndex && Results.NumErrors == 1)) |
- report_fatal_error("Unable to generate bitcode file due to write errors"); |
+ && Results.WroteBadAbbrevIndex && Results.NumErrors == 1)) { |
+ Error() << "Unable to generate bitcode file due to write errors\n"; |
+ return false; |
+ } |
// Add null terminator, so that we meet the requirements of the |
// MemoryBuffer API. |
@@ -63,9 +65,10 @@ void NaClBitcodeMunger::setupTest( |
MungedInput = MemoryBuffer::getMemBuffer( |
StringRef(MungedInputBuffer.data(), MungedInputBuffer.size()-1), |
TestName); |
+ return true; |
} |
-void NaClBitcodeMunger::cleanupTest() { |
+bool NaClBitcodeMunger::cleanupTest() { |
RunAsDeathTest = false; |
WriteFlags.reset(); |
MungedBitcode.removeEdits(); |
@@ -74,6 +77,7 @@ void NaClBitcodeMunger::cleanupTest() { |
DumpStream->flush(); |
delete DumpStream; |
DumpStream = nullptr; |
+ return !FoundErrors; |
} |
// Return the next line of input (including eoln), starting from |
@@ -110,24 +114,38 @@ getLinesWithTextMatch(const std::string &Substring, bool MustBePrefix) const { |
return Messages; |
} |
+bool NaClWriteMunger::runTest(const char* Name, const uint64_t Munges[], |
+ size_t MungesSize) { |
+ bool AddHeader = true; |
+ if (!setupTest(Name, Munges, MungesSize, AddHeader)) |
+ return cleanupTest(); |
+ MemoryBufferRef InputRef(MungedInput->getMemBufferRef()); |
+ NaClMungedBitcode WrittenBitcode(MemoryBuffer::getMemBuffer(InputRef)); |
+ WrittenBitcode.print(WriteFlags.getErrStream()); |
+ return cleanupTest(); |
+} |
+ |
bool NaClObjDumpMunger::runTestWithFlags( |
const char *Name, const uint64_t Munges[], size_t MungesSize, |
bool AddHeader, bool NoRecords, bool NoAssembly) { |
- setupTest(Name, Munges, MungesSize, AddHeader); |
+ if (!setupTest(Name, Munges, MungesSize, AddHeader)) |
+ return cleanupTest(); |
if (NaClObjDump(MungedInput.get()->getMemBufferRef(), |
getDumpStream(), NoRecords, NoAssembly)) |
FoundErrors = true; |
- cleanupTest(); |
- return !FoundErrors; |
+ return cleanupTest(); |
} |
bool NaClParseBitcodeMunger::runTest( |
const char *Name, const uint64_t Munges[], size_t MungesSize, |
bool VerboseErrors) { |
bool AddHeader = true; |
- setupTest(Name, Munges, MungesSize, AddHeader); |
+ if (!setupTest(Name, Munges, MungesSize, AddHeader)) |
+ return cleanupTest(); |
+ |
LLVMContext &Context = getGlobalContext(); |
+ |
raw_ostream *VerboseStrm = VerboseErrors ? &getDumpStream() : nullptr; |
ErrorOr<Module *> ModuleOrError = |
NaClParseBitcodeFile(MungedInput->getMemBufferRef(), Context, |
@@ -139,16 +157,17 @@ bool NaClParseBitcodeMunger::runTest( |
} else { |
Error() << ModuleOrError.getError().message() << "\n"; |
} |
- cleanupTest(); |
- return !FoundErrors; |
+ return cleanupTest(); |
} |
bool NaClCompressMunger::runTest(const char* Name, const uint64_t Munges[], |
size_t MungesSize) { |
bool AddHeader = true; |
- setupTest(Name, Munges, MungesSize, AddHeader); |
+ if (!setupTest(Name, Munges, MungesSize, AddHeader)) |
+ return cleanupTest(); |
+ |
NaClBitcodeCompressor Compressor; |
- bool Result = Compressor.compress(MungedInput.get(), getDumpStream()); |
- cleanupTest(); |
- return Result; |
+ if (!Compressor.compress(MungedInput.get(), getDumpStream())) |
+ Error() << "Unable to compress\n"; |
+ return cleanupTest(); |
} |