"did you mean [builtin function]?" diagnostics print a useless declaration site (original) (raw)

Consider:

constexpr float A = __builtin_isinfinity();

The output is:


array.cpp:1570:21: error: use of undeclared identifier '__builtin_isinfinity'; did you mean '__builtin_isfinite'?
 1570 | constexpr float A = __builtin_isinfinity();
      |                     ^~~~~~~~~~~~~~~~~~~~
      |                     __builtin_isfinite
array.cpp:1570:21: note: '__builtin_isfinite' declared here
array.cpp:1570:42: error: too few arguments to function call, expected 1, have 0
 1570 | constexpr float A = __builtin_isinfinity();
      |                     ~~~~~~~~~~~~~~~~~~~~~^
2 errors generated.

The "note: '__builtin_isfinite' declared here" line is useless and confusing - It's not declared there at all and in fact is declared nowhere since it's a builtin function.

We should simply not be adding this note for builtin functions.