From: Chris Lattner Date: Sun, 19 Apr 2009 21:25:37 +0000 (+0000) Subject: reject invalid stuff in the STDC namespace. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=f545be5552b6fd40a4c766fbf82dab0ab5305790;p=clang reject invalid stuff in the STDC namespace. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@69551 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Basic/DiagnosticLexKinds.td b/include/clang/Basic/DiagnosticLexKinds.td index ece9b69a40..cd59a1bfeb 100644 --- a/include/clang/Basic/DiagnosticLexKinds.td +++ b/include/clang/Basic/DiagnosticLexKinds.td @@ -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, DefaultIgnore; +def ext_stdc_pragma_ignored : ExtWarn<"unknown pragma in STDC namespace">, + InGroup; + 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">; diff --git a/lib/Lex/Pragma.cpp b/lib/Lex/Pragma.cpp index be610a500b..6e8c03db8a 100644 --- a/lib/Lex/Pragma.cpp +++ b/lib/Lex/Pragma.cpp @@ -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); } }; diff --git a/test/Preprocessor/pragma_unknown.c b/test/Preprocessor/pragma_unknown.c index f525a64461..8ba0ea1d2c 100644 --- a/test/Preprocessor/pragma_unknown.c +++ b/test/Preprocessor/pragma_unknown.c @@ -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}}