]> granicus.if.org Git - clang/commitdiff
do not warn about unknown pragmas in modes that do not handle them (pr9537)
authorLubos Lunak <l.lunak@centrum.cz>
Wed, 4 Dec 2013 10:21:41 +0000 (10:21 +0000)
committerLubos Lunak <l.lunak@centrum.cz>
Wed, 4 Dec 2013 10:21:41 +0000 (10:21 +0000)
And refactor to have just one place in code that sets up the empty
pragma handlers.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@196372 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Lex/Preprocessor.h
lib/Frontend/FrontendActions.cpp
lib/Frontend/PrintPreprocessedOutput.cpp
lib/Lex/Pragma.cpp
lib/Rewrite/Frontend/InclusionRewriter.cpp

index 2491011aa6d9dfbd713e7de8d851e46afd4061f1..682242482b8962efe23cb1cf719501d02ae7bcd1 100644 (file)
@@ -643,6 +643,9 @@ public:
     RemovePragmaHandler(StringRef(), Handler);
   }
 
+  /// Install empty handlers for all pragmas (making them ignored).
+  void IgnorePragmas();
+
   /// \brief Add the specified comment handler to the preprocessor.
   void addCommentHandler(CommentHandler *Handler);
 
index a3ab1be4a97a2782ae88b741aa72b218368b5ff4..88044f2c9a63abea5d9d6a3861894ba4b9f6e1f7 100644 (file)
@@ -485,7 +485,7 @@ void PreprocessOnlyAction::ExecuteAction() {
   Preprocessor &PP = getCompilerInstance().getPreprocessor();
 
   // Ignore unknown pragmas.
-  PP.AddPragmaHandler(new EmptyPragmaHandler());
+  PP.IgnorePragmas();
 
   Token Tok;
   // Start parsing the specified input file.
index f3393bfe51ce49fa103aee17fb1ef4d5d6551af6..87fbd04041f2588b0e1b26a0a10e482ff218dd1c 100644 (file)
@@ -704,7 +704,7 @@ static int MacroIDCompare(const id_macro_pair *LHS, const id_macro_pair *RHS) {
 
 static void DoPrintMacros(Preprocessor &PP, raw_ostream *OS) {
   // Ignore unknown pragmas.
-  PP.AddPragmaHandler(new EmptyPragmaHandler());
+  PP.IgnorePragmas();
 
   // -dM mode just scans and ignores all tokens in the files, then dumps out
   // the macro table at the end.
index e4059eeb6fc0a63d17084d5be97dff7d8fc4d0c6..61bd9172b43dbac6446578848fa5e94fa6a6f0fd 100644 (file)
@@ -1401,3 +1401,14 @@ void Preprocessor::RegisterBuiltinPragmas() {
     AddPragmaHandler(new PragmaRegionHandler("endregion"));
   }
 }
+
+/// Ignore all pragmas, useful for modes such as -Eonly which would otherwise
+/// warn about those pragmas being unknown.
+void Preprocessor::IgnorePragmas() {
+  AddPragmaHandler(new EmptyPragmaHandler());
+  // Also ignore all pragmas in all namespaces created
+  // in Preprocessor::RegisterBuiltinPragmas().
+  AddPragmaHandler("GCC", new EmptyPragmaHandler());
+  AddPragmaHandler("clang", new EmptyPragmaHandler());
+  AddPragmaHandler("STDC", new EmptyPragmaHandler());
+}
index 176ea3f79dc13ad9d8a6e01b8f22cda5bb692f60..a3b6c49ac11182af75092596722e2282ce0618cb 100644 (file)
@@ -518,13 +518,7 @@ void clang::RewriteIncludesInInput(Preprocessor &PP, raw_ostream *OS,
   InclusionRewriter *Rewrite = new InclusionRewriter(PP, *OS,
                                                      Opts.ShowLineMarkers);
   PP.addPPCallbacks(Rewrite);
-  // Ignore all pragmas, otherwise there will be warnings about unknown pragmas
-  // (because there's nothing to handle them).
-  PP.AddPragmaHandler(new EmptyPragmaHandler());
-  // Ignore also all pragma in all namespaces created
-  // in Preprocessor::RegisterBuiltinPragmas().
-  PP.AddPragmaHandler("GCC", new EmptyPragmaHandler());
-  PP.AddPragmaHandler("clang", new EmptyPragmaHandler());
+  PP.IgnorePragmas();
 
   // First let the preprocessor process the entire file and call callbacks.
   // Callbacks will record which #include's were actually performed.