summaryrefslogtreecommitdiff
path: root/unittests
diff options
context:
space:
mode:
authorZachary Turner <zturner@google.com>2017-03-01 21:30:06 +0000
committerZachary Turner <zturner@google.com>2017-03-01 21:30:06 +0000
commit22bd547eb3ab36c49274edfd25acf703ba452e47 (patch)
treee923d463ffed96cfeaaf5f96b8731ac5bbff0408 /unittests
parentc662d06e261d53829bc842324a0c13f09b8e8784 (diff)
Re-enable BinaryStreamTest.StreamReaderObject.
This was failing because I was using memcmp to compare two objects that included padding bytes, which were uninitialized. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@296681 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'unittests')
-rw-r--r--unittests/DebugInfo/PDB/BinaryStreamTest.cpp28
1 files changed, 18 insertions, 10 deletions
diff --git a/unittests/DebugInfo/PDB/BinaryStreamTest.cpp b/unittests/DebugInfo/PDB/BinaryStreamTest.cpp
index 1cf9bc12f6b..320780cb462 100644
--- a/unittests/DebugInfo/PDB/BinaryStreamTest.cpp
+++ b/unittests/DebugInfo/PDB/BinaryStreamTest.cpp
@@ -46,9 +46,9 @@ using namespace llvm::support;
namespace {
-class DiscontiguousStream : public WritableBinaryStream {
+class BrokenStream : public WritableBinaryStream {
public:
- DiscontiguousStream(MutableArrayRef<uint8_t> Data, endianness Endian,
+ BrokenStream(MutableArrayRef<uint8_t> Data, endianness Endian,
uint32_t Align)
: Data(Data), PartitionIndex(alignDown(Data.size() / 2, Align)),
Endian(Endian) {}
@@ -169,7 +169,7 @@ protected:
for (uint32_t I = 0; I < NumEndians; ++I) {
auto InByteStream =
llvm::make_unique<BinaryByteStream>(InputData, Endians[I]);
- auto InBrokenStream = llvm::make_unique<DiscontiguousStream>(
+ auto InBrokenStream = llvm::make_unique<BrokenStream>(
BrokenInputData, Endians[I], Align);
Streams[I * 2].Input = std::move(InByteStream);
@@ -184,7 +184,7 @@ protected:
for (uint32_t I = 0; I < NumEndians; ++I) {
Streams[I * 2].Output =
llvm::make_unique<MutableBinaryByteStream>(OutputData, Endians[I]);
- Streams[I * 2 + 1].Output = llvm::make_unique<DiscontiguousStream>(
+ Streams[I * 2 + 1].Output = llvm::make_unique<BrokenStream>(
BrokenOutputData, Endians[I], Align);
}
}
@@ -193,7 +193,7 @@ protected:
for (uint32_t I = 0; I < NumEndians; ++I) {
Streams[I * 2].Output =
llvm::make_unique<MutableBinaryByteStream>(InputData, Endians[I]);
- Streams[I * 2 + 1].Output = llvm::make_unique<DiscontiguousStream>(
+ Streams[I * 2 + 1].Output = llvm::make_unique<BrokenStream>(
BrokenInputData, Endians[I], Align);
}
}
@@ -202,7 +202,7 @@ protected:
for (uint32_t I = 0; I < NumEndians; ++I) {
Streams[I * 2].Input =
llvm::make_unique<BinaryByteStream>(OutputData, Endians[I]);
- Streams[I * 2 + 1].Input = llvm::make_unique<DiscontiguousStream>(
+ Streams[I * 2 + 1].Input = llvm::make_unique<BrokenStream>(
BrokenOutputData, Endians[I], Align);
}
}
@@ -504,31 +504,39 @@ TEST_F(BinaryStreamTest, StreamReaderEnum) {
}
}
-TEST_F(BinaryStreamTest, DISABLED_StreamReaderObject) {
+TEST_F(BinaryStreamTest, StreamReaderObject) {
struct Foo {
int X;
double Y;
char Z;
+
+ bool operator==(const Foo &Other) const {
+ return X == Other.X && Y == Other.Y && Z == Other.Z;
+ }
};
std::vector<Foo> Foos;
Foos.push_back({-42, 42.42, 42});
Foos.push_back({100, 3.1415, static_cast<char>(-89)});
+ Foos.push_back({200, 2.718, static_cast<char>(-12) });
const uint8_t *Bytes = reinterpret_cast<const uint8_t *>(&Foos[0]);
- initializeInput(makeArrayRef(Bytes, 2 * sizeof(Foo)), alignof(Foo));
+ initializeInput(makeArrayRef(Bytes, 3 * sizeof(Foo)), alignof(Foo));
for (auto &Stream : Streams) {
// 1. Reading object pointers.
BinaryStreamReader Reader(*Stream.Input);
const Foo *FPtrOut = nullptr;
const Foo *GPtrOut = nullptr;
+ const Foo *HPtrOut = nullptr;
ASSERT_NO_ERROR(Reader.readObject(FPtrOut));
ASSERT_NO_ERROR(Reader.readObject(GPtrOut));
+ ASSERT_NO_ERROR(Reader.readObject(HPtrOut));
EXPECT_EQ(0U, Reader.bytesRemaining());
- EXPECT_EQ(0, ::memcmp(&Foos[0], FPtrOut, sizeof(Foo)));
- EXPECT_EQ(0, ::memcmp(&Foos[1], GPtrOut, sizeof(Foo)));
+ EXPECT_EQ(Foos[0], *FPtrOut);
+ EXPECT_EQ(Foos[1], *GPtrOut);
+ EXPECT_EQ(Foos[2], *HPtrOut);
}
}