Index: DriverUtils.cpp =================================================================== --- DriverUtils.cpp +++ DriverUtils.cpp @@ -58,7 +58,12 @@ error(Twine("missing arg value for \"") + Args.getArgString(MissingIndex) + "\", expected " + Twine(MissingCount) + (MissingCount == 1 ? " argument.\n" : " arguments")); - for (auto *Arg : Args.filtered(OPT_UNKNOWN)) - error(Twine("unknown argument: ") + Arg->getSpelling()); + + iterator_range Unknowns = Args.filtered(OPT_UNKNOWN); + for (auto *Arg : Unknowns) + warning(Twine("warning: unknown argument: ") + Arg->getSpelling()); + if (Unknowns.begin() != Unknowns.end()) + error(Twine("unknown argument(s) found")); + return Args; } Index: Error.h =================================================================== --- Error.h +++ Error.h @@ -15,6 +15,8 @@ namespace lld { namespace elf2 { +void warning(const Twine &Msg); + LLVM_ATTRIBUTE_NORETURN void error(const Twine &Msg); void error(std::error_code EC, const Twine &Prefix); void error(std::error_code EC); Index: Error.cpp =================================================================== --- Error.cpp +++ Error.cpp @@ -15,6 +15,8 @@ namespace lld { namespace elf2 { +void warning(const Twine &Msg) { llvm::errs() << Msg << "\n"; } + void error(const Twine &Msg) { llvm::errs() << Msg << "\n"; exit(1);