summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--clang/lib/Frontend/PrintPreprocessedOutput.cpp9
-rw-r--r--clang/test/Preprocessor/macro_expand.c6
2 files changed, 15 insertions, 0 deletions
diff --git a/clang/lib/Frontend/PrintPreprocessedOutput.cpp b/clang/lib/Frontend/PrintPreprocessedOutput.cpp
index a58c935620a..c57a736d1b0 100644
--- a/clang/lib/Frontend/PrintPreprocessedOutput.cpp
+++ b/clang/lib/Frontend/PrintPreprocessedOutput.cpp
@@ -573,6 +573,15 @@ struct UnknownPragmaHandler : public PragmaHandler {
Token &PragmaTok) override {
// Figure out what line we went to and insert the appropriate number of
// newline characters.
+ if (ShouldExpandTokens) {
+ // The first token does not have expanded macros. Expand them, if
+ // required.
+ Token Toks[] = {PragmaTok};
+ PP.EnterTokenStream(Toks, llvm::array_lengthof(Toks),
+ /*DisableMacroExpansion=*/false,
+ /*OwnsTokens=*/false);
+ PP.Lex(PragmaTok);
+ }
Callbacks->startNewLineIfNeeded();
Callbacks->MoveToLine(PragmaTok.getLocation());
Callbacks->OS.write(Prefix, strlen(Prefix));
diff --git a/clang/test/Preprocessor/macro_expand.c b/clang/test/Preprocessor/macro_expand.c
index cf98a2cbfb8..430068ba729 100644
--- a/clang/test/Preprocessor/macro_expand.c
+++ b/clang/test/Preprocessor/macro_expand.c
@@ -19,3 +19,9 @@ C: for(for))
// rdar://6880648
#define f(x,y...) y
f()
+
+// CHECK: #pragma omp parallel for
+#define FOO parallel
+#define Streaming _Pragma("omp FOO for")
+Streaming
+
OpenPOWER on IntegriCloud