dwblaikie wrote:

> ```c++
> struct A {
>   short a1;
>   short a2;
> };
> 
> struct B {
>   [[clang::preferred_type(A)]] unsigned b1 : 32 = 0x000F'000C;
> };
> 
> int main()
> {
>     B b;
>     return b.b1;
> }
> ```

An example where the layout doesn't match the normal struct layout might be 
more interesting? (like the reality of this situation ^ seems indistinguishable 
from similar code that used the real type and no bitfield, I think? (as far as 
the DWARF,struct layouts, etc, are concerned)) - maybe a struct with a `short` 
and a `char` (so it should have a byte of tail padding) then putting it in a 24 
bit bitfield (maybe with an 8 bit bitfield after that - to check if attempts to 
write to the first bitfielded struct don't clobber the following bits) - or, 
maybe even a struct that ends in a bitfield so it's got less-than-whole-byte 
padding at the end, and see how that overlaps with embedding that as a bitfield 
in another struct with a subsequent bitfield.

I would guess a DWARF consumer might have more struggles there - though I Don't 
think it means we shouldn't do it, just expect to have to fix debuggers for 
this probably-rather-novel DWARF.

https://github.com/llvm/llvm-project/pull/69104
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to