|  | //===- BitcodeMunge.h - Subzero Bitcode Munger ------------------*- C++ -*-===// | 
|  | // | 
|  | //                     The LLVM Compiler Infrastructure | 
|  | // | 
|  | // This file is distributed under the University of Illinois Open Source | 
|  | // License. See LICENSE.TXT for details. | 
|  | // | 
|  | //===----------------------------------------------------------------------===// | 
|  | // | 
|  | // Test harness for testing malformed bitcode files in Subzero. Uses NaCl's | 
|  | // bitcode munger to do this. | 
|  | // | 
|  | //===----------------------------------------------------------------------===// | 
|  |  | 
|  | #ifndef SUBZERO_UNITTEST_BITCODEMUNGE_H | 
|  | #define SUBZERO_UNITTEST_BITCODEMUNGE_H | 
|  |  | 
|  | #pragma clang diagnostic push | 
|  | #pragma clang diagnostic ignored "-Wunused-parameter" | 
|  | #include "llvm/Bitcode/NaCl/NaClBitcodeMunge.h" | 
|  | #pragma clang diagnostic pop | 
|  |  | 
|  | #include "IceClFlags.h" | 
|  | #include "IceGlobalContext.h" | 
|  |  | 
|  | namespace IceTest { | 
|  |  | 
|  | // Class to run tests on Subzero's bitcode parser. Runs a Subzero | 
|  | // translation, using (possibly) edited bitcode record values.  For | 
|  | // more details on how to represent the input arrays, see | 
|  | // NaClBitcodeMunge.h. | 
|  | class SubzeroBitcodeMunger : public llvm::NaClBitcodeMunger { | 
|  | public: | 
|  | SubzeroBitcodeMunger(const uint64_t Records[], size_t RecordSize, | 
|  | uint64_t RecordTerminator) | 
|  | : llvm::NaClBitcodeMunger(Records, RecordSize, RecordTerminator) { | 
|  | resetMungeFlags(); | 
|  | } | 
|  |  | 
|  | /// Runs PNaClTranslator to parse and (optionally) translate bitcode records | 
|  | /// (with defined record Munges), and puts output into DumpResults. Returns | 
|  | /// true if parse is successful. | 
|  | bool runTest(const uint64_t Munges[], size_t MungeSize, | 
|  | bool DisableTranslation = false); | 
|  |  | 
|  | /// Same as above, but without any edits. | 
|  | bool runTest(bool DisableTranslation = false) { | 
|  | uint64_t NoMunges[] = {0}; | 
|  | return runTest(NoMunges, 0, DisableTranslation); | 
|  | } | 
|  |  | 
|  | private: | 
|  | void resetMungeFlags(); | 
|  | }; | 
|  |  | 
|  | } // end of namespace IceTest | 
|  |  | 
|  | #endif // SUBZERO_UNITTEST_BITCODEMUNGE_H |