18b54274fSArgyrios Kyrtzidis // RUN: %clang_cc1 -triple i686-apple-darwin9 -fsyntax-only -verify %s 2*c6e68daaSAndy Gibbs // expected-no-diagnostics 38b54274fSArgyrios Kyrtzidis 48b54274fSArgyrios Kyrtzidis namespace rdar8745206 { 58b54274fSArgyrios Kyrtzidis 68b54274fSArgyrios Kyrtzidis struct Base { 78b54274fSArgyrios Kyrtzidis int i; 88b54274fSArgyrios Kyrtzidis }; 98b54274fSArgyrios Kyrtzidis 10d62c9be4SArgyrios Kyrtzidis #pragma pack(push, 1) 118b54274fSArgyrios Kyrtzidis struct Sub : public Base { 128b54274fSArgyrios Kyrtzidis char c; 138b54274fSArgyrios Kyrtzidis }; 14d62c9be4SArgyrios Kyrtzidis #pragma pack(pop) 158b54274fSArgyrios Kyrtzidis 168b54274fSArgyrios Kyrtzidis int check[sizeof(Sub) == 5 ? 1 : -1]; 178b54274fSArgyrios Kyrtzidis 188b54274fSArgyrios Kyrtzidis } 19d62c9be4SArgyrios Kyrtzidis 20d62c9be4SArgyrios Kyrtzidis namespace check2 { 21d62c9be4SArgyrios Kyrtzidis 22d62c9be4SArgyrios Kyrtzidis struct Base { 23d62c9be4SArgyrios Kyrtzidis virtual ~Base(); 24d62c9be4SArgyrios Kyrtzidis int x; 25d62c9be4SArgyrios Kyrtzidis }; 26d62c9be4SArgyrios Kyrtzidis 27d62c9be4SArgyrios Kyrtzidis #pragma pack(push, 1) 28d62c9be4SArgyrios Kyrtzidis struct Sub : virtual Base { 29d62c9be4SArgyrios Kyrtzidis char c; 30d62c9be4SArgyrios Kyrtzidis }; 31d62c9be4SArgyrios Kyrtzidis #pragma pack(pop) 32d62c9be4SArgyrios Kyrtzidis 33d62c9be4SArgyrios Kyrtzidis int check[sizeof(Sub) == 13 ? 1 : -1]; 34d62c9be4SArgyrios Kyrtzidis 35d62c9be4SArgyrios Kyrtzidis } 36034b94a5SRichard Smith 37034b94a5SRichard Smith namespace llvm_support_endian { 38034b94a5SRichard Smith 39034b94a5SRichard Smith template<typename, bool> struct X; 40034b94a5SRichard Smith 41034b94a5SRichard Smith #pragma pack(push) 42034b94a5SRichard Smith #pragma pack(1) 43034b94a5SRichard Smith template<typename T> struct X<T, true> { 44034b94a5SRichard Smith T t; 45034b94a5SRichard Smith }; 46034b94a5SRichard Smith #pragma pack(pop) 47034b94a5SRichard Smith 48034b94a5SRichard Smith #pragma pack(push) 49034b94a5SRichard Smith #pragma pack(2) 50034b94a5SRichard Smith template<> struct X<long double, true> { 51034b94a5SRichard Smith long double c; 52034b94a5SRichard Smith }; 53034b94a5SRichard Smith #pragma pack(pop) 54034b94a5SRichard Smith 55034b94a5SRichard Smith int check1[__alignof(X<int, true>) == 1 ? 1 : -1]; 56034b94a5SRichard Smith int check2[__alignof(X<long double, true>) == 2 ? 1 : -1]; 57034b94a5SRichard Smith 58034b94a5SRichard Smith } 59