Fix handling of invalid uses of the __has_warning builtin macro

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@168265 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Lex/PPMacroExpansion.cpp b/lib/Lex/PPMacroExpansion.cpp
index de98d50..1f07a70 100644
--- a/lib/Lex/PPMacroExpansion.cpp
+++ b/lib/Lex/PPMacroExpansion.cpp
@@ -1291,7 +1291,10 @@
           StartLoc = Tok.getLocation();
           IsValid = false;
           // Eat tokens until ')'.
-          do Lex(Tok); while (!(Tok.is(tok::r_paren) || Tok.is(tok::eod)));
+          while (Tok.isNot(tok::r_paren)
+                   && Tok.isNot(tok::eod)
+                   && Tok.isNot(tok::eof))
+            Lex(Tok);
           break;
         }
         
@@ -1342,7 +1345,8 @@
       Diag(StartLoc, diag::err_warning_check_malformed);
 
     OS << (int)Value;
-    Tok.setKind(tok::numeric_constant);
+    if (IsValid)
+      Tok.setKind(tok::numeric_constant);
   } else if (II == Ident__building_module) {
     // The argument to this builtin should be an identifier. The
     // builtin evaluates to 1 when that identifier names the module we are