Thanks, Sid!

(one comment below)

Am Donnerstag, dem 26.10.2023 um 07:51 -0400 schrieb Siddhesh Poyarekar:
> On 2023-10-26 04:37, Martin Uecker wrote:

> 
> >         /* ... and either PARM is void * or has a type that is complete and 
> > has a
> >      constant size... */
> >         && ((typesize && poly_int_tree_p (typesize))
> > @@ -1587,10 +1587,14 @@ parm_object_size (struct object_size_info *osi, 
> > tree var)
> >         unsigned argpos = 0;
> >   
> >         /* ... then walk through the parameters to pick the size parameter 
> > and
> > -    safely scale it by the type size if needed.  */
> > +    safely scale it by the type size if needed.
> > +
> > +    TODO: we could also compute the size of VLAs where the size is
> > +    given by a function parameter.  */
> 
> Isn't this testcase h() in builtin-dynamic-object-size-20.c?  If you're 
> referring to testcase i(), then maybe "where the size is given by a 
> non-trivial function of a function parameter, e.g.
> fn (size_t n, char buf[dummy(n)])."

h() is supported.  For i() we would need something as
__builtin_access__with_size to record the result of dummy().

But the comment refers to the simpler case:

fn (size_t n, char (*buf)[n])
        [[gnu::access(read_write, 2, 1)]]

This doesn't work because buf[n] does not have constant
size, but it could be made to work more easily because
the size is directly given by a function argument.

Martin


> 
> >         for (arg = fnargs; arg; arg = TREE_CHAIN (arg), ++argpos)
> > -   if (argpos == access->sizarg && INTEGRAL_TYPE_P (TREE_TYPE (arg)))
> > +   if (argpos == access->sizarg)
> >       {
> > +       gcc_assert (INTEGRAL_TYPE_P (TREE_TYPE (arg)));
> >         sz = get_or_create_ssa_default_def (cfun, arg);
> >         if (sz != NULL_TREE)
> >           {
> > 
> 
> We rely on the frontend to make sure that the arg at sizarg is an 
> integral type.  OK.
> 
> Overall the change looks OK with a few nits I pointed out above.
> 
> Thanks,
> Sid

Reply via email to