Re: r309386 - Recommit r308327 3rd time: Add a warning for missing

2017-09-27 Thread Alex L via cfe-commits
Are the pshpack1.h/poppack.h headers included from other headers in the SDK
or are they intended for end-users? If they're only used in the SDK then
the SDK headers should probably be system headers, so the warning should be
silenced.

Apart from that there's no real good solution for this issue unfortunately
apart from turning off the warning with a command-line flag or a pragma. I
don't think this particular pattern warrants some sort of special treatment
in Clang.

On 26 September 2017 at 17:02, Nico Weber  wrote:

> Another bit of feedback: The Microsoft SDK has pragma adjustment headers
> that are used like so:
>
> #include 
> // Define structs with alignment 1 here
> #include 
>
> This warning fires on that. I haven't seen these headers in active use
> recently, but I remember seeing them quite a bit maybe 10 years ago. (It
> took me until today to remember their names.) Any ideas on how to deal with
> that?
>
> On Fri, Jul 28, 2017 at 2:41 PM, Alex Lorenz via cfe-commits <
> cfe-commits@lists.llvm.org> wrote:
>
>> Author: arphaman
>> Date: Fri Jul 28 07:41:21 2017
>> New Revision: 309386
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=309386=rev
>> Log:
>> Recommit r308327 3rd time: Add a warning for missing
>> '#pragma pack (pop)' and suspicious uses of '#pragma pack' in included
>> files
>>
>> The second recommit (r309106) was reverted because the "non-default
>> #pragma
>> pack value chages the alignment of struct or union members in the
>> included file"
>> warning proved to be too aggressive for external projects like Chromium
>> (https://bugs.chromium.org/p/chromium/issues/detail?id=749197). This
>> recommit
>> makes the problematic warning a non-default one, and gives it the
>> -Wpragma-pack-suspicious-include warning option.
>>
>> The first recommit (r308441) caused a "non-default #pragma pack value
>> might
>> change the alignment of struct or union members in the included file"
>> warning
>> in LLVM itself. This recommit tweaks the added warning to avoid warnings
>> for
>> #includes that don't have any records that are affected by the non-default
>> alignment. This tweak avoids the previously emitted warning in LLVM.
>>
>> Original message:
>>
>> This commit adds a new -Wpragma-pack warning. It warns in the following
>> cases:
>>
>> - When a translation unit is missing terminating #pragma pack (pop)
>> directives.
>> - When entering an included file if the current alignment value as
>> determined
>>   by '#pragma pack' directives is different from the default alignment
>> value.
>> - When leaving an included file that changed the state of the current
>> alignment
>>   value.
>>
>> rdar://10184173
>>
>> Differential Revision: https://reviews.llvm.org/D35484
>>
>> Added:
>> cfe/trunk/test/PCH/suspicious-pragma-pack.c
>> cfe/trunk/test/Sema/Inputs/pragma-pack1.h
>> cfe/trunk/test/Sema/Inputs/pragma-pack2.h
>> cfe/trunk/test/Sema/suspicious-pragma-pack.c
>> cfe/trunk/test/SemaObjC/Inputs/empty.h
>> cfe/trunk/test/SemaObjC/suspicious-pragma-pack.m
>> Modified:
>> cfe/trunk/include/clang/Basic/DiagnosticGroups.td
>> cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td
>> cfe/trunk/include/clang/Lex/PPCallbacks.h
>> cfe/trunk/include/clang/Sema/Sema.h
>> cfe/trunk/include/clang/Serialization/ASTReader.h
>> cfe/trunk/lib/Parse/ParsePragma.cpp
>> cfe/trunk/lib/Sema/Sema.cpp
>> cfe/trunk/lib/Sema/SemaAttr.cpp
>> cfe/trunk/lib/Serialization/ASTReader.cpp
>> cfe/trunk/lib/Serialization/ASTWriter.cpp
>> cfe/trunk/test/OpenMP/declare_simd_messages.cpp
>> cfe/trunk/test/PCH/pragma-pack.c
>> cfe/trunk/test/Parser/pragma-options.c
>> cfe/trunk/test/Parser/pragma-options.cpp
>> cfe/trunk/test/Parser/pragma-pack.c
>> cfe/trunk/test/Sema/pragma-pack.c
>>
>> Modified: cfe/trunk/include/clang/Basic/DiagnosticGroups.td
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/
>> Basic/DiagnosticGroups.td?rev=309386=309385=309386=diff
>> 
>> ==
>> --- cfe/trunk/include/clang/Basic/DiagnosticGroups.td (original)
>> +++ cfe/trunk/include/clang/Basic/DiagnosticGroups.td Fri Jul 28
>> 07:41:21 2017
>> @@ -471,8 +471,10 @@ def IgnoredPragmaIntrinsic : DiagGroup<"
>>  def UnknownPragmas : DiagGroup<"unknown-pragmas">;
>>  def IgnoredPragmas : DiagGroup<"ignored-pragmas",
>> [IgnoredPragmaIntrinsic]>;
>>  def PragmaClangAttribute : DiagGroup<"pragma-clang-attribute">;
>> +def PragmaPackSuspiciousInclude : DiagGroup<"pragma-pack-suspici
>> ous-include">;
>> +def PragmaPack : DiagGroup<"pragma-pack", [PragmaPackSuspiciousInclude]>
>> ;
>>  def Pragmas : DiagGroup<"pragmas", [UnknownPragmas, IgnoredPragmas,
>> -PragmaClangAttribute]>;
>> +PragmaClangAttribute, PragmaPack]>;
>>  def UnknownWarningOption : DiagGroup<"unknown-warning-option">;
>>  def 

Re: r309386 - Recommit r308327 3rd time: Add a warning for missing

2017-09-26 Thread Nico Weber via cfe-commits
Another bit of feedback: The Microsoft SDK has pragma adjustment headers
that are used like so:

#include 
// Define structs with alignment 1 here
#include 

This warning fires on that. I haven't seen these headers in active use
recently, but I remember seeing them quite a bit maybe 10 years ago. (It
took me until today to remember their names.) Any ideas on how to deal with
that?

On Fri, Jul 28, 2017 at 2:41 PM, Alex Lorenz via cfe-commits <
cfe-commits@lists.llvm.org> wrote:

> Author: arphaman
> Date: Fri Jul 28 07:41:21 2017
> New Revision: 309386
>
> URL: http://llvm.org/viewvc/llvm-project?rev=309386=rev
> Log:
> Recommit r308327 3rd time: Add a warning for missing
> '#pragma pack (pop)' and suspicious uses of '#pragma pack' in included
> files
>
> The second recommit (r309106) was reverted because the "non-default #pragma
> pack value chages the alignment of struct or union members in the included
> file"
> warning proved to be too aggressive for external projects like Chromium
> (https://bugs.chromium.org/p/chromium/issues/detail?id=749197). This
> recommit
> makes the problematic warning a non-default one, and gives it the
> -Wpragma-pack-suspicious-include warning option.
>
> The first recommit (r308441) caused a "non-default #pragma pack value might
> change the alignment of struct or union members in the included file"
> warning
> in LLVM itself. This recommit tweaks the added warning to avoid warnings
> for
> #includes that don't have any records that are affected by the non-default
> alignment. This tweak avoids the previously emitted warning in LLVM.
>
> Original message:
>
> This commit adds a new -Wpragma-pack warning. It warns in the following
> cases:
>
> - When a translation unit is missing terminating #pragma pack (pop)
> directives.
> - When entering an included file if the current alignment value as
> determined
>   by '#pragma pack' directives is different from the default alignment
> value.
> - When leaving an included file that changed the state of the current
> alignment
>   value.
>
> rdar://10184173
>
> Differential Revision: https://reviews.llvm.org/D35484
>
> Added:
> cfe/trunk/test/PCH/suspicious-pragma-pack.c
> cfe/trunk/test/Sema/Inputs/pragma-pack1.h
> cfe/trunk/test/Sema/Inputs/pragma-pack2.h
> cfe/trunk/test/Sema/suspicious-pragma-pack.c
> cfe/trunk/test/SemaObjC/Inputs/empty.h
> cfe/trunk/test/SemaObjC/suspicious-pragma-pack.m
> Modified:
> cfe/trunk/include/clang/Basic/DiagnosticGroups.td
> cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td
> cfe/trunk/include/clang/Lex/PPCallbacks.h
> cfe/trunk/include/clang/Sema/Sema.h
> cfe/trunk/include/clang/Serialization/ASTReader.h
> cfe/trunk/lib/Parse/ParsePragma.cpp
> cfe/trunk/lib/Sema/Sema.cpp
> cfe/trunk/lib/Sema/SemaAttr.cpp
> cfe/trunk/lib/Serialization/ASTReader.cpp
> cfe/trunk/lib/Serialization/ASTWriter.cpp
> cfe/trunk/test/OpenMP/declare_simd_messages.cpp
> cfe/trunk/test/PCH/pragma-pack.c
> cfe/trunk/test/Parser/pragma-options.c
> cfe/trunk/test/Parser/pragma-options.cpp
> cfe/trunk/test/Parser/pragma-pack.c
> cfe/trunk/test/Sema/pragma-pack.c
>
> Modified: cfe/trunk/include/clang/Basic/DiagnosticGroups.td
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/
> clang/Basic/DiagnosticGroups.td?rev=309386=309385=309386=diff
> 
> ==
> --- cfe/trunk/include/clang/Basic/DiagnosticGroups.td (original)
> +++ cfe/trunk/include/clang/Basic/DiagnosticGroups.td Fri Jul 28 07:41:21
> 2017
> @@ -471,8 +471,10 @@ def IgnoredPragmaIntrinsic : DiagGroup<"
>  def UnknownPragmas : DiagGroup<"unknown-pragmas">;
>  def IgnoredPragmas : DiagGroup<"ignored-pragmas",
> [IgnoredPragmaIntrinsic]>;
>  def PragmaClangAttribute : DiagGroup<"pragma-clang-attribute">;
> +def PragmaPackSuspiciousInclude : DiagGroup<"pragma-pack-
> suspicious-include">;
> +def PragmaPack : DiagGroup<"pragma-pack", [PragmaPackSuspiciousInclude]>;
>  def Pragmas : DiagGroup<"pragmas", [UnknownPragmas, IgnoredPragmas,
> -PragmaClangAttribute]>;
> +PragmaClangAttribute, PragmaPack]>;
>  def UnknownWarningOption : DiagGroup<"unknown-warning-option">;
>  def NSobjectAttribute : DiagGroup<"NSObject-attribute">;
>  def IndependentClassAttribute : DiagGroup<"IndependentClass-attribute">;
>
> Modified: cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/
> DiagnosticSemaKinds.td?rev=309386=309385=309386=diff
> 
> ==
> --- cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td (original)
> +++ cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td Fri Jul 28
> 07:41:21 2017
> @@ -712,6 +712,17 @@ def err_pragma_options_align_mac68k_targ
>  def warn_pragma_pack_invalid_alignment : 

