Am Montag, dem 23.10.2023 um 14:43 -0400 schrieb Siddhesh Poyarekar:
> On 2023-10-23 14:06, Martin Uecker wrote:
> > We should aim for a good integration with the BDOS pass, so
> > that it can propagate the information further, e.g. the
> > following should work:
> >
> > struct { int L; char buf[] __counted_by(L) } x;
> > x.L = N;
> > x.buf = ...;
> > char *p = &x->f;
> > __bdos(p) -> N
> >
> > So we need to be smart on how we provide the size
> > information for x->f to the backend.
> >
> > This would also be desirable for the language extension.
>
> This is essentially why there need to be frontend rules constraining
> reordering and reachability semantics of x.L, thus restricting DSE and
> reordering for it.
Yes, this too.
> This is not really a __bdos/__bos question, because
> that bit is trivial; if the structure is visible, the value is simply
> x.L. This is also why adding a reference to x.L in __bos/__bdos is not
> sufficient or even possible in, e.g. the above case you note.
The value x.L may change in time. I would argue that it needs
to be the value of x.L at the time where x.buf (not x->f, sorry)
is accessed. So the FE needs to evaluate x.L when x.buf is
accessed and store the value somewhere where __bdos can find
it later. In the type information would make sense.
But I am not sure how to do this in the best way so that this
information is not removed later when not used explicitely
before __bdos tries to look at it.
Martin