Index: lld/trunk/Common/ErrorHandler.cpp =================================================================== --- lld/trunk/Common/ErrorHandler.cpp +++ lld/trunk/Common/ErrorHandler.cpp @@ -157,12 +157,13 @@ void ErrorHandler::error(const Twine &msg) { std::lock_guard lock(mu); - newline(errorOS, msg); if (errorLimit == 0 || errorCount < errorLimit) { + newline(errorOS, msg); printHeader("error: ", raw_ostream::RED, msg); *errorOS << msg << "\n"; } else if (errorCount == errorLimit) { + newline(errorOS, msg); printHeader("error: ", raw_ostream::RED, msg); *errorOS << errorLimitExceededMsg << "\n"; if (exitEarly) Index: lld/trunk/test/ELF/error-limit-no-newlines.s =================================================================== --- lld/trunk/test/ELF/error-limit-no-newlines.s +++ lld/trunk/test/ELF/error-limit-no-newlines.s @@ -0,0 +1,24 @@ +# REQUIRES: x86 +# RUN: llvm-mc -filetype=obj -triple=x86_64 %s -o %t1.o +# RUN: not ld.lld --error-limit=1 %t1.o %t1.o %t1.o -o /dev/null 2>%t.output +# RUN: echo "END" >> %t.output +# RUN: FileCheck %s -input-file=%t.output + +# CHECK: error: duplicate symbol: _start +# CHECK-NEXT: >>> defined at {{.*}}1.o:(.text+0x0) +# CHECK-NEXT: >>> defined at {{.*}}1.o:(.text+0x0) +# CHECK-EMPTY: +# CHECK-NEXT: ld.lld: error: too many errors emitted, stopping now (use -error-limit=0 to see all errors) +## Ensure that there isn't an additional newline before the next message: +# CHECK-NEXT: END +.globl _start +_start: + nop + +.globl foo +foo: + nop + +.globl bar +bar: + nop