aaron.ballman added a comment.

In D69764#2938973 <https://reviews.llvm.org/D69764#2938973>, @MyDeveloperDay 
wrote:
> With the introduction of `CVQualifierOrder` the need for 
> `CVQualifierAlignment:` doesn't make so much sense
>
>   CVQualifierAlignment: Left
>   CVQualifierOrder: [ "inline", "static", "volatile", "const" ]
>
> I'm leaning toward introducing <type> into the `CVQualifierOrder` allowing 
> for some qualifiers to be Left of the type and some to be Right (this is not 
> dissimilar to what was discussed some time ago, and similar to the concept of 
> the resharper image above)
>
> So we would be able to have:
>
>   CVQualifierOrder: [ "inline", "static", "volatile", "<type>", "const", 
> "restrict" ]
>
> By doing so `inline,static,and volatile` are Left and `const,restrict` are 
> Right and so a single setting of Left and Right isn't applicable.
>
> The whole feature could then be determined ONLY using the `CVQualifierOrder` 
> however it doesn't feel like there is a good way to say "Don't change order" 
> (unless of course I use an empty `CVQualifierOrder` list), but this doesn't 
> feel very off by default enough, I like the explicitness of `Leave`.
>
> My gut feeling is to make `Left` and `Right` options define a predetermined 
> CVQualifierOrder, and introduce `Custom` as a new CVQualifierAlignment 
> setting which would require you to define the Order, this has the advantage 
> of driving a sort of semi standard as to what we mean by `Left` and `Right`
>
> Left would by default define:
>
>   CVQualifierOrder: [ "inline", "static", "volatile", "const", "restrict", 
> "<type>"]    
>
> Right would define:
>
>   CVQualifierOrder: [ "inline", "static", "<type>", "volatile", "const", 
> "restrict" ]
>
> (we might want to discuss what these defaults should be, I'm not a language 
> lawyer!)
>
> I realise "inline" and "static" are to the left in the Right alignment, but 
> I'm not sure them being to the right is even legal (its certainly not common) 
> or what is most likely wanted.
>
> I also think if a `CVQualifierOrder` is defined and the 
> `CVQualifierAlignment` is not `Custom` that should be a configuration error 
> to ensure there isn't any ambiguity
>
> Does anyone have any thoughts on this approach?

I think the general idea (letting the user specify the order of elements 
relative to one another rather than trying to come up with individual controls 
for each qualifier), I think that'll be easier for people to configure. I do 
worry about calling it "qualifier order" though as some of the things are 
definitely not qualifiers (like `static` or `inline` which are specifiers). A 
few questions about using an ordered list like this are: 0) should we diagnose 
typos (e.g., the user writes `inlnie` instead of `inline`)?, 1) should we 
diagnose duplications (e.g., the user lists `friend` twice)?

Btw, 
https://github.com/llvm/llvm-project/blob/main/clang/include/clang/Sema/DeclSpec.h#L229
 has quite a bit of information about the kinds of qualifiers and specifiers 
Clang deals with at the parsing stage, in case you were looking for a list of 
things to care about.

> Oh man you are killing me with good suggestions ;-)....
> So this will be hard with the current implementation because [ [ noreturn ] ] 
> are all separate tokens. However maybe if we COULD merge the tokens into 1 
> token (like we do in FormatTokenLexer) even it it was just temporarily for 
> this pass we maybe could do that.

I'd like to second the request for attribute support, even if it's follow-up 
work. Things like address space attributes, GC attributes, `__unaligned`, etc 
are all type qualifiers (I think we have a list of the attributes which are 
qualifiers in Type.h), so it's a natural extension. However, attributes in 
general are somewhat tricky because the attribute style (`__attribute__` vs 
`[[]]`) can be syntactically location sensitive. e.g., `[[noreturn]] void 
func()` means something different from `void [[noreturn]]` func()` and we have 
some attributes that can appertain to a declaration or a type (so the 
positioning can have silent semantic changes).

> I'm in no rush, I want to let the RFC have a good amount time for people to 
> read and to gather all the feedback, but I'm encouraged enough to think my 
> efforts won't be wasted and I want to address some of @aaron.ballman concerns 
> to extend a olive branch in the hope that I could at least partially gain 
> approval.

Not being in a rush sounds like a great plan! FWIW, I think we're moving 
steadily towards approval. I mentioned it on the RFC thread, but I'll mention 
it again here: thank you for starting the RFC process to have the broader 
discussion!


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D69764/new/

https://reviews.llvm.org/D69764

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to