aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2009-04-19 21:25:37 +0000
committerChris Lattner <sabre@nondot.org>2009-04-19 21:25:37 +0000
commitf545be5552b6fd40a4c766fbf82dab0ab5305790 (patch)
tree73a4aff0f493da07232f593ec7aa020961ad37d4
parent062f23246510393c19b537b68ec88b6a08ee8996 (diff)
reject invalid stuff in the STDC namespace.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@69551 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--include/clang/Basic/DiagnosticLexKinds.td3
-rw-r--r--lib/Lex/Pragma.cpp16
-rw-r--r--test/Preprocessor/pragma_unknown.c5
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}}