PR36307: Consume the #pragma options align annotation token after
authorAlex Lorenz <arphaman@gmail.com>
Thu, 8 Feb 2018 21:20:43 +0000 (21:20 +0000)
committerAlex Lorenz <arphaman@gmail.com>
Thu, 8 Feb 2018 21:20:43 +0000 (21:20 +0000)
semantic analysis to prevent incorrect -Wpragma-pack warning for an included
file

rdar://37354951

llvm-svn: 324651

clang/lib/Parse/ParsePragma.cpp
clang/test/Sema/Inputs/pragma-align-no-header-change-warning.h [new file with mode: 0644]
clang/test/Sema/pragma-align-no-header-change-warning.c [new file with mode: 0644]

index 3517264..8cbae5f 100644 (file)
@@ -509,8 +509,10 @@ void Parser::HandlePragmaAlign() {
   Sema::PragmaOptionsAlignKind Kind =
     static_cast<Sema::PragmaOptionsAlignKind>(
     reinterpret_cast<uintptr_t>(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/clang/test/Sema/Inputs/pragma-align-no-header-change-warning.h b/clang/test/Sema/Inputs/pragma-align-no-header-change-warning.h
new file mode 100644 (file)
index 0000000..6cd4e7d
--- /dev/null
@@ -0,0 +1,5 @@
+#pragma options align=mac68k
+
+struct S { int x; };
+
+#pragma options align=reset
diff --git a/clang/test/Sema/pragma-align-no-header-change-warning.c b/clang/test/Sema/pragma-align-no-header-change-warning.c
new file mode 100644 (file)
index 0000000..dcd61d0
--- /dev/null
@@ -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"
+