summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lld/Common/ErrorHandler.cpp3
-rw-r--r--lld/test/ELF/error-limit-no-newlines.s24
2 files changed, 26 insertions, 1 deletions
diff --git a/lld/Common/ErrorHandler.cpp b/lld/Common/ErrorHandler.cpp
index c87c0609b26..983962db579 100644
--- a/lld/Common/ErrorHandler.cpp
+++ b/lld/Common/ErrorHandler.cpp
@@ -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)
diff --git a/lld/test/ELF/error-limit-no-newlines.s b/lld/test/ELF/error-limit-no-newlines.s
new file mode 100644
index 00000000000..f2468b40007
--- /dev/null
+++ b/lld/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
OpenPOWER on IntegriCloud