Always allocate an extra 8 bytes for a deserialized declaration, since

some code in Clang expects 8-byte alignment of declarations.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@147626 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Douglas Gregor 2012-01-05 23:49:36 +00:00
Родитель 71207fc047
Коммит 5d1f496f86
1 изменённых файлов: 5 добавлений и 8 удалений

Просмотреть файл

@ -44,14 +44,11 @@ static bool StatSwitch = false;
void *Decl::AllocateDeserializedDecl(const ASTContext &Context,
unsigned ID,
unsigned Size) {
// Allocate an extra pointer's worth of storage, which ensures that
// (1) We have enough storage to stash the global declaration ID, and
// (2) We maintain pointer alignment.
//
// Note that this wastes 4 bytes on x86-64, which we'll undoubtedly end up
// finding a use for later.
void *Start = Context.Allocate(Size + sizeof(void*));
void *Result = (char*)Start + sizeof(void*);
// Allocate an extra 8 bytes worth of storage, which ensures that the
// resulting pointer will still be 8-byte aligned. At present, we're only
// using the latter 4 bytes of this storage.
void *Start = Context.Allocate(Size + 8);
void *Result = (char*)Start + 8;
// Store the global declaration ID
unsigned *IDPtr = (unsigned*)Result - 1;