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