Index: src/PNaClTranslator.cpp |
diff --git a/src/PNaClTranslator.cpp b/src/PNaClTranslator.cpp |
index ac4c6976477ec5e1dbb8a1d6a380924a06db2227..4156c91841de6f6fd3faf6e9ec5b52cd2d86b4fe 100644 |
--- a/src/PNaClTranslator.cpp |
+++ b/src/PNaClTranslator.cpp |
@@ -37,12 +37,6 @@ |
namespace { |
using namespace llvm; |
-// TODO(kschimpf) Remove error recovery once implementation complete. |
-static cl::opt<bool> AllowErrorRecovery( |
- "allow-pnacl-reader-error-recovery", |
- cl::desc("Allow error recovery when reading PNaCl bitcode."), |
- cl::init(false)); |
- |
// Models elements in the list of types defined in the types block. |
// These elements can be undefined, a (simple) type, or a function type |
// signature. Note that an extended type is undefined on construction. |
@@ -440,7 +434,7 @@ bool TopLevelParser::Error(const std::string &Message) { |
ErrorStatus = true; |
++NumErrors; |
NaClBitcodeParser::Error(Message); |
- if (!AllowErrorRecovery) |
+ if (!Translator.getFlags().AllowErrorRecovery) |
report_fatal_error("Unable to continue"); |
return true; |
} |
@@ -612,10 +606,11 @@ bool BlockParserBaseClass::Error(const std::string &Message) { |
StrBuf << "(" << format("%" PRIu64 ":%u", (Bit / 8), |
static_cast<unsigned>(Bit % 8)) << ") "; |
// Note: If dump routines have been turned off, the error messages |
- // will not be readable. Hence, replace with simple error. |
- if (ALLOW_DUMP) |
+ // will not be readable. Hence, replace with simple error. We also |
+ // use the simple form for unit tests. |
+ if (ALLOW_DUMP && !getFlags().GenerateUnitTestMessages) { |
StrBuf << Message; |
- else { |
+ } else { |
StrBuf << "Invalid " << getBlockName() << " record: <" << Record.GetCode(); |
for (const uint64_t Val : Record.GetValues()) { |
StrBuf << " " << Val; |
@@ -2967,6 +2962,11 @@ void PNaClTranslator::translate(const std::string &IRFilename) { |
} |
std::unique_ptr<MemoryBuffer> MemBuf(ErrOrFile.get().release()); |
+ translateBuffer(IRFilename, MemBuf.get()); |
+} |
+ |
+void PNaClTranslator::translateBuffer(const std::string &IRFilename, |
+ MemoryBuffer *MemBuf) { |
if (MemBuf->getBufferSize() % 4 != 0) { |
errs() << IRFilename |
<< ": Bitcode stream should be a multiple of 4 bytes in length.\n"; |