[PATCH] D79719: [AIX] Implement AIX special alignment rule about double/long double
Hubert Tong via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Mon Jul 6 19:46:28 PDT 2020
hubert.reinterpretcast added inline comments.
================
Comment at: clang/lib/AST/ASTContext.cpp:2414
+ assert(PreferredAlign >= ABIAlign &&
+ "PreferredAlign is at least as large as ABIAlign.");
+ return PreferredAlign;
----------------
Minor nit: s/is/should be/;
================
Comment at: clang/lib/AST/RecordLayoutBuilder.cpp:1207
+ if (!Base->Class->isEmpty())
+ HasNonEmptyBaseClass = true;
+
----------------
Just set `HandledFirstNonOverlappingEmptyField` to `true` with a comment before the `if`:
By handling a base class that is not empty, we're handling the "first (inherited) member".
================
Comment at: clang/lib/AST/RecordLayoutBuilder.cpp:1799
if (D->isBitField()) {
+ if (FoundNonOverlappingEmptyFieldToHandle)
+ // For a union, the current field does not represent all "firsts".
----------------
Add a comment before the `if`:
```
// We're going to handle the "first member" based on
// `FoundNonOverlappingEmptyFieldToHandle` during the current invocation of
// this function; record it as handled for future invocations.
```
Given the rationale from the comment, move the subject `if` to immediately after the determination of `FoundNonOverlappingEmptyFieldToHandle`. That way, the setting of `HandledFirstNonOverlappingEmptyField` becomes less complicated to track.
================
Comment at: clang/lib/AST/RecordLayoutBuilder.cpp:1832
const ArrayType* ATy = Context.getAsArrayType(D->getType());
FieldAlign = Context.getTypeAlignInChars(ATy->getElementType());
} else if (const ReferenceType *RT = D->getType()->getAs<ReferenceType>()) {
----------------
It seems that the code to set `AlignIsRequired` is missing from this path.
```
typedef double Dbl __attribute__((__aligned__(2)));
typedef Dbl DblArr[];
union U {
DblArr fam;
char x;
};
U u[2];
extern char x[sizeof(u)];
extern char x[4];
```
================
Comment at: clang/lib/AST/RecordLayoutBuilder.cpp:1908
+ FoundNonOverlappingEmptyFieldToHandle))) {
+ HandledFirstNonOverlappingEmptyField = !IsUnion;
+
----------------
I think the `if` condition above is too complicated as a filter for setting `HandledFirstNonOverlappingEmptyField`. I would prefer if we don't need to set `HandledFirstNonOverlappingEmptyField` here. Please see my other comment about `HandledFirstNonOverlappingEmptyField`.
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D79719/new/
https://reviews.llvm.org/D79719
More information about the cfe-commits
mailing list