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

Alexander Richardson via llvm-commits llvm-commits at lists.llvm.org
Wed Jul 24 13:56:24 PDT 2019


Author: arichardson
Date: Wed Jul 24 13:56:23 2019
New Revision: 366944

URL: http://llvm.org/viewvc/llvm-project?rev=366944&view=rev
Log:
[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

Added:
    lld/trunk/test/ELF/error-limit-no-newlines.s   (with props)
Modified:
    lld/trunk/Common/ErrorHandler.cpp

Modified: lld/trunk/Common/ErrorHandler.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/Common/ErrorHandler.cpp?rev=366944&r1=366943&r2=366944&view=diff
==============================================================================
--- lld/trunk/Common/ErrorHandler.cpp (original)
+++ lld/trunk/Common/ErrorHandler.cpp Wed Jul 24 13:56:23 2019
@@ -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)

Added: lld/trunk/test/ELF/error-limit-no-newlines.s
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/error-limit-no-newlines.s?rev=366944&view=auto
==============================================================================
--- lld/trunk/test/ELF/error-limit-no-newlines.s (added)
+++ lld/trunk/test/ELF/error-limit-no-newlines.s Wed Jul 24 13:56:23 2019
@@ -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

Propchange: lld/trunk/test/ELF/error-limit-no-newlines.s
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: lld/trunk/test/ELF/error-limit-no-newlines.s
------------------------------------------------------------------------------
    svn:keywords = FreeBSD=%H

Propchange: lld/trunk/test/ELF/error-limit-no-newlines.s
------------------------------------------------------------------------------
    svn:mime-type = text/plain




More information about the llvm-commits mailing list