]> granicus.if.org Git - clang/commitdiff
Emit a -Wmicrosoft warning when treating ^Z as EOF in MS mode.
authorNico Weber <nicolasweber@gmx.de>
Tue, 29 Dec 2015 23:17:27 +0000 (23:17 +0000)
committerNico Weber <nicolasweber@gmx.de>
Tue, 29 Dec 2015 23:17:27 +0000 (23:17 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@256596 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Basic/DiagnosticGroups.td
include/clang/Basic/DiagnosticLexKinds.td
lib/Lex/Lexer.cpp
test/Lexer/msdos-cpm-eof.c

index 32353b51ee580834069bf49293d40269d874ea5a..8e5f57d6d89062f6da1311d9ca0360f008e5c38d 100644 (file)
@@ -766,6 +766,7 @@ def MicrosoftConstInit : DiagGroup<"microsoft-const-init">;
 def MicrosoftVoidPseudoDtor : DiagGroup<"microsoft-void-pseudo-dtor">;
 def MicrosoftAnonTag : DiagGroup<"microsoft-anon-tag">;
 def MicrosoftCommentPaste : DiagGroup<"microsoft-comment-paste">;
+def MicrosoftEndOfFile : DiagGroup<"microsoft-end-of-file">;
 // Aliases.
 def : DiagGroup<"msvc-include", [MicrosoftInclude]>;
                 // -Wmsvc-include = -Wmicrosoft-include
@@ -780,7 +781,7 @@ def Microsoft : DiagGroup<"microsoft",
      MicrosoftRedeclareStatic, MicrosoftEnumForwardReference, MicrosoftGoto,
      MicrosoftFlexibleArray, MicrosoftExtraQualification, MicrosoftCast,
      MicrosoftConstInit, MicrosoftVoidPseudoDtor, MicrosoftAnonTag,
-     MicrosoftCommentPaste]>;
+     MicrosoftCommentPaste, MicrosoftEndOfFile]>;
 
 def ObjCNonUnifiedException : DiagGroup<"objc-nonunified-exceptions">;
 
index 2ed40c0cdedd9280c5b6a008ed4abd3afe8f55a4..bf86b7077cbb51e20c7e18d6dcab8cf4e6033179 100644 (file)
@@ -62,6 +62,9 @@ def ext_charize_microsoft : Extension<
 def ext_comment_paste_microsoft : Extension<
   "pasting two '/' tokens into a '//' comment token is a Microsoft extension">,
   InGroup<MicrosoftCommentPaste>;
+def ext_ctrl_z_eof_microsoft : Extension<
+  "treating Ctrl-Z as end-of-file is a Microsoft extension">,
+  InGroup<MicrosoftEndOfFile>;
 
 def ext_token_used : Extension<"extension used">,
   InGroup<DiagGroup<"language-extension-token">>;
index 4872dee82456f4f7f2250c0d5f327a43f4521458..27b0feb4827054f0c0de3402b2f43f03875de446 100644 (file)
@@ -2960,8 +2960,11 @@ LexNextToken:
       
   case 26:  // DOS & CP/M EOF: "^Z".
     // If we're in Microsoft extensions mode, treat this as end of file.
-    if (LangOpts.MicrosoftExt)
+    if (LangOpts.MicrosoftExt) {
+      if (!isLexingRawMode())
+        Diag(CurPtr-1, diag::ext_ctrl_z_eof_microsoft);
       return LexEndOfFile(Result, CurPtr-1);
+    }
 
     // If Microsoft extensions are disabled, this is just random garbage.
     Kind = tok::unknown;
index 3469b59d4089c8001e8774beada678f8c296d3fd..274e6305a91e5bb3d4c8681936ca60ea7a1f4c4f 100644 (file)
@@ -1,8 +1,8 @@
-// RUN: %clang_cc1 -fsyntax-only -verify -fms-extensions %s
-// expected-no-diagnostics
+// RUN: %clang_cc1 -fsyntax-only -verify -fms-extensions -Wmicrosoft %s
 
 int x; 
 
+// expected-warning@+1 {{treating Ctrl-Z as end-of-file is a Microsoft extension">,
 \1a
 
 I am random garbage after ^Z