http://llvm.org/bugs/show_bug.cgi?id=3046
Summary: __builtin__CFStringMakeConstantString crashes on 64-bit
systems
Product: clang
Version: unspecified
Platform: PC
OS/Version: Linux
Status: NEW
Severity: normal
Priority: P2
Component: LLVM Codegen
AssignedTo: [EMAIL PROTECTED]
ReportedBy: [EMAIL PROTECTED]
CC: [email protected]
The layout of the internal CFString struct looks something like this:
struct {
void *ClassType;
unsigned int Flags;
const char *Data;
long Length;
}
CodeGenModule::GetAddrOfConstantCFString happily assumes that this is correct
for the LLVM Type and thus builds the corresponding 4-element vector for the
initializer.
However, padding bytes are actual members on the LLVM level. On 64-bit systems,
the 32-bit Flags member is padded so that the 64-bit Data pointer is aligned.
The actual layout of the struct on the LLVM level thus looks like this:
struct {
void *ClassType;
unsigned int Flags;
char padding1;
char padding2;
char padding3;
char padding4;
const char *Data;
long Length;
}
The function then calls llvm::ConstantStruct::get with the 4-element
initializer and the 8-element structure, leading to an assertion being
triggered in the ConstantStruct constructor in llvm/lib/VMCore/Constants.cpp on
line 411.
The clang test CodeGen/cfstring.c triggers this bug.
--
Configure bugmail: http://llvm.org/bugs/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.
_______________________________________________
LLVMbugs mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/llvmbugs