From: Douglas Gregor Date: Thu, 5 Jan 2012 23:49:36 +0000 (+0000) Subject: Always allocate an extra 8 bytes for a deserialized declaration, since X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=5d1f496f86305b4738d465031a517b5be49f9ebd;p=clang 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 --- diff --git a/lib/AST/DeclBase.cpp b/lib/AST/DeclBase.cpp index f4e5d43ee6..4dc5bb7e85 100644 --- a/lib/AST/DeclBase.cpp +++ b/lib/AST/DeclBase.cpp @@ -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;