hazohelet abandoned this revision.
hazohelet added a comment.

In D158472#4645378 <https://reviews.llvm.org/D158472#4645378>, @aaron.ballman 
wrote:

> In D158472#4605228 <https://reviews.llvm.org/D158472#4605228>, @hazohelet 
> wrote:
>
>> This breaks the one-note-for-one-overload-candidate rule of overload 
>> resolution failure diagnostics 
>> (https://github.com/llvm/llvm-project/blob/ff08c8e57e39d7970b65637595cdc221901f4ed1/clang/lib/Sema/SemaOverload.cpp#L11517-L11526),
>>  but in most cases this change would produce less lines of diagnostics.
>> If we don't like this additional note, we could instead suppress the fix-it 
>> diagnostics when the fix-it location and the diagnosed candidate location 
>> are not close (for example, more than 2 lines away).
>
> I'm uncomfortable with starting down the slippery slope of multiple notes per 
> overload resolution failure; that leads to an explosion of extra diagnostics 
> which makes it harder to spot the issue in the first place. My inclination is 
> to try to resolve this by fixing the way we emit fix-it diagnostics so that 
> we remove the extra whitespace from there because this seems like it's a 
> general problem with fix-its. Or am I wrong about this being a general issue? 
> CC @cjdb for opinions as well

I agree that the ideal fix would be a systematic change in how we display 
fix-it hints, or for that matter, distant source ranges in general.
We probably want output that looks like this:

  <source>:1:6: note: candidate function not viable: no known conversion from 
'int' to 'int *' for 1st argument; take the address of the argument with &
      1 | void ptr(int *p);
        |      ^   ~~~~~~
      ---
      5 |   ptr(n);
        |       
        |       &

In any case, suppressing fix-it hints would be disastrous for LSP things like 
clangd that use clang diagnostic output. So, this is a problem of how clang 
diagnostic engine display fix-it hints.



================
Comment at: clang/test/Sema/overloadable.c:31
+  accept_funcptr(f2); // expected-error{{no matching function for call to 
'accept_funcptr'}} \
+                      // expected-note 2{{take the address of the argument 
with &}}
 }
----------------
aaron.ballman wrote:
> Something odd is going on -- why is the note emitted twice?
There are two candidates, both of which would become viable if we take the 
address of them. (https://godbolt.org/z/6onn9x89a)


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

https://reviews.llvm.org/D158472

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

Reply via email to