Re: r309386 - Recommit r308327 3rd time: Add a warning for missing

2017-07-31 Thread Alex L via cfe-commits
Add a note with a fixit in r309559.

On 31 July 2017 at 10:50, Alex L  wrote:

> That's an interesting case. I'll tweak the warning to diagnose this
> scenario better today.
>
> On 29 July 2017 at 00:56, Hans Wennborg  wrote:
>
>> On Fri, Jul 28, 2017 at 7:41 AM, Alex Lorenz via cfe-commits
>>  wrote:
>> > Author: arphaman
>> > Date: Fri Jul 28 07:41:21 2017
>> > New Revision: 309386
>> >
>> > URL: http://llvm.org/viewvc/llvm-project?rev=309386=rev
>> > Log:
>> > Recommit r308327 3rd time: Add a warning for missing
>> > '#pragma pack (pop)' and suspicious uses of '#pragma pack' in included
>> files
>> >
>> > The second recommit (r309106) was reverted because the "non-default
>> #pragma
>> > pack value chages the alignment of struct or union members in the
>> included file"
>> > warning proved to be too aggressive for external projects like Chromium
>> > (https://bugs.chromium.org/p/chromium/issues/detail?id=749197). This
>> recommit
>> > makes the problematic warning a non-default one, and gives it the
>> > -Wpragma-pack-suspicious-include warning option.
>> >
>> > The first recommit (r308441) caused a "non-default #pragma pack value
>> might
>> > change the alignment of struct or union members in the included file"
>> warning
>> > in LLVM itself. This recommit tweaks the added warning to avoid
>> warnings for
>> > #includes that don't have any records that are affected by the
>> non-default
>> > alignment. This tweak avoids the previously emitted warning in LLVM.
>> >
>> > Original message:
>> >
>> > This commit adds a new -Wpragma-pack warning. It warns in the following
>> cases:
>> >
>> > - When a translation unit is missing terminating #pragma pack (pop)
>> directives.
>> > - When entering an included file if the current alignment value as
>> determined
>> >   by '#pragma pack' directives is different from the default alignment
>> value.
>> > - When leaving an included file that changed the state of the current
>> alignment
>> >   value.
>> >
>> > rdar://10184173
>> >
>> > Differential Revision: https://reviews.llvm.org/D35484
>>
>> We did get warnings with this version too, but this time it looks like
>> a real bug :-)
>>
>> C:\b\c\builder\ClangToTWin_dll_\src\third_party\usrsctp\usrs
>> ctplib\usrsctplib\netinet\sctp.h(51,9):
>>  error: unterminated '#pragma pack (push, ...)' at end of file
>> [-Werror,-Wpragma-pack]
>>
>> The interesting thing is that the file does reset the alignment, but
>> it does it with a "#pragma pack()" which doesn't pop the stack, but
>> just resets to the default value.
>>
>> It might be worth tweaking the warning to give a better message for
>> this. A "#pragma pack(push, ..)" followed by "#pragma pack()" seems
>> pretty dodgy since there's no point in pushing if the code isn't going
>> to pop.
>>
>
>
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


