Implement support for -w, which silences all warnings. PR2384.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@51683 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Basic/Diagnostic.cpp b/lib/Basic/Diagnostic.cpp
index 5835e75..fbf118f 100644
--- a/lib/Basic/Diagnostic.cpp
+++ b/lib/Basic/Diagnostic.cpp
@@ -108,6 +108,7 @@
 //===----------------------------------------------------------------------===//
 
 Diagnostic::Diagnostic(DiagnosticClient &client) : Client(client) {
+  IgnoreAllWarnings = false;
   WarningsAsErrors = false;
   WarnOnExtensions = false;
   ErrorOnExtensions = false;
@@ -167,7 +168,7 @@
   if (DiagClass < ERROR) {
     switch (getDiagnosticMapping((diag::kind)DiagID)) {
     case diag::MAP_DEFAULT: break;
-    case diag::MAP_IGNORE:  return Ignored;
+    case diag::MAP_IGNORE:  return Diagnostic::Ignored;
     case diag::MAP_WARNING: DiagClass = WARNING; break;
     case diag::MAP_ERROR:   DiagClass = ERROR; break;
     }
@@ -183,9 +184,13 @@
       return Ignored;
   }
   
-  // If warnings are to be treated as errors, indicate this as such.
-  if (DiagClass == WARNING && WarningsAsErrors)
-    DiagClass = ERROR;
+  // If warnings are globally mapped to ignore or error, do it.
+  if (DiagClass == WARNING) {
+    if (IgnoreAllWarnings)
+      return Diagnostic::Ignored;
+    if (WarningsAsErrors)
+      DiagClass = ERROR;
+  }
   
   switch (DiagClass) {
   default: assert(0 && "Unknown diagnostic class!");