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

llvm-svn: 260211
This commit is contained in:
Alexey Bataev 2016-02-09 08:51:26 +00:00
parent 7e671e06a2
commit 6ee07eab03
2 changed files with 15 additions and 0 deletions

View File

@ -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));

View File

@ -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