hubert.reinterpretcast added inline comments.
================ Comment at: clang/lib/AST/RecordLayoutBuilder.cpp:1254 + // space or zero-extent array. + if (DefaultsToAIXPowerAlignment && !getDataSize().isZero()) { + PreferredBaseAlign = BaseAlign; ---------------- This needs to check `HandledFirstNonOverlappingEmptyField`: ``` struct A { char x[0]; }; struct B { double d; }; struct C : A, B { char x; } c; ``` ================ Comment at: clang/lib/AST/RecordLayoutBuilder.cpp:1255 + if (DefaultsToAIXPowerAlignment && !getDataSize().isZero()) { + PreferredBaseAlign = BaseAlign; + } ---------------- Note that `PreferredBaseAlign` is only truly meaningful after this line, and related fields, such as `UnpackedPreferredBaseAlign`, require similar treatment. With `UnpackedAlignTo` being dependent on a meaningful value of `UnpackedPreferredBaseAlign`, it needs an update here as well. Consider the following source. Noting that `C` and `D` are identical except for the packed attribute and yield identical layout properties despite that difference, we should be getting a `-Wpacked` warning with `-Wpacked` (but it is missing). ``` struct A { double d; }; struct B { char x[8]; }; struct [[gnu::packed]] C : B, A { // expected-warning {{packed attribute is unnecessary}} char x alignas(4)[8]; } c; struct D : B, A { char x alignas(4)[8]; } d; ``` ``` *** Dumping AST Record Layout 0 | struct C 0 | struct B (base) 0 | char [8] x 8 | struct A (base) 8 | double d 16 | char [8] x | [sizeof=24, dsize=24, align=4, preferredalign=4, | nvsize=24, nvalign=4, preferrednvalign=4] ``` ``` *** Dumping AST Record Layout 0 | struct D 0 | struct B (base) 0 | char [8] x 8 | struct A (base) 8 | double d 16 | char [8] x | [sizeof=24, dsize=24, align=4, preferredalign=4, | nvsize=24, nvalign=4, preferrednvalign=4] ``` CHANGES SINCE LAST ACTION https://reviews.llvm.org/D79719/new/ https://reviews.llvm.org/D79719 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits