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