Re: r309386 - Recommit r308327 3rd time: Add a warning for missing

2017-07-31 Thread Alex L via cfe-commits
That's an interesting case. I'll tweak the warning to diagnose this
scenario better today.

On 29 July 2017 at 00:56, Hans Wennborg  wrote:

> On Fri, Jul 28, 2017 at 7:41 AM, Alex Lorenz via cfe-commits
>  wrote:
> > Author: arphaman
> > Date: Fri Jul 28 07:41:21 2017
> > New Revision: 309386
> >
> > URL: http://llvm.org/viewvc/llvm-project?rev=309386=rev
> > Log:
> > Recommit r308327 3rd time: Add a warning for missing
> > '#pragma pack (pop)' and suspicious uses of '#pragma pack' in included
> files
> >
> > The second recommit (r309106) was reverted because the "non-default
> #pragma
> > pack value chages the alignment of struct or union members in the
> included file"
> > warning proved to be too aggressive for external projects like Chromium
> > (https://bugs.chromium.org/p/chromium/issues/detail?id=749197). This
> recommit
> > makes the problematic warning a non-default one, and gives it the
> > -Wpragma-pack-suspicious-include warning option.
> >
> > The first recommit (r308441) caused a "non-default #pragma pack value
> might
> > change the alignment of struct or union members in the included file"
> warning
> > in LLVM itself. This recommit tweaks the added warning to avoid warnings
> for
> > #includes that don't have any records that are affected by the
> non-default
> > alignment. This tweak avoids the previously emitted warning in LLVM.
> >
> > Original message:
> >
> > This commit adds a new -Wpragma-pack warning. It warns in the following
> cases:
> >
> > - When a translation unit is missing terminating #pragma pack (pop)
> directives.
> > - When entering an included file if the current alignment value as
> determined
> >   by '#pragma pack' directives is different from the default alignment
> value.
> > - When leaving an included file that changed the state of the current
> alignment
> >   value.
> >
> > rdar://10184173
> >
> > Differential Revision: https://reviews.llvm.org/D35484
>
> We did get warnings with this version too, but this time it looks like
> a real bug :-)
>
> C:\b\c\builder\ClangToTWin_dll_\src\third_party\usrsctp\
> usrsctplib\usrsctplib\netinet\sctp.h(51,9):
>  error: unterminated '#pragma pack (push, ...)' at end of file
> [-Werror,-Wpragma-pack]
>
> The interesting thing is that the file does reset the alignment, but
> it does it with a "#pragma pack()" which doesn't pop the stack, but
> just resets to the default value.
>
> It might be worth tweaking the warning to give a better message for
> this. A "#pragma pack(push, ..)" followed by "#pragma pack()" seems
> pretty dodgy since there's no point in pushing if the code isn't going
> to pop.
>
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


