Karl Schimpf | 2e7daef | 2015-01-09 13:04:13 -0800 | [diff] [blame] | 1 | //===- BitcodeMunge.h - Subzero Bitcode Munger ------------------*- C++ -*-===// |
| 2 | // |
| 3 | // The LLVM Compiler Infrastructure |
| 4 | // |
| 5 | // This file is distributed under the University of Illinois Open Source |
| 6 | // License. See LICENSE.TXT for details. |
| 7 | // |
| 8 | //===----------------------------------------------------------------------===// |
| 9 | // |
| 10 | // Test harness for testing malformed bitcode files in Subzero. Uses NaCl's |
| 11 | // bitcode munger to do this. |
| 12 | // |
| 13 | //===----------------------------------------------------------------------===// |
| 14 | |
| 15 | #ifndef SUBZERO_UNITTEST_BITCODEMUNGE_H |
| 16 | #define SUBZERO_UNITTEST_BITCODEMUNGE_H |
| 17 | |
Jim Stichnoth | 98da966 | 2015-06-27 06:38:08 -0700 | [diff] [blame] | 18 | #pragma clang diagnostic push |
| 19 | #pragma clang diagnostic ignored "-Wunused-parameter" |
Karl Schimpf | 2e7daef | 2015-01-09 13:04:13 -0800 | [diff] [blame] | 20 | #include "llvm/Bitcode/NaCl/NaClBitcodeMunge.h" |
Jim Stichnoth | 98da966 | 2015-06-27 06:38:08 -0700 | [diff] [blame] | 21 | #pragma clang diagnostic pop |
Karl Schimpf | 2e7daef | 2015-01-09 13:04:13 -0800 | [diff] [blame] | 22 | |
Karl Schimpf | d8b3289 | 2015-04-16 15:47:25 -0700 | [diff] [blame] | 23 | #include "IceClFlags.h" |
| 24 | |
Karl Schimpf | 2e7daef | 2015-01-09 13:04:13 -0800 | [diff] [blame] | 25 | namespace IceTest { |
| 26 | |
| 27 | // Class to run tests on Subzero's bitcode parser. Runs a Subzero |
| 28 | // translation, using (possibly) edited bitcode record values. For |
| 29 | // more details on how to represent the input arrays, see |
| 30 | // NaClBitcodeMunge.h. |
| 31 | class SubzeroBitcodeMunger : public llvm::NaClBitcodeMunger { |
| 32 | public: |
| 33 | SubzeroBitcodeMunger(const uint64_t Records[], size_t RecordSize, |
| 34 | uint64_t RecordTerminator) |
Karl Schimpf | d8b3289 | 2015-04-16 15:47:25 -0700 | [diff] [blame] | 35 | : llvm::NaClBitcodeMunger(Records, RecordSize, RecordTerminator) { |
| 36 | resetMungeFlags(); |
| 37 | } |
Karl Schimpf | 2e7daef | 2015-01-09 13:04:13 -0800 | [diff] [blame] | 38 | |
John Porto | 8eefffa | 2015-06-11 15:14:37 -0700 | [diff] [blame] | 39 | /// Runs PNaClTranslator to parse and (optionally) translate bitcode records |
| 40 | /// (with defined record Munges), and puts output into DumpResults. Returns |
| 41 | /// true if parse is successful. |
| 42 | bool runTest(const uint64_t Munges[], size_t MungeSize, |
| 43 | bool DisableTranslation = false); |
Karl Schimpf | 2e7daef | 2015-01-09 13:04:13 -0800 | [diff] [blame] | 44 | |
| 45 | /// Same as above, but without any edits. |
John Porto | 8eefffa | 2015-06-11 15:14:37 -0700 | [diff] [blame] | 46 | bool runTest(bool DisableTranslation = false) { |
Karl Schimpf | 2e7daef | 2015-01-09 13:04:13 -0800 | [diff] [blame] | 47 | uint64_t NoMunges[] = {0}; |
John Porto | 8eefffa | 2015-06-11 15:14:37 -0700 | [diff] [blame] | 48 | return runTest(NoMunges, 0, DisableTranslation); |
Karl Schimpf | 2e7daef | 2015-01-09 13:04:13 -0800 | [diff] [blame] | 49 | } |
Karl Schimpf | d8b3289 | 2015-04-16 15:47:25 -0700 | [diff] [blame] | 50 | |
Karl Schimpf | d8b3289 | 2015-04-16 15:47:25 -0700 | [diff] [blame] | 51 | /// Flags to use to run tests. Use to change default assumptions. |
| 52 | Ice::ClFlags Flags; |
| 53 | |
| 54 | private: |
| 55 | void resetMungeFlags(); |
Karl Schimpf | 2e7daef | 2015-01-09 13:04:13 -0800 | [diff] [blame] | 56 | }; |
| 57 | |
| 58 | } // end of namespace IceTest |
| 59 | |
| 60 | #endif // SUBZERO_UNITTEST_BITCODEMUNGE_H |