[lld] e75f054 - [lld][MachO] Silence warnings about --read-workers parsing (#156608)

via llvm-commits llvm-commits at lists.llvm.org
Wed Sep 3 09:02:17 PDT 2025


Author: Frederik Harwath
Date: 2025-09-03T18:02:12+02:00
New Revision: e75f054d18c426b421d7d4cc58342fcb60047cfc

URL: https://github.com/llvm/llvm-project/commit/e75f054d18c426b421d7d4cc58342fcb60047cfc
DIFF: https://github.com/llvm/llvm-project/commit/e75f054d18c426b421d7d4cc58342fcb60047cfc.diff

LOG: [lld][MachO] Silence warnings about --read-workers parsing (#156608)

The parsing of the --read-workers argument v is implemented like this:

  unsigned threads = 0
  if (!llvm::to_integer(v, threads, 0) || threads < 0) {
  ...

As reported by a compiler warning, the value of the "threads < 0"
expession is never going to be true. It could only evaluate to true if v
represents a negative number, but in this case llvm::to_integer returns
false since threads is unsigned and hence the second operand of the ||
operator will not be evaluated.

This patch removes the useless || operand to silence compiler warnings.
Since I had to first find out if --read-workers=0 is valid or not (it is),
I also added a test to document the valid values for the option and I adjusted
the error message on invalid values to clearly state that 0 is valid.

Added: 
    lld/test/MachO/read-workers.s

Modified: 
    lld/MachO/Driver.cpp

Removed: 
    


################################################################################
diff  --git a/lld/MachO/Driver.cpp b/lld/MachO/Driver.cpp
index bcba759b2bbee..3db638e1ead96 100644
--- a/lld/MachO/Driver.cpp
+++ b/lld/MachO/Driver.cpp
@@ -1833,11 +1833,12 @@ bool link(ArrayRef<const char *> argsArr, llvm::raw_ostream &stdoutOS,
 
   if (auto *arg = args.getLastArg(OPT_read_workers)) {
     StringRef v(arg->getValue());
-    unsigned threads = 0;
-    if (!llvm::to_integer(v, threads, 0) || threads < 0)
-      error(arg->getSpelling() + ": expected a positive integer, but got '" +
-            arg->getValue() + "'");
-    config->readWorkers = threads;
+    unsigned workers = 0;
+    if (!llvm::to_integer(v, workers, 0))
+      error(arg->getSpelling() +
+            ": expected a non-negative integer, but got '" + arg->getValue() +
+            "'");
+    config->readWorkers = workers;
   }
   if (auto *arg = args.getLastArg(OPT_threads_eq)) {
     StringRef v(arg->getValue());

diff  --git a/lld/test/MachO/read-workers.s b/lld/test/MachO/read-workers.s
new file mode 100644
index 0000000000000..6f0ea4d894408
--- /dev/null
+++ b/lld/test/MachO/read-workers.s
@@ -0,0 +1,16 @@
+# REQUIRES: x86
+# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %s -o %t.o
+
+## A non-negative integer is allowed.
+# RUN: %lld --read-workers=0 %t.o -o /dev/null
+# RUN: %lld --read-workers=1 %t.o -o /dev/null
+# RUN: %lld --read-workers=2 %t.o -o /dev/null
+
+# RUN: not %lld --read-workers=all %t.o -o /dev/null 2>&1 | FileCheck %s -DN=all
+# RUN: not %lld --read-workers=-1 %t.o -o /dev/null 2>&1 | FileCheck %s -DN=-1
+
+# CHECK: error: --read-workers=: expected a non-negative integer, but got '[[N]]'
+
+.globl _main
+_main:
+  ret


        


More information about the llvm-commits mailing list