aaron.ballman added a comment.

In D134453#3834659 <https://reviews.llvm.org/D134453#3834659>, @dblaikie wrote:

>>> 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.

No apologies necessary, sorry for the confusion! Yes, I meant the non-auto case 
(practically, I mean both cases).

>> 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.

I think we're on the same page, yes, thanks!


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