Re: r309386 - Recommit r308327 3rd time: Add a warning for missing

2017-07-28 Thread Hans Wennborg via cfe-commits
On Fri, Jul 28, 2017 at 7:41 AM, Alex Lorenz via cfe-commits
 wrote:
> Author: arphaman
> Date: Fri Jul 28 07:41:21 2017
> New Revision: 309386
>
> URL: http://llvm.org/viewvc/llvm-project?rev=309386=rev
> Log:
> Recommit r308327 3rd time: Add a warning for missing
> '#pragma pack (pop)' and suspicious uses of '#pragma pack' in included files
>
> The second recommit (r309106) was reverted because the "non-default #pragma
> pack value chages the alignment of struct or union members in the included 
> file"
> warning proved to be too aggressive for external projects like Chromium
> (https://bugs.chromium.org/p/chromium/issues/detail?id=749197). This recommit
> makes the problematic warning a non-default one, and gives it the
> -Wpragma-pack-suspicious-include warning option.
>
> The first recommit (r308441) caused a "non-default #pragma pack value might
> change the alignment of struct or union members in the included file" warning
> in LLVM itself. This recommit tweaks the added warning to avoid warnings for
> #includes that don't have any records that are affected by the non-default
> alignment. This tweak avoids the previously emitted warning in LLVM.
>
> Original message:
>
> This commit adds a new -Wpragma-pack warning. It warns in the following cases:
>
> - When a translation unit is missing terminating #pragma pack (pop) 
> directives.
> - When entering an included file if the current alignment value as determined
>   by '#pragma pack' directives is different from the default alignment value.
> - When leaving an included file that changed the state of the current 
> alignment
>   value.
>
> rdar://10184173
>
> Differential Revision: https://reviews.llvm.org/D35484

We did get warnings with this version too, but this time it looks like
a real bug :-)

C:\b\c\builder\ClangToTWin_dll_\src\third_party\usrsctp\usrsctplib\usrsctplib\netinet\sctp.h(51,9):
 error: unterminated '#pragma pack (push, ...)' at end of file
[-Werror,-Wpragma-pack]

The interesting thing is that the file does reset the alignment, but
it does it with a "#pragma pack()" which doesn't pop the stack, but
just resets to the default value.

It might be worth tweaking the warning to give a better message for
this. A "#pragma pack(push, ..)" followed by "#pragma pack()" seems
pretty dodgy since there's no point in pushing if the code isn't going
to pop.
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


r309386 - Recommit r308327 3rd time: Add a warning for missing

2017-07-28 Thread Alex Lorenz via cfe-commits
Author: arphaman
Date: Fri Jul 28 07:41:21 2017
New Revision: 309386

URL: http://llvm.org/viewvc/llvm-project?rev=309386=rev
Log:
Recommit r308327 3rd time: Add a warning for missing
'#pragma pack (pop)' and suspicious uses of '#pragma pack' in included files

