[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 16:43:25 PDT 2020
hubert.reinterpretcast added inline comments.
================
Comment at: clang/lib/AST/RecordLayoutBuilder.cpp:666
+ /// HasNonEmptyBaseClass - Whether the class has any non-empty class (in the
+ /// sense of (C++11 [meta.unary.prop])) as base.
+ bool HasNonEmptyBaseClass;
----------------
Minor nit: s/as base/as a base/;
================
Comment at: clang/lib/AST/RecordLayoutBuilder.cpp:707
+ HandledFirstNonOverlappingEmptyField(false),
+ HasNonEmptyBaseClass(false),
+ FirstNearlyEmptyVBase(nullptr) {}
----------------
Minor nit: Please fix the formatting.
================
Comment at: clang/lib/AST/RecordLayoutBuilder.cpp:1225
+ Context.getTargetInfo().getTriple().isPS4() ||
+ Context.getTargetInfo().getTriple().isOSAIX()))
+ ? CharUnits::One()
----------------
Thanks; verified that this is correct with `xlclang++` from IBM XL C/C++ for AIX with:
```
struct A {
char x;
};
struct B {
int x;
};
struct __attribute__((__packed__)) C : A, B {} c;
```
Length is 5:
```
[10] m 0x00000004 .bss 1 extern c
[11] a4 0x00000005 0 0 CM RW 0 0
```
@Xiangling_L, I suggest adding a case for this to the tests.
================
Comment at: clang/lib/AST/RecordLayoutBuilder.cpp:1256
+ // space or zero-extent array.
+ if (DefaultsToAIXPowerAlignment && !(getDataSize().isZero() || IsUnion)) {
+ PreferredBaseAlign = BaseAlign;
----------------
Unions cannot have base classes. Please assert `!IsUnion`.
================
Comment at: clang/lib/AST/RecordLayoutBuilder.cpp:1260
+
+ // The maximum field alignment overrides base align/preferred base align(AIX
+ // only).
----------------
Suggestion:
```
// The maximum field alignment overrides the base align/(AIX-only) preferred
// base align.
```
================
Comment at: clang/test/Layout/aix-power-alignment-typedef.cpp:18
+
+// CHECK-DAG: @_ZN5test11aE = global i32 2, align 4
+
----------------
Instead of checking the value of `a`, the alignment can be checked more directly from the IR for `cc`.
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D79719/new/
https://reviews.llvm.org/D79719
More information about the cfe-commits
mailing list