[PATCH] D21489: [codeview] Added support for bitfield type
Amjad Aboud via llvm-commits
llvm-commits at lists.llvm.org
Tue Jun 21 09:54:00 PDT 2016
aaboud added a comment.
In http://reviews.llvm.org/D21489#462178, @majnemer wrote:
> This approach still seems a little problematic, consider:
>
> #pragma pack(1)
> struct S {
> char : 0;
> int y : 1;
> };
> S s;
>
>
> Your code will produce:
>
> BitField (0x1001) {
> TypeLeafKind: LF_BITFIELD (0x1205)
> Type: int (0x74)
> BitSize: 1
> BitOffset: 8
> }
> UnknownLeaf (0x1002) {
> TypeLeafKind: LF_FIELDLIST (0x1203)
> DataMember {
> AccessSpecifier: Public (0x3)
> Type: 0x1001
> FieldOffset: 0x0
> Name: y
> }
> }
>
>
> However, I think it should produce:
>
> BitField (0x1001) {
> TypeLeafKind: LF_BITFIELD (0x1205)
> Type: int (0x74)
> BitSize: 1
> BitOffset: 0
> }
> UnknownLeaf (0x1002) {
> TypeLeafKind: LF_FIELDLIST (0x1203)
> DataMember {
> AccessSpecifier: Public (0x3)
> Type: 0x1001
> FieldOffset: 0x1
> Name: y
> }
> }
>
>
> I'm pretty sure that the only real way to get bitfields right is by encoding the storage offset in the DI metadata.
I think my code will produce:
BitField (0x1001) {
TypeLeafKind: LF_BITFIELD (0x1205)
Type: int (0x74)
BitSize: 1
BitOffset: 0
}
UnknownLeaf (0x1002) {
TypeLeafKind: LF_FIELDLIST (0x1203)
DataMember {
AccessSpecifier: Public (0x3)
Type: 0x1001
FieldOffset: 0x0
Name: y
}
}
Which is the same as MS cl.
http://reviews.llvm.org/D21489
More information about the llvm-commits
mailing list