]> granicus.if.org Git - clang/commitdiff
reject invalid stuff in the STDC namespace.
authorChris Lattner <sabre@nondot.org>
Sun, 19 Apr 2009 21:25:37 +0000 (21:25 +0000)
committerChris Lattner <sabre@nondot.org>
Sun, 19 Apr 2009 21:25:37 +0000 (21:25 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@69551 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Basic/DiagnosticLexKinds.td
lib/Lex/Pragma.cpp
test/Preprocessor/pragma_unknown.c

index ece9b69a408bff7d199fbd358d11e8283e57d546..cd59a1bfeb9a198e5e8293a68eec4d618bbc4f3c 100644 (file)
@@ -206,6 +206,9 @@ def err_pragma_comment_malformed : Error<
   "pragma comment requires parenthesized identifier and optional string">;
 def warn_pragma_ignored : Warning<"unknown pragma ignored">,
    InGroup<UnknownPragmas>, DefaultIgnore;
+def ext_stdc_pragma_ignored : ExtWarn<"unknown pragma in STDC namespace">,
+   InGroup<UnknownPragmas>;
+
   
 def err_pragma_comment_unknown_kind : Error<"unknown kind of pragma comment">;
 def err_defined_macro_name : Error<"'defined' cannot be used as a macro name">;
index be610a500b4c3233a22157ab94dfcb63e26f6783..6e8c03db8a7dea6fe66fc09029d4444afa1e91e1 100644 (file)
@@ -515,16 +515,16 @@ struct PragmaCommentHandler : public PragmaHandler {
 /// PragmaSTDC_FP_CONTRACTHandler - "#pragma STDC FP_CONTRACT ...".
 struct PragmaSTDC_FP_CONTRACTHandler : public PragmaHandler {
   PragmaSTDC_FP_CONTRACTHandler(const IdentifierInfo *ID) : PragmaHandler(ID) {}
-  virtual void HandlePragma(Preprocessor &PP, Token &CommentTok) {
-    //PP.HandlePragmaComment(CommentTok);
+  virtual void HandlePragma(Preprocessor &PP, Token &Tok) {
+    //PP.HandlePragmaFP_CONTRACT(CommentTok);
   }
 };
   
 /// PragmaSTDC_FENV_ACCESSHandler - "#pragma STDC FENV_ACCESS ...".
 struct PragmaSTDC_FENV_ACCESSHandler : public PragmaHandler {
   PragmaSTDC_FENV_ACCESSHandler(const IdentifierInfo *ID) : PragmaHandler(ID) {}
-  virtual void HandlePragma(Preprocessor &PP, Token &CommentTok) {
-    //PP.HandlePragmaComment(CommentTok);
+  virtual void HandlePragma(Preprocessor &PP, Token &Tok) {
+    //PP.HandlePragmaFENV_ACCESS(CommentTok);
   }
 };
   
@@ -532,16 +532,16 @@ struct PragmaSTDC_FENV_ACCESSHandler : public PragmaHandler {
 struct PragmaSTDC_CX_LIMITED_RANGEHandler : public PragmaHandler {
   PragmaSTDC_CX_LIMITED_RANGEHandler(const IdentifierInfo *ID)
     : PragmaHandler(ID) {}
-  virtual void HandlePragma(Preprocessor &PP, Token &CommentTok) {
-    //PP.HandlePragmaComment(CommentTok);
+  virtual void HandlePragma(Preprocessor &PP, Token &Tok) {
+    //PP.HandlePragmaCX_LIMITED_RANGE(CommentTok);
   }
 };
   
 /// PragmaSTDC_UnknownHandler - "#pragma STDC ...".
 struct PragmaSTDC_UnknownHandler : public PragmaHandler {
   PragmaSTDC_UnknownHandler() : PragmaHandler(0) {}
-  virtual void HandlePragma(Preprocessor &PP, Token &CommentTok) {
-    //PP.HandlePragmaComment(CommentTok);
+  virtual void HandlePragma(Preprocessor &PP, Token &UnknownTok) {
+    PP.Diag(UnknownTok, diag::ext_stdc_pragma_ignored);
   }
 };
   
index f525a6446138f6424513eefe1324564e24d319f6..8ba0ea1d2ceff97881edd38d6e2522aa088424b8 100644 (file)
@@ -1,5 +1,5 @@
 // RUN: clang-cc -E %s | grep '#pragma foo bar' &&
-// RUN: clang-cc -fsyntax-only -Wunknown-pragmas %s
+// RUN: clang-cc -fsyntax-only -Wunknown-pragmas -verify %s
 
 // GCC doesn't expand macro args for unrecognized pragmas.
 #define bar xX
@@ -20,5 +20,6 @@
 #pragma STDC CX_LIMITED_RANGE DEFAULT 
 #pragma STDC CX_LIMITED_RANGE IN_BETWEEN
 
-#pragma STDC SO_GREAT
+#pragma STDC SO_GREAT  // expected-warning {{unknown pragma in STDC namespace}}
+#pragma STDC   // expected-warning {{unknown pragma in STDC namespace}}