[LLD] Do not print additional newlines after reaching error limit

Summary:
This could previously happen if errors that are emitted after reaching the
error limit. In that case, the flag inside the newline() function will be
set to true which causes the next call to print a newline even though the
actual message will be discarded.

Reviewers: ruiu, grimar, MaskRay, espindola

Reviewed By: ruiu

Subscribers: emaste, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D65198

llvm-svn: 366944
This commit is contained in:
Alexander Richardson 2019-07-24 20:56:23 +00:00
parent a1997ce2e5
commit a8104b4927
2 changed files with 26 additions and 1 deletions

View File

@ -157,12 +157,13 @@ void ErrorHandler::warn(const Twine &msg) {
void ErrorHandler::error(const Twine &msg) {
std::lock_guard<std::mutex> 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)

View File

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