[pdb] Fix issues with pdb writing.

This fixes an alignment issue by forcing all cached allocations
to be 8 byte aligned, and also fixes an issue arising on big
endian systems by writing ulittle32_t's instead of uint32_t's
in the test.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@272437 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Zachary Turner 2016-06-10 21:47:26 +00:00
parent c8e19fcc1c
commit 936d48972b
2 changed files with 5 additions and 2 deletions

View File

@ -104,7 +104,7 @@ Error MappedBlockStream::readBytes(uint32_t Offset, uint32_t Size,
// into it, and return an ArrayRef to that. Do not touch existing pool
// allocations, as existing clients may be holding a pointer which must
// not be invalidated.
uint8_t *WriteBuffer = Pool.Allocate<uint8_t>(Size);
uint8_t *WriteBuffer = static_cast<uint8_t *>(Pool.Allocate(Size, 8));
if (auto EC = readBytes(Offset, MutableArrayRef<uint8_t>(WriteBuffer, Size)))
return EC;

View File

@ -308,6 +308,7 @@ TEST(MappedBlockStreamTest, TestWriteThenRead) {
MappedBlockStreamImpl S(llvm::make_unique<IndexedStreamData>(0, F), F);
enum class MyEnum : uint32_t { Val1 = 2908234, Val2 = 120891234 };
using support::ulittle32_t;
uint16_t u16[] = {31468, 0};
uint32_t u32[] = {890723408, 0};
@ -315,7 +316,9 @@ TEST(MappedBlockStreamTest, TestWriteThenRead) {
StringRef ZStr[] = {"Zero Str", ""};
StringRef FStr[] = {"Fixed Str", ""};
ArrayRef<uint8_t> byteArray[] = {{'1', '2'}, {'0', '0'}};
ArrayRef<uint32_t> intArray[] = {{890723408, 29082234}, {0, 0}};
ArrayRef<support::ulittle32_t> intArray[] = {
{ulittle32_t(890723408), ulittle32_t(29082234)},
{ulittle32_t(0), ulittle32_t(0)}};
StreamReader Reader(S);
StreamWriter Writer(S);