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