> On Jan 17, 2025, at 18:13, Joseph Myers <josmy...@redhat.com> wrote:
> 
> On Fri, 17 Jan 2025, Qing Zhao wrote:
> 
>> struct fc_bulk {
>>  ...
>>  struct fs_bulk fs_bulk;
>>  struct fc fcs[] __counted_by(fs_bulk.len);
>> };
>> 
>> i.e, the “counted_by” field is in the inner structure of the current 
>> structure of the FAM.
>> With the current syntax, it’s not easy to extend to support this.
>> 
>> But with the designator syntax, it might be much easier to be extended to 
>> support this. 
>> 
>> So, Kees and Bill, what’s your opinion on this? I think that it’s better to 
>> have a consistent interface between GCC
>> and Clang. 
>> 
>> Joseph, what’s your opinion on this new syntax?  Shall we support the 
>> designator syntax for counted_by attribute?
> 
> Designator syntax seems reasonable.
> 
> I think basic C language design principles here include:
> 
> * It should be unambiguous in a given context what name space an 
> identifier is to be looked up in.  (So you can have designator syntax 
> where the identifier is always looked up as a member of the relevant 
> struct, or use a plain identifier where the semantics are defined that 
> way.  But what would be a bad idea would be any attempt to automagically 
> guess whether something that looks like an expression should be 
> interpreted as an expression or with identifiers instead looked up as 
> structure members.  If you allow fs_bulk.len above, there should be no 
> possibility of fs_bulk being an ordinary identifier (global variable etc.)

If we use the designator syntax for counted by, then the correct syntax for the 
above should be:

struct fc_bulk {
 …
 struct fs_bulk fs_bulk;
 struct fc fcs[] __counted_by(.fs_bulk.len);
};


> - the name lookup rules should mean it's always only looked up as a member 
> of the current structure.)
> 
> * Don't introduce something "like expression but with different name 
> lookup rules".  Designators aren't expressions and have limited syntax.  
> It would be a bad idea to try to e.g. have something allowing arithmetic 
> on designators.  For example, don't allow __counted_by(.len1 + .len2) 
> where len1 and len2 are both members, as that's inventing a complete new 
> expression-like-but-not-expression syntactic construct.

So, even after we introduce the designator syntax for counted_by attribute,  
arbitrary expressions as:

counted_by (.len1 + const)
counted_by (.len1 + .len2) 

Still cannot be supported? 

If not, how should we support simple expressions for counted_by attribute? 

Thanks.

Qing

> 
> -- 
> Joseph S. Myers
> josmy...@redhat.com


Reply via email to