Эх сурвалжийг харах

Fixed preprocessed output of the first token for pragmas.
Clang did not expanded macros in the very first token of the pragmas
during preprocessed output

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

Alexey Bataev 9 жил өмнө
parent
commit
9ffaadb70d

+ 9 - 0
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));

+ 6 - 0
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
+