1*67e74705SXin Li // RUN: %clang_cc1 -triple i686-apple-darwin9 -fsyntax-only -verify %s 2*67e74705SXin Li // expected-no-diagnostics 3*67e74705SXin Li 4*67e74705SXin Li namespace rdar8745206 { 5*67e74705SXin Li 6*67e74705SXin Li struct Base { 7*67e74705SXin Li int i; 8*67e74705SXin Li }; 9*67e74705SXin Li 10*67e74705SXin Li #pragma pack(push, 1) 11*67e74705SXin Li struct Sub : public Base { 12*67e74705SXin Li char c; 13*67e74705SXin Li }; 14*67e74705SXin Li #pragma pack(pop) 15*67e74705SXin Li 16*67e74705SXin Li int check[sizeof(Sub) == 5 ? 1 : -1]; 17*67e74705SXin Li 18*67e74705SXin Li } 19*67e74705SXin Li 20*67e74705SXin Li namespace check2 { 21*67e74705SXin Li 22*67e74705SXin Li struct Base { 23*67e74705SXin Li virtual ~Base(); 24*67e74705SXin Li int x; 25*67e74705SXin Li }; 26*67e74705SXin Li 27*67e74705SXin Li #pragma pack(push, 1) 28*67e74705SXin Li struct Sub : virtual Base { 29*67e74705SXin Li char c; 30*67e74705SXin Li }; 31*67e74705SXin Li #pragma pack(pop) 32*67e74705SXin Li 33*67e74705SXin Li int check[sizeof(Sub) == 13 ? 1 : -1]; 34*67e74705SXin Li 35*67e74705SXin Li } 36*67e74705SXin Li 37*67e74705SXin Li namespace llvm_support_endian { 38*67e74705SXin Li 39*67e74705SXin Li template<typename, bool> struct X; 40*67e74705SXin Li 41*67e74705SXin Li #pragma pack(push) 42*67e74705SXin Li #pragma pack(1) 43*67e74705SXin Li template<typename T> struct X<T, true> { 44*67e74705SXin Li T t; 45*67e74705SXin Li }; 46*67e74705SXin Li #pragma pack(pop) 47*67e74705SXin Li 48*67e74705SXin Li #pragma pack(push) 49*67e74705SXin Li #pragma pack(2) 50*67e74705SXin Li template<> struct X<long double, true> { 51*67e74705SXin Li long double c; 52*67e74705SXin Li }; 53*67e74705SXin Li #pragma pack(pop) 54*67e74705SXin Li 55*67e74705SXin Li int check1[__alignof(X<int, true>) == 1 ? 1 : -1]; 56*67e74705SXin Li int check2[__alignof(X<long double, true>) == 2 ? 1 : -1]; 57*67e74705SXin Li 58*67e74705SXin Li } 59