/* REQUIRED_ARGS: -wi -verrors=simple
TEST_OUTPUT:
---
compilable/pragmapack.c(101): Warning: current pack attribute is default
compilable/pragmapack.c(104): Warning: current pack attribute is 2
compilable/pragmapack.c(112): Warning: current pack attribute is default
compilable/pragmapack.c(117): Warning: current pack attribute is 8
compilable/pragmapack.c(123): Warning: current pack attribute is default
compilable/pragmapack.c(128): Warning: current pack attribute is 8
compilable/pragmapack.c(135): Warning: current pack attribute is default
compilable/pragmapack.c(140): Warning: current pack attribute is default
compilable/pragmapack.c(143): Warning: current pack attribute is 2
compilable/pragmapack.c(145): Warning: current pack attribute is 2
compilable/pragmapack.c(147): Warning: current pack attribute is 2
compilable/pragmapack.c(149): Warning: current pack attribute is 2
compilable/pragmapack.c(151): Warning: current pack attribute is 2
compilable/pragmapack.c(153): Warning: current pack attribute is 2
compilable/pragmapack.c(155): Warning: current pack attribute is 2
compilable/pragmapack.c(157): Warning: current pack attribute is 8
compilable/pragmapack.c(159): Warning: current pack attribute is 2
compilable/pragmapack.c(161): Warning: current pack attribute is 2
compilable/pragmapack.c(163): Warning: current pack attribute is default
---
*/

// Test #pragma pack

#line 100

#pragma pack(show)

#pragma pack(2)
#pragma pack(show)
struct S
{
    int i;
    short j;
    double k;
};
#pragma pack()
#pragma pack(show)

_Static_assert(sizeof(struct S) == 4 + 2 + 8, "1");

#pragma pack(push, 8)
#pragma pack(show)
struct S2
{
    char a, b;
};
#pragma pack(pop)
#pragma pack(show)

_Static_assert(sizeof(struct S2) == 8, "2");

#pragma pack(push, 8)
#pragma pack(show)
struct S3
{
    unsigned short u;
    char a;
};
#pragma pack(pop)
#pragma pack(show)

_Static_assert(sizeof(struct S3) == 8, "3");

#pragma pack()
#pragma pack(show)
#pragma pack(2)
#pragma pack(push)
#pragma pack(show)
#pragma pack(push,2)
#pragma pack(show)
#pragma pack(push,abc)
#pragma pack(show)
#pragma pack(push,abc,2)
#pragma pack(show)
#pragma pack(pop)
#pragma pack(show)
#pragma pack(pop,a)
#pragma pack(show)
#pragma pack(pop,2)
#pragma pack(show)
#pragma pack(pop,a,b,4,8,c)
#pragma pack(show)
#pragma pack(pop);
#pragma pack(show)
#pragma pack(pop);
#pragma pack(show)
#pragma pack(pop);
#pragma pack(show)

int x;
