Hi Qing,

On Mon, Aug 05, 2024 at 10:41:43PM GMT, Martin Uecker wrote:
> Am Montag, dem 05.08.2024 um 20:10 +0000 schrieb Qing Zhao:
> > On Aug 5, 2024, at 06:33, Martin Uecker <uec...@tugraz.at> wrote:
> > > 
> > > Am Montag, dem 05.08.2024 um 11:50 +0200 schrieb Jakub Jelinek:
> > > > On Mon, Aug 05, 2024 at 11:45:56AM +0200, Alejandro Colomar wrote:
> > > > > [CC += Kees, Qing]
> > > > > 
> > > > > Hi Joseph,
> > > > > 
> > > > > On Sun, Aug 04, 2024 at 08:34:24PM GMT, Alejandro Colomar wrote:
> > > > > > On Sun, Aug 04, 2024 at 08:02:25PM GMT, Martin Uecker wrote:
> > > > > > D'oh!  I screwed it.  I wanted to have written this:
> > > > > > 
> > > > > > $ cat star.c 
> > > > > > void foo(char (*a)[3][*], int (*x)[__lengthof__(*a)]);
> > > > > 
> > > > > I think this answers your question of if we want __lengthof__ to
> > > > > evaluate its operand if the top-level array is non-VLA but an inner
> > > > > array is VLA.
> > > > > 
> > > > > We clearly want it to not evaluate, because we want this __lengthof__
> > > > > to be a constant expression, ...
> > > > 
> > > > But if you don't evaluate the argument, you can't handle counted_by.
> > > > Because for counted_by you need the expression (the object on which it 
> > > > is
> > > > used).
> > > 
> > > You would not evaluate only when the size is an integer constant
> > > expression, which would not apply to counted_by.
> > 
> > I still don’t feel very comfortable on the idea of  applying
> > “__lengthof__()” operator on flexible array members with
> > “counted_by”  attributes. My major concerns are:
> > 
> > 1. I thought that the new operator “__lengthof__(expr)" might need
> > to stick to the TYPE of the expr  just as  the operator
> > sizeof (expr).  Sizeof will just error when the TYPE of the expr
> > does not include the size information (for Incomplete types
> > including flexible array members), I expect the same behavior for
> > the new operator “__lenghof__(expr)”. 

Let's be cautious, and start by having an error on FAMs in the first
implementation.  We can discuss support for attributes in a later
iteration.  So, I agree.

> > 
> > The “counted-by” attribute currently is not in the TYPE system, and
> > we plan to add it into the TYPE system later through language
> > standard (or an GCC extension).  If that happens, then both the
> > “sizeof” and the “__lengthof__” operators should be automatically
> > evaluate the “size" or the “length” for the expr through its TYPE.
> >  (Just as the current VLA, its size and length already in the TYPE,
> > therefore both “sizeof” and “__lengthof__” should evaluate VLA. 

I'm curious; how do you plan to make counted_by as part of the type
system?  I've read the paper for using a .identifier length designator
(n3188; <https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3188.htm>),
but that's a constant, and doesn't use an attribute.

> > 
> > however, at this time, it’s not a good idea to mess up the operator
> > “sizeof” or the new operator “__lengthof__”  with the information
> > outside of the TYPE system. (Even though the information outside of
> > TYPE can provide the size or length info).

Okay.

> I agree with this. I would also much prefer to see a proper language 
> extension,
> we should not really be any harder to implement than "counted_by" itself.
> 
> Martin
> 
> > 
> > 2. For the purpose of PR116016
> > (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116016): add
> > __builtin_set_counted_by(P->FAM, COUNT) or equivalent 
> > 
> > The most important functionality the kernel needs from compilers is
> > a way to SET the counted_by field. Unless the new operator
> > “__lengthof__” returns a LVALUE that can be assigned to,

No; it won't be an lvalue; and the approach with an lvalue gives you a
way to both read and write in a single feature, so it's quite nice.  ;)

> > it cannot meet the requirement from kernel. 
> > 
> > However, from my understanding of the new “__lengthof__”, it will be
> > similar as “sizeof”, will not be a Lvalue. 

Yep.

> > 
> > Therefore, for PR116016, we still need a new builtin, specific for
> > the counted_by attribute. 

Yep.

Have a lovely night!
Alex

-- 
<https://www.alejandro-colomar.es/>

Attachment: signature.asc
Description: PGP signature

Reply via email to