For
void f(); int main() { f(); }
lld -demangle now produces
ld64.lld: error: undefined symbol: f >>> referenced by path/to/main.o:(symbol main+0x8)
instead of
ld64.lld: error: undefined symbol: _f >>> referenced by path/to/main.o:(symbol _main+0x8)
previously. (Without -demangle, it still prints _f and _main.)
This does *not* match ld64's behavior, but it does match e.g. lld/COFF's
behaviour.
This is arguably easier to understand: clang prepends symbol names with _
on macOS, so it seems friendly if the linker removes it again in its
diagnostics. It also makes the extern "C" insertion diagnostics we added
recently look more self-consistent.
I'm not 100% sure this is a good idea, but it might be. Maybe best to land
it for a while and see how it feels?