hubert.reinterpretcast added inline comments.

================
Comment at: clang/lib/AST/RecordLayoutBuilder.cpp:1908
   // The align if the field is not packed. This is to check if the attribute
   // was unnecessary (-Wpacked).
   CharUnits UnpackedFieldAlign = FieldAlign;
----------------
Testing using my build with this patch seems to indicate that tracking 
`FieldAlign` for `UnpackedFieldAlign` does not lead to the desired result.

The `QQ` and `ZZ` cases differ only on the `packed` attribute on `Q`. They are 
observed to have different sizes; however, we get a `-Wpacked` diagnostic 
claiming that the `packed` attribute was unnecessary (and could therefore be 
removed).

```
struct [[gnu::packed]] Q {
  double x [[gnu::aligned(4)]];
};
struct QQ : Q { char x; };

struct Z {
  double x [[gnu::aligned(4)]];
};
struct ZZ : Z { char x; };

extern char qx[sizeof(QQ)];
extern char qx[12];
extern char qz[sizeof(ZZ)];
extern char qz[16];
```

```
<stdin>:1:24: warning: packed attribute is unnecessary for 'Q' [-Wpacked]
struct [[gnu::packed]] Q {
                       ^
1 warning generated.
```


Repository:
  rG LLVM Github Monorepo

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