Re: r309386 - Recommit r308327 3rd time: Add a warning for missing
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 Weberwrote: > 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
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
Add a note with a fixit in r309559. On 31 July 2017 at 10:50, Alex Lwrote: > 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
That's an interesting case. I'll tweak the warning to diagnose this scenario better today. On 29 July 2017 at 00:56, Hans Wennborgwrote: > 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
On Fri, Jul 28, 2017 at 7:41 AM, Alex Lorenz via cfe-commitswrote: > 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
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