diff options
author | Chris Lattner <sabre@nondot.org> | 2009-12-22 23:12:53 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2009-12-22 23:12:53 +0000 |
commit | 801fda871bac67a014e352b915e4f38eeac6184b (patch) | |
tree | 66ba36a6ca41fb91706809ece582a8aa3328b7db /clang/lib/Frontend | |
parent | c0895eb730f14653f55f59e7334dba49896acabf (diff) | |
download | bcm5719-llvm-801fda871bac67a014e352b915e4f38eeac6184b.tar.gz bcm5719-llvm-801fda871bac67a014e352b915e4f38eeac6184b.zip |
implement -W[no-]fatal-errors, patch by Christian Adåker!
llvm-svn: 91938
Diffstat (limited to 'clang/lib/Frontend')
-rw-r--r-- | clang/lib/Frontend/Warnings.cpp | 27 |
1 files changed, 25 insertions, 2 deletions
diff --git a/clang/lib/Frontend/Warnings.cpp b/clang/lib/Frontend/Warnings.cpp index ff44c905166..4d12bcf7e0f 100644 --- a/clang/lib/Frontend/Warnings.cpp +++ b/clang/lib/Frontend/Warnings.cpp @@ -47,8 +47,6 @@ bool clang::ProcessWarningOptions(Diagnostic &Diags, else Diags.setExtensionHandlingBehavior(Diagnostic::Ext_Ignore); - // FIXME: -Wfatal-errors / -Wfatal-errors=foo - for (unsigned i = 0, e = Opts.Warnings.size(); i != e; ++i) { const std::string &Opt = Opts.Warnings[i]; const char *OptStart = &Opt[0]; @@ -98,6 +96,31 @@ bool clang::ProcessWarningOptions(Diagnostic &Diags, OptStart = Specifier; } + // -Wfatal-errors is yet another special case. + if (OptEnd-OptStart >= 12 && memcmp(OptStart, "fatal-errors", 12) == 0) { + const char* Specifier = 0; + if (OptEnd-OptStart != 12) { + if ((OptStart[12] != '=' && OptStart[12] != '-') || + OptEnd-OptStart == 13) { + fprintf(stderr, + "warning: unknown -Wfatal-errors warning specifier: -W%s\n", + Opt.c_str()); + continue; + } + Specifier = OptStart + 13; + } + + if (Specifier == 0) { + Diags.setErrorsAsFatal(isPositive); + continue; + } + + // -Wfatal-errors=foo maps foo to Fatal, -Wno-fatal-errors=foo + // maps it to Error. + Mapping = isPositive ? diag::MAP_FATAL : diag::MAP_ERROR_NO_WFATAL; + OptStart = Specifier; + } + if (Diags.setDiagnosticGroupMapping(OptStart, Mapping)) Diags.Report(diag::warn_unknown_warning_option) << ("-W" + Opt); } |