Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(509)

Unified Diff: lib/Bitcode/NaCl/TestUtils/NaClBitcodeMunge.cpp

Issue 770853002: Fix error reporting in the PNaCl bitcode reader. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-llvm.git@master
Patch Set: Fix typo. Created 6 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « lib/Bitcode/NaCl/Reader/NaClBitcodeReader.cpp ('k') | lib/IRReader/IRReader.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: lib/Bitcode/NaCl/TestUtils/NaClBitcodeMunge.cpp
diff --git a/lib/Bitcode/NaCl/TestUtils/NaClBitcodeMunge.cpp b/lib/Bitcode/NaCl/TestUtils/NaClBitcodeMunge.cpp
index f4882b83af0cfdad13f1788f7af21006446ee835..76c78726491f2dbd856eea0a54fb69c4b4425eed 100644
--- a/lib/Bitcode/NaCl/TestUtils/NaClBitcodeMunge.cpp
+++ b/lib/Bitcode/NaCl/TestUtils/NaClBitcodeMunge.cpp
@@ -17,6 +17,8 @@
#include "llvm/Bitcode/NaCl/NaClBitcodeParser.h"
#include "llvm/Bitcode/NaCl/NaClBitstreamWriter.h"
#include "llvm/Bitcode/NaCl/NaClReaderWriter.h"
+#include "llvm/IR/LLVMContext.h"
+#include "llvm/IR/Module.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/MemoryBuffer.h"
@@ -28,22 +30,22 @@ using namespace llvm;
// emitted to the bitcode file.
static bool DebugEmitRecord = false;
-bool NaClBitcodeMunger::runTestWithFlags(
- const char *Name, const uint64_t Munges[], size_t MungesSize,
- bool AddHeader, bool NoRecords, bool NoAssembly) {
- assert(DumpStream == NULL && "Test run with DumpStream already defined");
+void NaClBitcodeMunger::setupTest(
+ const char *TestName, const uint64_t Munges[], size_t MungesSize,
+ bool AddHeader) {
+ assert(DumpStream == nullptr && "Test run with DumpStream already defined");
+ assert(MungedInput == nullptr && "Test run with MungedInput already defined");
FoundErrors = false;
DumpResults.clear(); // Throw away any previous results.
std::string DumpBuffer;
- raw_string_ostream MungedDumpStream(DumpResults);
- DumpStream = &MungedDumpStream;
+ DumpStream = new raw_string_ostream(DumpResults);
SmallVector<char, 0> StreamBuffer;
StreamBuffer.reserve(256*1024);
NaClBitstreamWriter OutStream(StreamBuffer);
Writer = &OutStream;
if (DebugEmitRecord) {
- errs() << "*** Run test: " << Name << "\n";
+ errs() << "*** Run test: " << TestName << "\n";
}
WriteBlockID = -1;
@@ -57,15 +59,17 @@ bool NaClBitcodeMunger::runTestWithFlags(
Iter != IterEnd; ++Iter) {
BitcodeStrm << *Iter;
}
+ MungedInput = MemoryBuffer::getMemBufferCopy(BitcodeStrm.str(), TestName);
+}
- std::unique_ptr<MemoryBuffer> Input(
- MemoryBuffer::getMemBufferCopy(BitcodeStrm.str(), Name));
- if (NaClObjDump(Input.get(), *DumpStream, NoRecords, NoAssembly))
- FoundErrors = true;
- DumpStream = NULL;
- Writer = NULL;
- MungedDumpStream.flush();
- return !FoundErrors;
+void NaClBitcodeMunger::cleanupTest() {
+ delete MungedInput;
+ MungedInput = nullptr;
+ assert(DumpStream && "Dump stream removed before cleanup!");
+ DumpStream->flush();
+ delete DumpStream;
+ DumpStream = nullptr;
+ Writer = nullptr;
}
// Return the next line of input (including eoln), starting from
@@ -338,3 +342,37 @@ NaClBitCodeAbbrev *NaClBitcodeMunger::buildAbbrev(
}
return Abbrev;
}
+
+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 (NaClObjDump(MungedInput, *DumpStream, NoRecords, NoAssembly))
+ FoundErrors = true;
+ cleanupTest();
+ return !FoundErrors;
+}
+
+bool NaClParseBitcodeMunger::runTest(
+ const char *Name, const uint64_t Munges[], size_t MungesSize,
+ bool VerboseErrors) {
+ bool AddHeader = true;
+ setupTest(Name, Munges, MungesSize, AddHeader);
+ LLVMContext &Context = getGlobalContext();
+ raw_ostream *VerboseStrm = VerboseErrors ? DumpStream : nullptr;
+ ErrorOr<Module *> ModuleOrError =
+ NaClParseBitcodeFile(MungedInput, Context, VerboseStrm);
+ if (ModuleOrError) {
+ delete ModuleOrError.get();
+ if (VerboseErrors)
+ *DumpStream << "Successful parse!\n";
+ // If there was a successful parse, MungedInput was deleted by the
+ // parser. Hence, we null it out here so that cleanupTest doesn't
+ // double delete it.
+ MungedInput = nullptr;
+ } else {
+ Error() << ModuleOrError.getError().message() << "\n";
+ }
+ cleanupTest();
+ return !FoundErrors;
+}
« no previous file with comments | « lib/Bitcode/NaCl/Reader/NaClBitcodeReader.cpp ('k') | lib/IRReader/IRReader.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698