diff options
-rw-r--r-- | include/clang/Basic/DiagnosticLexKinds.td | 3 | ||||
-rw-r--r-- | lib/Lex/Pragma.cpp | 5 | ||||
-rw-r--r-- | test/Preprocessor/pragma_unknown.c | 5 |
3 files changed, 10 insertions, 3 deletions
diff --git a/include/clang/Basic/DiagnosticLexKinds.td b/include/clang/Basic/DiagnosticLexKinds.td index e1e903fad0..ece9b69a40 100644 --- a/include/clang/Basic/DiagnosticLexKinds.td +++ b/include/clang/Basic/DiagnosticLexKinds.td @@ -204,6 +204,9 @@ def err__Pragma_malformed : Error< "_Pragma takes a parenthesized string literal">; 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 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">; def err_paste_at_start : Error< diff --git a/lib/Lex/Pragma.cpp b/lib/Lex/Pragma.cpp index 6bef2c8f77..6cea5fbe73 100644 --- a/lib/Lex/Pragma.cpp +++ b/lib/Lex/Pragma.cpp @@ -70,7 +70,10 @@ void PragmaNamespace::HandlePragma(Preprocessor &PP, Token &Tok) { // Get the handler for this token. If there is no handler, ignore the pragma. PragmaHandler *Handler = FindHandler(Tok.getIdentifierInfo(), false); - if (Handler == 0) return; + if (Handler == 0) { + PP.Diag(Tok, diag::warn_pragma_ignored); + return; + } // Otherwise, pass it down. Handler->HandlePragma(PP, Tok); diff --git a/test/Preprocessor/pragma_unknown.c b/test/Preprocessor/pragma_unknown.c index e1b040b5cf..32107591e0 100644 --- a/test/Preprocessor/pragma_unknown.c +++ b/test/Preprocessor/pragma_unknown.c @@ -1,6 +1,7 @@ -// RUN: clang-cc -E %s | grep '#pragma foo bar' +// RUN: clang-cc -E %s | grep '#pragma foo bar' && +// RUN: clang-cc -fsyntax-only -Wunknown-pragmas %s // GCC doesn't expand macro args for unrecognized pragmas. #define bar xX -#pragma foo bar +#pragma foo bar // expected-warning {{unknown pragma ignored}} |