nlopes added a comment.

In D128501#3613420 <https://reviews.llvm.org/D128501#3613420>, @efriedma wrote:

>> No, you can still link those. There's no ABI change nor any interference at 
>> IR level.
>
> The scenario I was thinking of with -ffine-grained-bitfield-accesses is 
> something like the following:
>
> File A:
>
>   struct X { int a : 8; int b : 24; };
>   void f(struct X*);
>   int g() {
>       struct X x;
>       x.a = 10;
>       f(&x);
>       return x.a;
>   }
>
> File B:
>
>   struct X { int a : 8; int b : 24; };
>   void f(struct X* x) {
>       x->b = 10;
>   }
>
> If both files are compiled -ffine-grained-bitfield-accesses, the fields don't 
> overlap.  If both files are compiled with 
> -fno-fine-grained-bitfield-accesses, the assignment in file A freezes both 
> fields of "x".  If file A is compiled with -ffine-grained-bitfield-accesses, 
> but file B is not, f() corrupts the field "a", so g() returns poison (if I'm 
> not missing anything?).

You are right, thanks! f() corrupts `a` because f assumes the fields were both 
initialized or neither of them was initialized.
The fix is not trivial though, because -ffine-grained-bitfield-accesses would 
have to freeze the adjacent fields.
This only matters if the IRs are linked together with IPO. Otherwise, at object 
level it doesn't really matter.

Do you think we can get away by just documenting the incompatibility of doing 
IPO with files compiled with different -ffine-grained-bitfield-accesses flags?


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D128501/new/

https://reviews.llvm.org/D128501

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to