diff options
-rw-r--r-- | include/clang/Basic/DiagnosticLexKinds.td | 3 | ||||
-rw-r--r-- | lib/Lex/Pragma.cpp | 16 | ||||
-rw-r--r-- | test/Preprocessor/pragma_unknown.c | 5 |
3 files changed, 14 insertions, 10 deletions
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<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">; 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}} |