sfertile added inline comments.
================ Comment at: clang/lib/AST/RecordLayoutBuilder.cpp:1643 + } else { + // Handle AIX oversized Long Long bitfield under 32 bit compile mode. + if (StorageUnitSize > 32 && ---------------- I get different results for using a long long bitfield, and using an enum with an underlying long long type: ``` struct S { unsigned long long field : 32; }; extern "C" int printf(const char*, ...); int main(void) { printf("%lu %lu\n", sizeof(struct S), alignof(struct S)); } ``` ``` *** Dumping AST Record Layout 0 | struct S 0:0-31 | unsigned long long field | [sizeof=4, dsize=4, align=4, preferredalign=4, | nvsize=4, nvalign=4, preferrednvalign=4] ``` __________________________________________________________________________ ``` enum e : unsigned long long { E = 1 }; struct S { enum e field : 32; }; extern "C" int printf(const char*, ...); int main(void) { printf("%lu %lu\n", sizeof(struct S), alignof(struct S)); } ``` ``` *** Dumping AST Record Layout 0 | struct S 0:0-31 | enum e field | [sizeof=8, dsize=8, align=8, preferredalign=8, | nvsize=8, nvalign=8, preferrednvalign=8] ``` Shouldn't we be truncating the size/align of the enum typed bitfield as well? CHANGES SINCE LAST ACTION https://reviews.llvm.org/D87029/new/ https://reviews.llvm.org/D87029 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits