diff options
-rw-r--r-- | lib/Parse/ParsePragma.cpp | 10 | ||||
-rw-r--r-- | test/Parser/pragma-visibility2.c | 19 |
2 files changed, 24 insertions, 5 deletions
diff --git a/lib/Parse/ParsePragma.cpp b/lib/Parse/ParsePragma.cpp index c30ab75b76..445a72465c 100644 --- a/lib/Parse/ParsePragma.cpp +++ b/lib/Parse/ParsePragma.cpp @@ -38,7 +38,7 @@ void PragmaGCCVisibilityHandler::HandlePragma(Preprocessor &PP, SourceLocation VisLoc = VisTok.getLocation(); Token Tok; - PP.Lex(Tok); + PP.LexUnexpandedToken(Tok); const IdentifierInfo *PushPop = Tok.getIdentifierInfo(); @@ -49,20 +49,20 @@ void PragmaGCCVisibilityHandler::HandlePragma(Preprocessor &PP, VisType = 0; } else if (PushPop && PushPop->isStr("push")) { IsPush = true; - PP.Lex(Tok); + PP.LexUnexpandedToken(Tok); if (Tok.isNot(tok::l_paren)) { PP.Diag(Tok.getLocation(), diag::warn_pragma_expected_lparen) << "visibility"; return; } - PP.Lex(Tok); + PP.LexUnexpandedToken(Tok); VisType = Tok.getIdentifierInfo(); if (!VisType) { PP.Diag(Tok.getLocation(), diag::warn_pragma_expected_identifier) << "visibility"; return; } - PP.Lex(Tok); + PP.LexUnexpandedToken(Tok); if (Tok.isNot(tok::r_paren)) { PP.Diag(Tok.getLocation(), diag::warn_pragma_expected_rparen) << "visibility"; @@ -73,7 +73,7 @@ void PragmaGCCVisibilityHandler::HandlePragma(Preprocessor &PP, << "visibility"; return; } - PP.Lex(Tok); + PP.LexUnexpandedToken(Tok); if (Tok.isNot(tok::eod)) { PP.Diag(Tok.getLocation(), diag::warn_pragma_extra_tokens_at_eol) << "visibility"; diff --git a/test/Parser/pragma-visibility2.c b/test/Parser/pragma-visibility2.c new file mode 100644 index 0000000000..bcef09ff2b --- /dev/null +++ b/test/Parser/pragma-visibility2.c @@ -0,0 +1,19 @@ +// RUN: %clang_cc1 -emit-llvm -triple i386-linux-gnu -o %t %s +// RUN: FileCheck --input-file=%t %s +// PR10392 + +#define push(foo) push(default) +#pragma GCC visibility push(hidden) + +int v1; +// CHECK: @v1 = common hidden global i32 0, align 4 + +#pragma GCC visibility pop + +int v2; +// CHECK: @v2 = common global i32 0, align 4 + +_Pragma("GCC visibility push(hidden)"); + +int v3; +// CHECK: @v3 = common hidden global i32 0, align 4 |