diff --git a/lld/ELF/Driver.cpp b/lld/ELF/Driver.cpp --- a/lld/ELF/Driver.cpp +++ b/lld/ELF/Driver.cpp @@ -542,7 +542,9 @@ // Interpret these flags early because error()/warn() depend on them. errorHandler().errorLimit = args::getInteger(args, OPT_error_limit, 20); errorHandler().fatalWarnings = - args.hasFlag(OPT_fatal_warnings, OPT_no_fatal_warnings, false); + args.hasFlag(OPT_fatal_warnings, OPT_no_fatal_warnings, false) && + !args.hasArg(OPT_no_warnings); + errorHandler().suppressWarnings = args.hasArg(OPT_no_warnings); checkZOptions(args); // Handle -help diff --git a/lld/ELF/Options.td b/lld/ELF/Options.td --- a/lld/ELF/Options.td +++ b/lld/ELF/Options.td @@ -297,6 +297,9 @@ def no_undefined: F<"no-undefined">, HelpText<"Report unresolved symbols even if the linker is creating a shared library">; +def no_warnings: FF<"no-warnings">, HelpText<"Suppress warnings and cancel --fatal-warnings">; +def : Flag<["-"], "w">, Alias, HelpText<"Alias for --no-warnings">; + def o: JoinedOrSeparate<["-"], "o">, MetaVarName<"">, HelpText<"Path to file to write output">; diff --git a/lld/docs/ReleaseNotes.rst b/lld/docs/ReleaseNotes.rst --- a/lld/docs/ReleaseNotes.rst +++ b/lld/docs/ReleaseNotes.rst @@ -31,6 +31,8 @@ * ``--compress-debug-sections=zstd`` is now available to compress debug sections with zstd (``ELFCOMPRESS_ZSTD``). (`D133548 `_) +* ``--no-warnings``/``-w`` is now available to suppress warnings. + (`D136569 `_) Breaking changes ---------------- diff --git a/lld/docs/ld.lld.1 b/lld/docs/ld.lld.1 --- a/lld/docs/ld.lld.1 +++ b/lld/docs/ld.lld.1 @@ -358,6 +358,9 @@ Report unresolved symbols even if the linker is creating a shared library. .It Fl -no-warn-symbol-ordering Do not warn about problems with the symbol ordering file or call graph profile. +.It Fl -no-warnings , Fl w +Suppress warnings and cancel +.Cm --fatal-warnings. .It Fl -no-whole-archive Restores the default behavior of loading archive members. .It Fl -no-pie , Fl -no-pic-executable diff --git a/lld/test/ELF/no-inhibit-exec.s b/lld/test/ELF/no-inhibit-exec.s --- a/lld/test/ELF/no-inhibit-exec.s +++ b/lld/test/ELF/no-inhibit-exec.s @@ -5,6 +5,8 @@ # RUN: llvm-objdump -d %t2 | FileCheck %s # RUN: llvm-readobj -r %t2 | FileCheck %s --check-prefix=RELOC +# RUN: ld.lld %t -w --noinhibit-exec -o /dev/null 2>&1 | count 0 + # CHECK: Disassembly of section .text: # CHECK-EMPTY: # CHECK-NEXT: _start diff --git a/lld/test/ELF/fatal-warnings.s b/lld/test/ELF/warnings.s rename from lld/test/ELF/fatal-warnings.s rename to lld/test/ELF/warnings.s --- a/lld/test/ELF/fatal-warnings.s +++ b/lld/test/ELF/warnings.s @@ -9,6 +9,10 @@ # RUN: not ld.lld --warn-common --fatal-warnings %t1.o %t2.o -o /dev/null 2>&1 | \ # RUN: FileCheck -check-prefix=ERR %s +## --no-warnings/-w suppresses warnings and cancel --fatal-warnings. +# RUN: ld.lld --no-warnings --warn-common %t1.o %t2.o -o /dev/null 2>&1 | count 0 +# RUN: ld.lld -w --fatal-warnings --warn-common %t1.o %t2.o -o /dev/null 2>&1 | count 0 + .globl _start _start: