brunodf-gf wrote:

> My idea is to use omnipotent char for the whole bit-field storage unit, but 
> keep the struct path, offset and size. Fields in the same storage unit would 
> still alias, while separate units could be distinguished by the struct path. 
> Does this make sense, or is there some language rule I am missing here?

OK. So where something like:

```
struct S {
  int a;
  int b;
};
```

Gives a hierarchy like:

```mermaid
flowchart LR
  int --- char
  SA[S::a] --- int
  SB[S::b] --- int
```

You propose that something like:

```
struct B {
   // offset 0
   int a : 2;
   int b : 2;
   char : 0;
   // offset 1
   int c : 2;
   // offset 4
   int d;
};
```

Gets a hierarchy:

```mermaid
flowchart LR
  int --- char
  B0["B+0"] --- char
  B1["B+1"] --- char
  BD["B::d"] --- int
```

Where tag `B+0` is used for accessing the storage of `B::a` and `B::b`, and tag 
`B+1` is used for accessing the storage of `B::c`. Do I understand that 
correctly?

The implication would be that TBAA considers a bit-field access `B+0` disjunct 
from any other access except direct `char` access (but including other 
bit-field access such as `B+1`). I think that should be OK in the language 
(bit-fields are not even addressable objects). Tagging @rjmccall for an expert 
opinion.

https://github.com/llvm/llvm-project/pull/226806
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to