summaryrefslogtreecommitdiffstats
path: root/clang/lib/Frontend
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2009-12-22 23:12:53 +0000
committerChris Lattner <sabre@nondot.org>2009-12-22 23:12:53 +0000
commit801fda871bac67a014e352b915e4f38eeac6184b (patch)
tree66ba36a6ca41fb91706809ece582a8aa3328b7db /clang/lib/Frontend
parentc0895eb730f14653f55f59e7334dba49896acabf (diff)
downloadbcm5719-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.cpp27
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);
}
OpenPOWER on IntegriCloud