1a5728872c7702ddd09537c95bc3cbd20e1f2fb09Daniel Dunbar// RUN: %clang_cc1 -triple i686-apple-darwin9 %s -fsyntax-only -verify
28e8fb3be5bd78f0564444eca02b404566a5f3b5dAndy Gibbs// expected-no-diagnostics
31faf5baa2f5e1adecb289679fe41c8a5080e4611Daniel Dunbar
41faf5baa2f5e1adecb289679fe41c8a5080e4611Daniel Dunbar// Stack: [], Alignment: 8
51faf5baa2f5e1adecb289679fe41c8a5080e4611Daniel Dunbar
61faf5baa2f5e1adecb289679fe41c8a5080e4611Daniel Dunbar#pragma pack(push, 1)
71faf5baa2f5e1adecb289679fe41c8a5080e4611Daniel Dunbar// Stack: [8], Alignment: 1
81faf5baa2f5e1adecb289679fe41c8a5080e4611Daniel Dunbar
91faf5baa2f5e1adecb289679fe41c8a5080e4611Daniel Dunbar#pragma pack(push, 4)
101faf5baa2f5e1adecb289679fe41c8a5080e4611Daniel Dunbar// Stack: [8, 1], Alignment: 4
111faf5baa2f5e1adecb289679fe41c8a5080e4611Daniel Dunbar
121faf5baa2f5e1adecb289679fe41c8a5080e4611Daniel Dunbar// Note that this differs from gcc; pack() in gcc appears to pop the
131faf5baa2f5e1adecb289679fe41c8a5080e4611Daniel Dunbar// top stack entry and resets the current alignment. This is both
141faf5baa2f5e1adecb289679fe41c8a5080e4611Daniel Dunbar// inconsistent with MSVC, and the gcc documentation. In other cases,
151faf5baa2f5e1adecb289679fe41c8a5080e4611Daniel Dunbar// for example changing this to pack(8), I don't even understand what gcc
161faf5baa2f5e1adecb289679fe41c8a5080e4611Daniel Dunbar// is doing.
171faf5baa2f5e1adecb289679fe41c8a5080e4611Daniel Dunbar
181faf5baa2f5e1adecb289679fe41c8a5080e4611Daniel Dunbar#pragma pack()
191faf5baa2f5e1adecb289679fe41c8a5080e4611Daniel Dunbar// Stack: [8, 1], Alignment: 8
201faf5baa2f5e1adecb289679fe41c8a5080e4611Daniel Dunbar
211faf5baa2f5e1adecb289679fe41c8a5080e4611Daniel Dunbar#pragma pack(pop)
221faf5baa2f5e1adecb289679fe41c8a5080e4611Daniel Dunbar// Stack: [8], Alignment: 1
231faf5baa2f5e1adecb289679fe41c8a5080e4611Daniel Dunbarstruct s0 {
241faf5baa2f5e1adecb289679fe41c8a5080e4611Daniel Dunbar  char f0;
251faf5baa2f5e1adecb289679fe41c8a5080e4611Daniel Dunbar  short f1;
261faf5baa2f5e1adecb289679fe41c8a5080e4611Daniel Dunbar};
271faf5baa2f5e1adecb289679fe41c8a5080e4611Daniel Dunbarint a[sizeof(struct s0) == 3 ? 1 : -1];
281faf5baa2f5e1adecb289679fe41c8a5080e4611Daniel Dunbar
291faf5baa2f5e1adecb289679fe41c8a5080e4611Daniel Dunbar#pragma pack(pop)
301faf5baa2f5e1adecb289679fe41c8a5080e4611Daniel Dunbar// Stack: [], Alignment: 8
311faf5baa2f5e1adecb289679fe41c8a5080e4611Daniel Dunbarstruct s1 {
321faf5baa2f5e1adecb289679fe41c8a5080e4611Daniel Dunbar  char f0;
331faf5baa2f5e1adecb289679fe41c8a5080e4611Daniel Dunbar  short f1;
341faf5baa2f5e1adecb289679fe41c8a5080e4611Daniel Dunbar};
351faf5baa2f5e1adecb289679fe41c8a5080e4611Daniel Dunbarint b[sizeof(struct s1) == 4 ? 1 : -1];
36