Index: include/llvm/Bitcode/NaCl/NaClBitcodeMunge.h |
diff --git a/include/llvm/Bitcode/NaCl/NaClBitcodeMunge.h b/include/llvm/Bitcode/NaCl/NaClBitcodeMunge.h |
index d9a46ab91a2c0a36225fa89fa97b9bd74a8fc0ec..3181331a51398d9782a2dfb5f82110ec18cfb8b3 100644 |
--- a/include/llvm/Bitcode/NaCl/NaClBitcodeMunge.h |
+++ b/include/llvm/Bitcode/NaCl/NaClBitcodeMunge.h |
@@ -73,13 +73,13 @@ public: |
} |
/// Creates MungedInput and DumpStream for running tests, based on |
- /// given Munges. |
- void setupTest( |
+ /// given Munges. Returns true if able to set up test. |
+ bool setupTest( |
const char *TestName, const uint64_t Munges[], size_t MungesSize, |
bool AddHeader); |
- /// Cleans up state after a test. |
- void cleanupTest(); |
+ /// Cleans up state after a test. Returns true if no errors found. |
+ bool cleanupTest(); |
/// Returns the resulting string generated by the corresponding test. |
const std::string &getTestResults() const { |
@@ -110,6 +110,16 @@ public: |
WriteFlags.setWriteBadAbbrevIndex(NewValue); |
} |
+ /// Get access to munged bitcodes. |
+ NaClMungedBitcode &getMungedBitcode() { |
+ return MungedBitcode; |
+ } |
+ |
+ /// Apply given munges to the munged bitcode. |
+ void munge(const uint64_t Munges[], size_t MungesSize) { |
+ MungedBitcode.munge(Munges, MungesSize, RecordTerminator); |
+ } |
+ |
protected: |
// The bitcode records being munged. |
NaClMungedBitcode MungedBitcode; |
@@ -151,6 +161,35 @@ protected: |
} |
}; |
+/// Class to run tests writing munged bitcode. |
+class NaClWriteMunger : public NaClBitcodeMunger { |
+public: |
+ NaClWriteMunger(const uint64_t Records[], size_t RecordsSize, |
+ uint64_t RecordTerminator) |
+ : NaClBitcodeMunger(Records, RecordsSize, RecordTerminator) {} |
+ |
+ /// Writes munged bitcode and puts error messages into DumpResults. |
+ /// Returns true if successful. |
+ bool runTest(const char* TestName, const uint64_t Munges[], |
+ size_t MungesSize); |
+ |
+ /// Same as above, but without test name. |
+ bool runTest(const uint64_t Munges[], size_t MungesSize) { |
+ return runTest("Test", Munges, MungesSize); |
+ } |
+ |
+ /// Same as above, but without any edits. |
+ bool runTest(const char* TestName) { |
+ uint64_t NoMunges[] = {0}; |
+ return runTest(TestName, NoMunges, 0); |
+ } |
+ |
+ /// Same as above, but without test name. |
+ bool runTest() { |
+ return runTest("Test"); |
+ } |
+}; |
+ |
/// Class to run tests for function llvm::NaClObjDump. |
class NaClObjDumpMunger : public NaClBitcodeMunger { |
public: |
@@ -182,12 +221,17 @@ public: |
return runTestWithFlags(TestName, true, false, false); |
} |
- /// Same as runTest, but only print out assembly and errors. |
+ /// Same as above but without test name. |
+ bool runTest() { |
+ return runTest("Test"); |
+ } |
+ |
+ /// Same as above, but only print out assembly and errors. |
bool runTestForAssembly(const char *TestName) { |
return runTestWithFlags(TestName, true, true, false); |
} |
- /// Same as runTest, but only generate error messages. |
+ /// Same as above, but only generate error messages. |
bool runTestForErrors(const char *TestName) { |
return runTestWithFlags(TestName, true, true, true); |
} |
@@ -212,6 +256,10 @@ public: |
return runTestWithFlags(TestName, Munges, MungesSize, true, false, false); |
} |
+ bool runTest(const uint64_t Munges[], size_t MungesSize) { |
+ return runTest("Test", Munges, MungesSize); |
+ } |
+ |
bool runTestForAssembly(const char* TestName, const uint64_t Munges[], |
size_t MungesSize) { |
return runTestWithFlags(TestName, Munges, MungesSize, true, true, false); |
@@ -235,6 +283,11 @@ public: |
bool runTest(const char* TestName, const uint64_t Munges[], |
size_t MungesSize, bool VerboseErrors); |
+ /// Same as above, but without test name. |
+ bool runTest(const uint64_t Munges[], size_t MungesSize, bool VerboseErrors) { |
+ return runTest("Test", Munges, MungesSize, VerboseErrors); |
+ } |
+ |
// Same as above, but without any edits. |
bool runTest(const char* TestName, bool VerboseErrors) { |
uint64_t NoMunges[] = {0}; |