The second recommit (r309106) was reverted because the "non-default #pragma
pack value chages the alignment of struct or union members in the included file"
warning proved to be too aggressive for external projects like Chromium
(https://bugs.chromium.org/p/chromium/issues/detail?id=749197). This recommit
makes the problematic warning a non-default one, and gives it the
-Wpragma-pack-suspicious-include warning option.

The first recommit (r308441) caused a "non-default #pragma pack value might
change the alignment of struct or union members in the included file" warning
in LLVM itself. This recommit tweaks the added warning to avoid warnings for
#includes that don't have any records that are affected by the non-default
alignment. This tweak avoids the previously emitted warning in LLVM.

Original message:

This commit adds a new -Wpragma-pack warning. It warns in the following cases:

- When a translation unit is missing terminating #pragma pack (pop) directives.
- When entering an included file if the current alignment value as determined
  by '#pragma pack' directives is different from the default alignment value.
- When leaving an included file that changed the state of the current alignment
  value.

rdar://10184173

Differential Revision: https://reviews.llvm.org/D35484

Added:
cfe/trunk/test/PCH/suspicious-pragma-pack.c
cfe/trunk/test/Sema/Inputs/pragma-pack1.h
cfe/trunk/test/Sema/Inputs/pragma-pack2.h
cfe/trunk/test/Sema/suspicious-pragma-pack.c
cfe/trunk/test/SemaObjC/Inputs/empty.h
cfe/trunk/test/SemaObjC/suspicious-pragma-pack.m
Modified:
cfe/trunk/include/clang/Basic/DiagnosticGroups.td
cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td
cfe/trunk/include/clang/Lex/PPCallbacks.h
cfe/trunk/include/clang/Sema/Sema.h
cfe/trunk/include/clang/Serialization/ASTReader.h
cfe/trunk/lib/Parse/ParsePragma.cpp
cfe/trunk/lib/Sema/Sema.cpp
cfe/trunk/lib/Sema/SemaAttr.cpp
cfe/trunk/lib/Serialization/ASTReader.cpp
cfe/trunk/lib/Serialization/ASTWriter.cpp
cfe/trunk/test/OpenMP/declare_simd_messages.cpp
cfe/trunk/test/PCH/pragma-pack.c
cfe/trunk/test/Parser/pragma-options.c
cfe/trunk/test/Parser/pragma-options.cpp
cfe/trunk/test/Parser/pragma-pack.c
cfe/trunk/test/Sema/pragma-pack.c

Modified: cfe/trunk/include/clang/Basic/DiagnosticGroups.td
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticGroups.td?rev=309386=309385=309386=diff
==
--- cfe/trunk/include/clang/Basic/DiagnosticGroups.td (original)
+++ cfe/trunk/include/clang/Basic/DiagnosticGroups.td Fri Jul 28 07:41:21 2017
@@ -471,8 +471,10 @@ def IgnoredPragmaIntrinsic : DiagGroup<"
 def UnknownPragmas : DiagGroup<"unknown-pragmas">;
 def IgnoredPragmas : DiagGroup<"ignored-pragmas", [IgnoredPragmaIntrinsic]>;
 def PragmaClangAttribute : DiagGroup<"pragma-clang-attribute">;
+def PragmaPackSuspiciousInclude : DiagGroup<"pragma-pack-suspicious-include">;
+def PragmaPack : DiagGroup<"pragma-pack", [PragmaPackSuspiciousInclude]>;
 def Pragmas : DiagGroup<"pragmas", [UnknownPragmas, IgnoredPragmas,
-PragmaClangAttribute]>;
+PragmaClangAttribute, PragmaPack]>;
 def UnknownWarningOption : DiagGroup<"unknown-warning-option">;
 def NSobjectAttribute : DiagGroup<"NSObject-attribute">;
 def IndependentClassAttribute : DiagGroup<"IndependentClass-attribute">;

Modified: cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td?rev=309386=309385=309386=diff
==
--- cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td (original)
+++ cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td Fri Jul 28 07:41:21 
2017
@@ -712,6 +712,17 @@ def err_pragma_options_align_mac68k_targ
 def warn_pragma_pack_invalid_alignment : Warning<
   "expected #pragma pack parameter to be '1', '2', '4', '8', or '16'">,
   InGroup;
+def warn_pragma_pack_non_default_at_include : Warning<
+  "non-default #pragma pack value changes the alignment of struct or union "
+  "members in the included file">, InGroup,
+  DefaultIgnore;
+def warn_pragma_pack_modified_after_include : Warning<
+  "the current #pragma pack aligment value is modified in the included "
+  "file">, InGroup;
+def warn_pragma_pack_no_pop_eof : Warning<"unterminated "
+  "'#pragma pack (push, ...)' at end of file">, InGroup;
+def note_pragma_pack_here : Note<
+  "previous '#pragma pack' directive that modifies alignment is here">;
 // Follow the