blob: 0b998642dee44d3542c0a7c6a6faba6415a5320f [file] [log] [blame]
//===- 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
#include "llvm/Bitcode/NaCl/NaClBitcodeMunge.h"
#include "IceClFlags.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 translate bitcode records (with defined
/// record Munges), and puts output into DumpResults. Returns true
/// if parse is successful.
bool runTest(const char *TestName, const uint64_t Munges[], size_t MungeSize);
/// Same as above, but without any edits.
bool runTest(const char *TestName) {
uint64_t NoMunges[] = {0};
return runTest(TestName, NoMunges, 0);
}
/// Sets flags back to default assumptions for munging.
void resetFlags();
/// Flags to use to run tests. Use to change default assumptions.
Ice::ClFlags Flags;
private:
void resetMungeFlags();
};
} // end of namespace IceTest
#endif // SUBZERO_UNITTEST_BITCODEMUNGE_H