]> granicus.if.org Git - clang/commitdiff
Add warning flag -Winvalid-pp-token for preprocessing-tokens which have
authorRichard Smith <richard-llvm@metafoo.co.uk>
Thu, 28 Jun 2012 07:51:56 +0000 (07:51 +0000)
committerRichard Smith <richard-llvm@metafoo.co.uk>
Thu, 28 Jun 2012 07:51:56 +0000 (07:51 +0000)
undefined behaviour, and move the diagnostic for '' from an Error into
an ExtWarn in this group. This is important for some users of the preprocessor,
and is necessary for gcc compatibility.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@159335 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Basic/DiagnosticGroups.td
include/clang/Basic/DiagnosticLexKinds.td
lib/Lex/Lexer.cpp
test/Misc/warning-flags-enabled.c
test/Misc/warning-flags.c

index c98dfae6bc503745f0f0f19a1b9a17b63fa76302..a99eb1d486de1aa94011cac881c5bdfbf5fe5bf3 100644 (file)
@@ -217,6 +217,7 @@ def ImplicitFallthroughPerFunction :
   DiagGroup<"implicit-fallthrough-per-function">;
 def ImplicitFallthrough  : DiagGroup<"implicit-fallthrough",
                                      [ImplicitFallthroughPerFunction]>;
+def InvalidPPToken : DiagGroup<"invalid-pp-token">;
 def Trigraphs      : DiagGroup<"trigraphs">;
 
 def : DiagGroup<"type-limits">;
index 464699fb911ed197f1a2e1852c807062df5d405a..77b7f4287231aea1b251151fe1977efea78ca6af 100644 (file)
@@ -64,9 +64,12 @@ def ext_token_used : Extension<"extension used">,
 def warn_cxx11_keyword : Warning<"'%0' is a keyword in C++11">,
   InGroup<CXX11Compat>, DefaultIgnore;
 
-def warn_unterminated_string : ExtWarn<"missing terminating '\"' character">;
-def warn_unterminated_char : ExtWarn<"missing terminating ' character">;
-def err_empty_character : Error<"empty character constant">;
+def ext_unterminated_string : ExtWarn<"missing terminating '\"' character">,
+  InGroup<InvalidPPToken>;
+def ext_unterminated_char : ExtWarn<"missing terminating ' character">,
+  InGroup<InvalidPPToken>;
+def ext_empty_character : ExtWarn<"empty character constant">,
+  InGroup<InvalidPPToken>;
 def err_unterminated_block_comment : Error<"unterminated /* comment">;
 def err_invalid_character_to_charify : Error<
   "invalid argument to convert to character">;
index dedf320013c1b11618b2e009af4f0efc8ca698a5..52a094af7f9fc84bb48acd23ec5c3c6c1397751d 100644 (file)
@@ -1649,7 +1649,7 @@ void Lexer::LexStringLiteral(Token &Result, const char *CurPtr,
     if (C == '\n' || C == '\r' ||             // Newline.
         (C == 0 && CurPtr-1 == BufferEnd)) {  // End of file.
       if (!isLexingRawMode() && !LangOpts.AsmPreprocessor)
-        Diag(BufferPtr, diag::warn_unterminated_string);
+        Diag(BufferPtr, diag::ext_unterminated_string);
       FormTokenWithChars(Result, CurPtr-1, tok::unknown);
       return;
     }
@@ -1807,7 +1807,7 @@ void Lexer::LexCharConstant(Token &Result, const char *CurPtr,
   char C = getAndAdvanceChar(CurPtr, Result);
   if (C == '\'') {
     if (!isLexingRawMode() && !LangOpts.AsmPreprocessor)
-      Diag(BufferPtr, diag::err_empty_character);
+      Diag(BufferPtr, diag::ext_empty_character);
     FormTokenWithChars(Result, CurPtr, tok::unknown);
     return;
   }
@@ -1821,7 +1821,7 @@ void Lexer::LexCharConstant(Token &Result, const char *CurPtr,
     } else if (C == '\n' || C == '\r' ||             // Newline.
                (C == 0 && CurPtr-1 == BufferEnd)) {  // End of file.
       if (!isLexingRawMode() && !LangOpts.AsmPreprocessor)
-        Diag(BufferPtr, diag::warn_unterminated_char);
+        Diag(BufferPtr, diag::ext_unterminated_char);
       FormTokenWithChars(Result, CurPtr-1, tok::unknown);
       return;
     } else if (C == 0) {
index 1c1c38f864d778be4ef9c2ec67f87dc2d9a9ba7c..7ef5c94dbc8cf66ad4a50d3ee5c138513c74717c 100644 (file)
@@ -3,9 +3,9 @@
 // This shows warnings which are on by default.
 // We just check a few to make sure it's doing something sensible.
 //
+// CHECK: ext_unterminated_string
 // CHECK: warn_condition_is_assignment
 // CHECK: warn_null_arg
-// CHECK: warn_unterminated_string
 
 
 // RUN: diagtool show-enabled -Wno-everything %s | count 0
index 2799de584c3447ebafcf855890f4274d4aae5166..3b28fd85d7f9a3380d544615ad2455d7987baf21 100644 (file)
@@ -17,7 +17,7 @@ This test serves two purposes:
 
 The list of warnings below should NEVER grow.  It should gradually shrink to 0.
 
-CHECK: Warnings without flags (232):
+CHECK: Warnings without flags (230):
 CHECK-NEXT:   ext_anonymous_struct_union_qualified
 CHECK-NEXT:   ext_binary_literal
 CHECK-NEXT:   ext_cast_fn_obj
@@ -245,8 +245,6 @@ CHECK-NEXT:   warn_undef_protocolref
 CHECK-NEXT:   warn_undefined_internal
 CHECK-NEXT:   warn_unknown_analyzer_checker
 CHECK-NEXT:   warn_unknown_method_family
-CHECK-NEXT:   warn_unterminated_char
-CHECK-NEXT:   warn_unterminated_string
 CHECK-NEXT:   warn_use_out_of_scope_declaration
 CHECK-NEXT:   warn_weak_identifier_undeclared
 CHECK-NEXT:   warn_weak_import