hubert.reinterpretcast added inline comments.

================
Comment at: clang/lib/AST/RecordLayoutBuilder.cpp:1263
 
-  // The maximum field alignment overrides base align.
+  assert(!IsUnion && "Unions cannot have base classes.");
+  // AIX `power` alignment does not apply the preferred alignment for non-union
----------------
It seems this is a leftover copy of the code that has been moved above?


================
Comment at: clang/lib/AST/RecordLayoutBuilder.cpp:1809
+      Context.getTargetInfo().defaultsToAIXPowerAlignment();
+  bool FoundFirstNonOverlappingEmptyField = false;
+  if (DefaultsToAIXPowerAlignment)
----------------
The rename I suggested in my previous round of review was in coordination with 
maintaining the value not just for AIX. Since we're only maintaining the value 
for AIX, I prefer the previous name (or 
`FoundFirstNonOverlappingEmptyFieldForAIX`).


================
Comment at: clang/lib/AST/RecordLayoutBuilder.cpp:1810
+  bool FoundFirstNonOverlappingEmptyField = false;
+  if (DefaultsToAIXPowerAlignment)
+    if (!HandledFirstNonOverlappingEmptyField) {
----------------
Please merge the `if` conditions to reduce nesting:
```
  if (DefaultsToAIXPowerAlignment && !HandledFirstNonOverlappingEmptyField) {
```


================
Comment at: clang/lib/AST/RecordLayoutBuilder.cpp:1817
+      // 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.
----------------
Keep this reference to the variable up-to-date with its name.


================
Comment at: clang/lib/AST/RecordLayoutBuilder.cpp:1820
+      if (FoundFirstNonOverlappingEmptyField)
+        // For a union, the current field does not represent all "firsts".
+        HandledFirstNonOverlappingEmptyField = !IsUnion;
----------------
Change the condition of the `if` here to `!IsOverlappingEmptyField` and move 
the setting of `FoundFirstNonOverlappingEmptyField` to `true` into this `if`.

Move the previous comment and merge it with this one here:
> [ ... ] record it as handled for future invocations (except for unions, 
> because the current field does not represent all "firsts").




================
Comment at: clang/lib/AST/RecordLayoutBuilder.cpp:1928
+      FoundFirstNonOverlappingEmptyField) {
+    auto upgradeAlignment = [&](const BuiltinType *BTy) {
+      if (BTy->getKind() == BuiltinType::Double ||
----------------
Sorry for not seeing this earlier (I only notice some things when I hide the 
inline comments). I think `performBuiltinTypeAlignmentUpgrade` would read 
better at the call site (and better capture the checking, which is based on the 
kind of built-in type, that is within the lambda).


================
Comment at: clang/test/Layout/aix-Wpacked.cpp:9
+
+// CHECK-NOT: warning: packed attribute is unnecessary for 'Q' [-Wpacked]
+// CHECK: warning: packed attribute is unnecessary for 'test2::C' [-Wpacked]
----------------
Clang diagnostics are normally checked using `-verify` (as opposed to 
`FileCheck`). To use it, I think this needs to be split into the "expecting no 
diagnostics" and the "expecting diagnostics" cases. As it is, I think the 
`CHECK-NOT` has a problem because it checks for plain `'Q'`.


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

Reply via email to