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