Bug ID: 78008
Summary: Forbid or document #pragma pack(0)
Assignee: unassigned at gcc dot gnu.org
Reporter: dhekir at gmail dot com
Target Milestone: ---
The GCC online doc
(https://gcc.gnu.org/onlinedocs/gcc/Structure-Layout-Pragmas.html) says that
#pragma pack is supported for compatibility with MS compilers.
However, the MSVC doc (https://msdn.microsoft.com/en-us/library/2e70t5y1.aspx)
explicitly states that, for pack(n): "Valid values are 1, 2, 4, 8, and 16."
Indeed, writing #pragma pack(0) and compiling (with VS 2010, in my case)
results in a warning:
warning C4086: expected pragma parameter to be '1', '2', '4', '8', or '16'
On GCC (I tried 5.4.0, but it seems not to have changed in quite some time),
using #pragma pack(0) results in no warnings, even with -Wall.
I found very old discussions (around gcc 2.9.5) mentioning that pack(0) is
supposed to disable the effect of #pragma pack, however this is not documented.
If the intended behavior is the same as "#pragma pack()" (without arguments),
please document it. Otherwise, it would be best if GCC would report this
construction as a warning/error, or at least indicate in the documentation that
it should not be used.