From 16dc7230ded9a2766dfcb78574c5c51e194320a5 Mon Sep 17 00:00:00 2001 From: Alex Lorenz Date: Thu, 8 Feb 2018 21:20:43 +0000 Subject: [PATCH] PR36307: Consume the #pragma options align annotation token after semantic analysis to prevent incorrect -Wpragma-pack warning for an included file rdar://37354951 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@324651 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Parse/ParsePragma.cpp | 6 ++++-- test/Sema/Inputs/pragma-align-no-header-change-warning.h | 5 +++++ test/Sema/pragma-align-no-header-change-warning.c | 5 +++++ 3 files changed, 14 insertions(+), 2 deletions(-) create mode 100644 test/Sema/Inputs/pragma-align-no-header-change-warning.h create mode 100644 test/Sema/pragma-align-no-header-change-warning.c diff --git a/lib/Parse/ParsePragma.cpp b/lib/Parse/ParsePragma.cpp index 3517264d4e..8cbae5f463 100644 --- a/lib/Parse/ParsePragma.cpp +++ b/lib/Parse/ParsePragma.cpp @@ -509,8 +509,10 @@ void Parser::HandlePragmaAlign() { Sema::PragmaOptionsAlignKind Kind = static_cast( reinterpret_cast(Tok.getAnnotationValue())); - SourceLocation PragmaLoc = ConsumeAnnotationToken(); - Actions.ActOnPragmaOptionsAlign(Kind, PragmaLoc); + Actions.ActOnPragmaOptionsAlign(Kind, Tok.getLocation()); + // Consume the token after processing the pragma to enable pragma-specific + // #include warnings. + ConsumeAnnotationToken(); } void Parser::HandlePragmaDump() { diff --git a/test/Sema/Inputs/pragma-align-no-header-change-warning.h b/test/Sema/Inputs/pragma-align-no-header-change-warning.h new file mode 100644 index 0000000000..6cd4e7d7ed --- /dev/null +++ b/test/Sema/Inputs/pragma-align-no-header-change-warning.h @@ -0,0 +1,5 @@ +#pragma options align=mac68k + +struct S { int x; }; + +#pragma options align=reset diff --git a/test/Sema/pragma-align-no-header-change-warning.c b/test/Sema/pragma-align-no-header-change-warning.c new file mode 100644 index 0000000000..dcd61d0705 --- /dev/null +++ b/test/Sema/pragma-align-no-header-change-warning.c @@ -0,0 +1,5 @@ +// RUN: %clang_cc1 -triple i686-apple-darwin9 -fsyntax-only -Wpragma-pack -I %S/Inputs -verify %s +// expected-no-diagnostics + +#include "pragma-align-no-header-change-warning.h" + -- 2.40.0