> On Jul 23, 2025, at 12:55, Siddhesh Poyarekar <siddh...@gotplt.org> wrote: > > On 2025-07-23 11:08, Qing Zhao wrote: >> We always generate a call to .ACCESS_WITH_SIZE for every f->p whatever it’s >> a reference >> or a definition in C FE parser. (This is the case for FAM) > > Hmm, that's not correct then and I have been misreading the code all this > while; .ACCESS_WITH_SIZE does not make sense for a definition because the > size in question may or may not even be correct w.r.t. the definition at the > point that it is emitted. I reckon this too does not come up in the FAM case > because the FAM is not allocated separately from its containing object, > whereas in the case of a pointer, it is allocated separately. So... > >> For pointer with counted by, Yes, if we can determine whether a f->p is an >> object reference or >> an object definition, and ONLY emitting .ACCESS_WITH_SIZE for the f->p when >> it’s a object reference, >> then the approach that passes the VALUE of f->p to .ACCESS_WITH_SIZE is safe. >> However, I have two questions for this: >> Question 1: Can we make sure this in C FE? (Determine whether a f->p is an >> object reference of an object definition) > > ... it probably makes sense to focus on resolving this question to make sure > that .ACCESS_WITH_SIZE is generated for a reference only when the reference > is a read and not when it's a write because that's the only place where the > call actually has a correct meaning.
Yes, this is the most important question we need to answer first to move on to the next step: Whether it’s able to distinguish a reference “p->f” is a read or a write to in C FE? If Yes, how to do this? For the following example: struct S { int n; int *p __attribute__((counted_by(n))); } *f; Int *g; void setup (int **ptr, int count) { *ptr = __builtin_malloc (sizeof (int) * count); g = *ptr; }; int main () { f = __builtin_malloc (sizeof (struct S)); setup (&f->p, 10); } In the above code, Is the “f->p” in the above example a read or a write when we are in C FE? Then, should we emit .ACCESS_WITH_SIZE for it or not? Qing > > Sid