On Fri, Jan 17, 2025 at 3:14 PM 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.) > - 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. > I re-opened the discussion on the LLVM discourse page. There wasn't a lot of pushback when it was first brought up, so I suspect that people will be generally amenable to it.
https://discourse.llvm.org/t/rfc-enforcing-bounds-safety-in-c-fbounds-safety/70854/131?u=gwelymernans -bw > -- > Joseph S. Myers > josmy...@redhat.com