dblaikie added a comment.


>> OK, so it sounds like the printing behavior change (not necessarily with a 
>> policy flag) necessary for diagnostics (make it non-ambiguous/not invalid 
>> code which is what is currently emitted) would be a good bug fix both for 
>> diagnostics and for ast-print? I'm not sure we need anything other than that.
>
> Agreed, fixing up diagnostics and ast print to not print invalid types would 
> be a good fix to have. It doesn't necessitate a new printing policy.
>
>> So that what is currently printing as `t1<{}>` (ambiguous if the NTTP is of 
>> type `auto`, non-ambiguous, but invalid C++ if the NTTP has the specific 
>> type already) prints out as `t1<t2{}>` (correct C++ and disambiguates in the 
>> case of `auto` ambiguity).
>>
>> Or would you want the non-auto case to print in diagnostics as `t1<{}>` 
>> since there's no ambiguity, despite that not being valid C++? And then have 
>> a separate policy for ast-print that still prints it as `t1<t2{}>` so it's 
>> valid code?
>
> Personally (and others are welcome to disagree with me here!), I think we 
> would want to print `t1<t2{}>` even in the `auto` case for diagnostics and 
> ast print.

(sorry to nitpick, but this conversation's been a bit confusing so trying to be 
extra clear) - I guess you meant "even in the *non*-`auto`" case? (the auto 
case I think is clearer that it should always have the type - otherwise it's 
ambiguous) - but yeah, I'm with you - I think the language requires the type 
even in the non-auto case and it seems reasonable to side with that for 
explicitness/clarity even if it could arguably be omitted without loss of 
information, technically.

> For diagnostics, we sometimes print type information reasonably far away from 
> where the declaration of a type is (and use a note to shift the user's gaze 
> to the related type), and so I think having the extra type information is 
> useful for that situation. But even when we print the type information 
> reasonably close to the declaration of the type, it can be helpful because 
> the code context might be easy to lose -- consider using Clang from an IDE 
> where diagnostics are added to a listbox; if you copy the diagnostic from the 
> listbox to paste into an email to a coworker to ask about it, the related 
> code isn't going to come along without extra intervention.

Ok, so sounds like we're on the same page that `t1<{}>` is a diagnostic quality 
bug and we'd love to see a fix for it to include the top level type of the 
NTTP, as in `t1<t2{}>`, and that shouldn't need a new printing policy - because 
we never want to print `t1<{}>` and anywhere we do is a bug to be fixed.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D134453

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

Reply via email to