| Index: unittests/Bitcode/NaClParseTypesTest.cpp
|
| diff --git a/unittests/Bitcode/NaClParseTypesTest.cpp b/unittests/Bitcode/NaClParseTypesTest.cpp
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..23e11742445d52c0ef2e60e56ef4d789729d61a5
|
| --- /dev/null
|
| +++ b/unittests/Bitcode/NaClParseTypesTest.cpp
|
| @@ -0,0 +1,82 @@
|
| +//===- llvm/unittest/Bitcode/NaClParseTypesTest.cpp ---------------------===//
|
| +// Tests parser for PNaCl bitcode.
|
| +//
|
| +// The LLVM Compiler Infrastructure
|
| +//
|
| +// This file is distributed under the University of Illinois Open Source
|
| +// License. See LICENSE.TXT for details.
|
| +//
|
| +//===----------------------------------------------------------------------===//
|
| +
|
| +// Tests record errors in the types block when parsing PNaCl bitcode.
|
| +
|
| +// TODO(kschimpf) Add more tests.
|
| +
|
| +#include "llvm/ADT/STLExtras.h"
|
| +#include "llvm/Bitcode/NaCl/NaClBitcodeMunge.h"
|
| +
|
| +#include "gtest/gtest.h"
|
| +
|
| +using namespace llvm;
|
| +
|
| +namespace {
|
| +
|
| +static const uint64_t Terminator = 0x5768798008978675LL;
|
| +
|
| +TEST(NaClParseTypesTest, BadTypeReferences) {
|
| + const uint64_t BitcodeRecords[] = {
|
| + 1, 65535, 8, 2, Terminator,
|
| + 1, 65535, 17, 2, Terminator,
|
| + 3, 1, 2, Terminator,
|
| + 3, 7, 32, Terminator,
|
| + 3, 3, Terminator,
|
| + 0, 65534, Terminator,
|
| + 0, 65534, Terminator
|
| + };
|
| +
|
| + const uint64_t ReplaceIndex = 4;
|
| +
|
| + // Show text of base input.
|
| + NaClObjDumpMunger BaseMunger(BitcodeRecords,
|
| + array_lengthof(BitcodeRecords), Terminator);
|
| + EXPECT_TRUE(BaseMunger.runTestForAssembly("Bad type references base"));
|
| + EXPECT_EQ(
|
| + "module { // BlockID = 8\n"
|
| + " types { // BlockID = 17\n"
|
| + " count 2;\n"
|
| + " @t0 = i32;\n"
|
| + " @t1 = float;\n"
|
| + " }\n"
|
| + "}\n",
|
| + BaseMunger.getTestResults());
|
| +
|
| + // Show that we successfully parse the base input.
|
| + NaClParseBitcodeMunger Munger(BitcodeRecords,
|
| + array_lengthof(BitcodeRecords), Terminator);
|
| + EXPECT_TRUE(Munger.runTest("base parse", true));
|
| + EXPECT_EQ(
|
| + "Successful parse!\n",
|
| + Munger.getTestResults());
|
| +
|
| + // Show what happens when misdefining: @t1 = float"
|
| + const uint64_t AddSelfReference[] = {
|
| + ReplaceIndex, NaClBitcodeMunger::Replace, 3, 3, 1, Terminator
|
| + };
|
| + EXPECT_FALSE(Munger.runTest(
|
| + "@t1 = float(1)",
|
| + AddSelfReference, array_lengthof(AddSelfReference),
|
| + false));
|
| + EXPECT_EQ(
|
| + "Error: Record doesn't have expected size or structure\n",
|
| + Munger.getTestResults());
|
| + EXPECT_FALSE(Munger.runTest(
|
| + "@t1 = float(1)",
|
| + AddSelfReference, array_lengthof(AddSelfReference),
|
| + true));
|
| + EXPECT_EQ(
|
| + "Error: Invalid TYPE_CODE_FLOAT record\n"
|
| + "Error: Record doesn't have expected size or structure\n",
|
| + Munger.getTestResults());
|
| +}
|
| +
|
| +} // end of anonamous namespace.
|
|
|