1 // RUN: %clang_cc1 -triple armv7-unknown-unknown -target-abi apcs-gnu %s -verify 2 // RUN: %clang_cc1 -triple armv7-unknown-unknown -target-abi aapcs %s -verify 3 4 #define check(name, cond) int _##name##_check[(cond) ? 1 : -1] 5 6 struct s0 { char field0; double field1; }; 7 #ifdef __ARM_EABI__ 8 check(s0_size, sizeof(struct s0) == 16); 9 #else 10 check(s0_size, sizeof(struct s0) == 12); 11 #endif 12 13 struct s1 { char field0; long double field1; }; 14 #ifdef __ARM_EABI__ 15 check(s1_size, sizeof(struct s1) == 16); 16 #else 17 check(s1_size, sizeof(struct s1) == 12); 18 #endif 19 20 struct s2 { 21 short field0; 22 int field1 : 24; 23 char field2; 24 }; 25 #ifdef __ARM_EABI__ 26 check(s2_size, sizeof(struct s2) == 8); 27 check(s2_offset_0, __builtin_offsetof(struct s2, field0) == 0); 28 check(s2_offset_1, __builtin_offsetof(struct s2, field2) == 7); 29 #else 30 check(s2_size, sizeof(struct s2) == 6); 31 check(s2_offset_0, __builtin_offsetof(struct s2, field0) == 0); 32 check(s2_offset_1, __builtin_offsetof(struct s2, field2) == 5); 33 #endif 34 35 struct s3 { 36 short field0; 37 int field1 : 24 __attribute__((aligned(4))); 38 char field2; 39 }; 40 check(s3_size, sizeof(struct s3) == 8); 41 check(s3_offset_0, __builtin_offsetof(struct s3, field0) == 0); 42 check(s3_offset_1, __builtin_offsetof(struct s3, field2) == 7); 43 44 struct s4 { 45 int field0 : 4; 46 }; 47 #ifdef __ARM_EABI__ 48 check(s4_size, sizeof(struct s4) == 4); 49 check(s4_align, __alignof(struct s4) == 4); 50 #else 51 check(s4_size, sizeof(struct s4) == 1); 52 check(s4_align, __alignof(struct s4) == 1); 53 #endif 54