1d410fa259e485b751258e07e750cf45cad01e7eaDaniel Dunbar// RUN: %clang_cc1 -triple armv7-unknown-unknown -target-abi apcs-gnu %s -verify 2d410fa259e485b751258e07e750cf45cad01e7eaDaniel Dunbar// RUN: %clang_cc1 -triple armv7-unknown-unknown -target-abi aapcs %s -verify 38e8fb3be5bd78f0564444eca02b404566a5f3b5dAndy Gibbs// expected-no-diagnostics 4d410fa259e485b751258e07e750cf45cad01e7eaDaniel Dunbar 5684de63867fac4ffe2f4c97756a16bfcb2d8b54bDaniel Dunbar#define check(name, cond) int _##name##_check[(cond) ? 1 : -1] 6d410fa259e485b751258e07e750cf45cad01e7eaDaniel Dunbar 7d410fa259e485b751258e07e750cf45cad01e7eaDaniel Dunbarstruct s0 { char field0; double field1; }; 8684de63867fac4ffe2f4c97756a16bfcb2d8b54bDaniel Dunbar#ifdef __ARM_EABI__ 9684de63867fac4ffe2f4c97756a16bfcb2d8b54bDaniel Dunbarcheck(s0_size, sizeof(struct s0) == 16); 10684de63867fac4ffe2f4c97756a16bfcb2d8b54bDaniel Dunbar#else 11684de63867fac4ffe2f4c97756a16bfcb2d8b54bDaniel Dunbarcheck(s0_size, sizeof(struct s0) == 12); 12684de63867fac4ffe2f4c97756a16bfcb2d8b54bDaniel Dunbar#endif 13d410fa259e485b751258e07e750cf45cad01e7eaDaniel Dunbar 14d410fa259e485b751258e07e750cf45cad01e7eaDaniel Dunbarstruct s1 { char field0; long double field1; }; 15684de63867fac4ffe2f4c97756a16bfcb2d8b54bDaniel Dunbar#ifdef __ARM_EABI__ 16684de63867fac4ffe2f4c97756a16bfcb2d8b54bDaniel Dunbarcheck(s1_size, sizeof(struct s1) == 16); 17d410fa259e485b751258e07e750cf45cad01e7eaDaniel Dunbar#else 18684de63867fac4ffe2f4c97756a16bfcb2d8b54bDaniel Dunbarcheck(s1_size, sizeof(struct s1) == 12); 19684de63867fac4ffe2f4c97756a16bfcb2d8b54bDaniel Dunbar#endif 20d410fa259e485b751258e07e750cf45cad01e7eaDaniel Dunbar 21684de63867fac4ffe2f4c97756a16bfcb2d8b54bDaniel Dunbarstruct s2 { 22684de63867fac4ffe2f4c97756a16bfcb2d8b54bDaniel Dunbar short field0; 23684de63867fac4ffe2f4c97756a16bfcb2d8b54bDaniel Dunbar int field1 : 24; 24684de63867fac4ffe2f4c97756a16bfcb2d8b54bDaniel Dunbar char field2; 25684de63867fac4ffe2f4c97756a16bfcb2d8b54bDaniel Dunbar}; 26684de63867fac4ffe2f4c97756a16bfcb2d8b54bDaniel Dunbar#ifdef __ARM_EABI__ 27684de63867fac4ffe2f4c97756a16bfcb2d8b54bDaniel Dunbarcheck(s2_size, sizeof(struct s2) == 8); 28684de63867fac4ffe2f4c97756a16bfcb2d8b54bDaniel Dunbarcheck(s2_offset_0, __builtin_offsetof(struct s2, field0) == 0); 29684de63867fac4ffe2f4c97756a16bfcb2d8b54bDaniel Dunbarcheck(s2_offset_1, __builtin_offsetof(struct s2, field2) == 7); 30684de63867fac4ffe2f4c97756a16bfcb2d8b54bDaniel Dunbar#else 31684de63867fac4ffe2f4c97756a16bfcb2d8b54bDaniel Dunbarcheck(s2_size, sizeof(struct s2) == 6); 32684de63867fac4ffe2f4c97756a16bfcb2d8b54bDaniel Dunbarcheck(s2_offset_0, __builtin_offsetof(struct s2, field0) == 0); 33684de63867fac4ffe2f4c97756a16bfcb2d8b54bDaniel Dunbarcheck(s2_offset_1, __builtin_offsetof(struct s2, field2) == 5); 34684de63867fac4ffe2f4c97756a16bfcb2d8b54bDaniel Dunbar#endif 35d410fa259e485b751258e07e750cf45cad01e7eaDaniel Dunbar 36684de63867fac4ffe2f4c97756a16bfcb2d8b54bDaniel Dunbarstruct s3 { 37684de63867fac4ffe2f4c97756a16bfcb2d8b54bDaniel Dunbar short field0; 38684de63867fac4ffe2f4c97756a16bfcb2d8b54bDaniel Dunbar int field1 : 24 __attribute__((aligned(4))); 39684de63867fac4ffe2f4c97756a16bfcb2d8b54bDaniel Dunbar char field2; 40684de63867fac4ffe2f4c97756a16bfcb2d8b54bDaniel Dunbar}; 41684de63867fac4ffe2f4c97756a16bfcb2d8b54bDaniel Dunbarcheck(s3_size, sizeof(struct s3) == 8); 42684de63867fac4ffe2f4c97756a16bfcb2d8b54bDaniel Dunbarcheck(s3_offset_0, __builtin_offsetof(struct s3, field0) == 0); 43684de63867fac4ffe2f4c97756a16bfcb2d8b54bDaniel Dunbarcheck(s3_offset_1, __builtin_offsetof(struct s3, field2) == 7); 44d410fa259e485b751258e07e750cf45cad01e7eaDaniel Dunbar 45684de63867fac4ffe2f4c97756a16bfcb2d8b54bDaniel Dunbarstruct s4 { 46e224ba7e3e604113aa160c379293bcb6425e8f36Carl Norum int field0 : 4; 47684de63867fac4ffe2f4c97756a16bfcb2d8b54bDaniel Dunbar}; 48684de63867fac4ffe2f4c97756a16bfcb2d8b54bDaniel Dunbar#ifdef __ARM_EABI__ 49684de63867fac4ffe2f4c97756a16bfcb2d8b54bDaniel Dunbarcheck(s4_size, sizeof(struct s4) == 4); 50684de63867fac4ffe2f4c97756a16bfcb2d8b54bDaniel Dunbarcheck(s4_align, __alignof(struct s4) == 4); 51684de63867fac4ffe2f4c97756a16bfcb2d8b54bDaniel Dunbar#else 52684de63867fac4ffe2f4c97756a16bfcb2d8b54bDaniel Dunbarcheck(s4_size, sizeof(struct s4) == 1); 53684de63867fac4ffe2f4c97756a16bfcb2d8b54bDaniel Dunbarcheck(s4_align, __alignof(struct s4) == 1); 54d410fa259e485b751258e07e750cf45cad01e7eaDaniel Dunbar#endif 55