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