[LLVMbugs] [Bug 18618] New: MS ABI: Alignment of pointer to member is wrong
bugzilla-daemon at llvm.org
bugzilla-daemon at llvm.org
Sat Jan 25 19:02:01 PST 2014
http://llvm.org/bugs/show_bug.cgi?id=18618
Bug ID: 18618
Summary: MS ABI: Alignment of pointer to member is wrong
Product: clang
Version: unspecified
Hardware: PC
OS: All
Status: NEW
Severity: normal
Priority: P
Component: LLVM Codegen
Assignee: unassignedclangbugs at nondot.org
Reporter: david.majnemer at gmail.com
CC: llvmbugs at cs.uiuc.edu
Classification: Unclassified
consider:
extern "C" int printf(const char *, ...);
static char buffer[419430400];
inline void *operator new(size_t, void *pv) { return pv; }
struct __single_inheritance Single;
struct __multiple_inheritance Multiple;
struct __virtual_inheritance Virtual;
struct Unspecified;
struct C {
char c;
int Single::*Single_field;
int Multiple::*Multiple_field;
int Virtual::*Virtual_field;
int Unspecified::*Unspecified_field;
int (Single::*Single_fun)();
int (Multiple::*Multiple_fun)();
int (Virtual::*Virtual_fun)();
int (Unspecified::*Unspecified_fun)();
C() {
printf("offsetof Single_field %d\n", (int)((char *)&Single_field -
buffer));
printf("alignof Single_field %d\n", __alignof(Single_field));
printf("alignof int Single::* %d\n", __alignof(int Single::*));
printf("offsetof Multiple_field %d\n", (int)((char *)&Multiple_field
- buffer));
printf("alignof Multiple_field %d\n", __alignof(Multiple_field));
printf("alignof int Multiple::* %d\n", __alignof(int Multiple::*));
printf("offsetof Virtual_field %d\n", (int)((char *)&Virtual_field -
buffer));
printf("alignof Virtual_field %d\n", __alignof(Virtual_field));
printf("alignof int Virtual::* %d\n", __alignof(int Virtual::*));
printf("offsetof Unspecified_field %d\n", (int)((char
*)&Unspecified_field - buffer));
printf("alignof Unspecified_field %d\n", __alignof(Unspecified_field));
printf("alignof int Unspecified::* %d\n", __alignof(int
Unspecified::*));
printf("offsetof Single_fun %d\n", (int)((char *)&Single_fun -
buffer));
printf("alignof Single_fun %d\n", __alignof(Single_fun));
printf("alignof int (Single::*)() %d\n", __alignof(int (Single::*)()));
printf("offsetof Multiple_fun %d\n", (int)((char *)&Multiple_fun -
buffer));
printf("alignof Multiple_fun %d\n", __alignof(Multiple_fun));
printf("alignof int (Multiple::*)() %d\n", __alignof(int
(Multiple::*)()));
printf("offsetof Virtual_fun %d\n", (int)((char *)&Virtual_fun -
buffer));
printf("alignof Virtual_fun %d\n", __alignof(Virtual_fun));
printf("alignof int (Virtual::*) %d\n", __alignof(int
(Virtual::*)()));
printf("offsetof Unspecified_fun %d\n", (int)((char *)&Unspecified_fun
- buffer));
printf("alignof Unspecified_fun %d\n", __alignof(Unspecified_fun));
printf("alignof int (Unspecified::*) %d\n", __alignof(int
(Unspecified::*)()));
}
};
int main() { new (buffer) C; }
clang gets:
offsetof Single_field 4
alignof Single_field 4
alignof int Single::* 4
offsetof Multiple_field 8
alignof Multiple_field 4
alignof int Multiple::* 4
offsetof Virtual_field 12
alignof Virtual_field 4
alignof int Virtual::* 4
offsetof Unspecified_field 20
alignof Unspecified_field 4
alignof int Unspecified::* 4
offsetof Single_fun 32
alignof Single_fun 4
alignof int (Single::*)() 4
offsetof Multiple_fun 36
alignof Multiple_fun 4
alignof int (Multiple::*)() 4
offsetof Virtual_fun 44
alignof Virtual_fun 4
alignof int (Virtual::*) 4
offsetof Unspecified_fun 56
alignof Unspecified_fun 4
alignof int (Unspecified::*) 4
msvc gets:
offsetof Single_field 4
alignof Single_field 1
alignof int Single::* 4
offsetof Multiple_field 8
alignof Multiple_field 1
alignof int Multiple::* 4
offsetof Virtual_field 16
alignof Virtual_field 1
alignof int Virtual::* 4
offsetof Unspecified_field 24
alignof Unspecified_field 1
alignof int Unspecified::* 4
offsetof Single_fun 36
alignof Single_fun 1
alignof int (Single::*)() 4
offsetof Multiple_fun 40
alignof Multiple_fun 1
alignof int (Multiple::*)() 4
offsetof Virtual_fun 48
alignof Virtual_fun 1
alignof int (Virtual::*) 4
offsetof Unspecified_fun 64
alignof Unspecified_fun 1
alignof int (Unspecified::*) 4
note that alignof on a field in the struct is different from the field's type.
--
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20140126/a631316d/attachment.html>
More information about the llvm-bugs
mailing list