uint64_t ErrorLimit = 20;
bool Relocatable = true;
bool Force = false;
+ bool FatalWarnings = false;
bool Debug = false;
bool WriteSymtab = true;
unsigned DebugTypes = static_cast<unsigned>(DebugType::None);
message(Msg);
}
+ // Handle /WX early since it converts missing argument warnings to errors.
+ Config->FatalWarnings = Args.hasFlag(OPT_WX, OPT_WX_no, false);
+
if (MissingCount)
fatal(Twine(Args.getArgString(MissingIndex)) + ": missing argument");
for (auto *Arg : Args.filtered(OPT_UNKNOWN))
}
void warn(const Twine &Msg) {
+ if (Config->FatalWarnings) {
+ error(Msg);
+ return;
+ }
+
std::lock_guard<std::mutex> Lock(Mu);
print("warning: ", raw_ostream::MAGENTA);
*ErrorOS << Msg << "\n";
def force : F<"force">,
HelpText<"Allow undefined symbols when creating executables">;
def force_unresolved : F<"force:unresolved">;
+defm WX : B<"WX", "Treat warnings as errors", "Don't treat warnings as errors">;
defm allowbind : B<"allowbind", "Enable DLL binding (default)",
"Disable DLL binding">;
def tlbout : QF<"tlbout">;
def verbose_all : QF<"verbose">;
def guardsym : QF<"guardsym">;
-
-defm wx : QB<"wx">;
--- /dev/null
+# REQUIRES: x86
+
+# RUN: llvm-mc -triple=x86_64-windows-msvc -filetype=obj -o %t.obj %s
+# RUN: not lld-link /out:%t.exe /entry:main -notarealoption /WX %t.obj 2>&1 | \
+# RUN: FileCheck -check-prefix=ERROR %s
+# RUN: not lld-link /out:%t.exe /entry:main -notarealoption /WX:NO /WX %t.obj 2>&1 | \
+# RUN: FileCheck -check-prefix=ERROR %s
+# RUN: lld-link /out:%t.exe /entry:main -notarealoption /WX /WX:NO %t.obj 2>&1 | \
+# RUN: FileCheck -check-prefix=WARNING %s
+
+# ERROR: error: ignoring unknown argument: -notarealoption
+# WARNING: warning: ignoring unknown argument: -notarealoption
+
+.text
+.global main
+main:
+ ret