diff --git a/lld/MachO/Driver.cpp b/lld/MachO/Driver.cpp index 0b626baa47b62e..207a329eeff80d 100644 --- a/lld/MachO/Driver.cpp +++ b/lld/MachO/Driver.cpp @@ -876,6 +876,11 @@ bool macho::link(ArrayRef argsArr, bool canExitEarly, MachOOptTable parser; InputArgList args = parser.parse(argsArr.slice(1)); + errorHandler().errorLimitExceededMsg = + "too many errors emitted, stopping now " + "(use --error-limit=0 to see all errors)"; + errorHandler().errorLimit = args::getInteger(args, OPT_error_limit_eq, 20); + if (args.hasArg(OPT_help_hidden)) { parser.printHelp(argsArr[0], /*showHidden=*/true); return true; diff --git a/lld/MachO/Options.td b/lld/MachO/Options.td index 66d1ed90f56164..e502ed4d734b7d 100644 --- a/lld/MachO/Options.td +++ b/lld/MachO/Options.td @@ -10,6 +10,9 @@ def help : Flag<["-", "--"], "help">, def help_hidden : Flag<["--"], "help-hidden">, HelpText<"Display help for hidden options">, Group; +def error_limit_eq : Joined<["--"], "error-limit=">, + HelpText<"Maximum number of errors to print before exiting (default: 20)">, + Group; def color_diagnostics: Flag<["--"], "color-diagnostics">, HelpText<"Alias for --color-diagnostics=always">, Group; diff --git a/lld/test/MachO/error-limit.test b/lld/test/MachO/error-limit.test new file mode 100644 index 00000000000000..79eaa3d5223116 --- /dev/null +++ b/lld/test/MachO/error-limit.test @@ -0,0 +1,28 @@ +## Check that we only see 20 (the default error-limit) "cannot open" errors +RUN: not %lld A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 2>&1 | \ +RUN: FileCheck -check-prefix=DEFAULT %s + +DEFAULT: cannot open A: +DEFAULT: cannot open T: +DEFAULT-NOT: cannot open U: +DEFAULT-NEXT: too many errors emitted, stopping now (use --error-limit=0 to see all errors) + +## Check that we only see 5 "cannot open" errors when --error-limit=5 +RUN: not %lld --error-limit=5 A B C D E F G H I J 2>&1 \ +RUN: | FileCheck -check-prefix=LIMIT5 %s + +LIMIT5: cannot open A: +LIMIT5: cannot open E: +LIMIT5-NOT: cannot open F: +LIMIT5-NEXT: too many errors emitted, stopping now (use --error-limit=0 to see all errors) + +## Check that we see all "cannot open" errors when --error-limit=0 (unimited) +RUN: not %lld --error-limit=0 A B C D E F G H I J K L M N O P Q R S T U V W 2>&1 | \ +RUN: FileCheck -check-prefix=UNLIMITED %s + +UNLIMITED: cannot open A: +UNLIMITED: cannot open T: +UNLIMITED: cannot open U: +UNLIMITED: cannot open V: +UNLIMITED: cannot open W: +UNLIMITED-NOT: too many errors emitted, stopping now (use --error-limit=0 to see all errors)