55 lines · c
1// RUN: %clang_cc1 -triple armv7-unknown-unknown -target-abi apcs-gnu %s -verify2// RUN: %clang_cc1 -triple armv7-unknown-unknown -target-abi aapcs %s -verify3// expected-no-diagnostics4 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#else11check(s0_size, sizeof(struct s0) == 12);12#endif13 14struct s1 { char field0; long double field1; };15#ifdef __ARM_EABI__16check(s1_size, sizeof(struct s1) == 16);17#else18check(s1_size, sizeof(struct s1) == 12);19#endif20 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#else31check(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#endif35 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#else52check(s4_size, sizeof(struct s4) == 1);53check(s4_align, __alignof(struct s4) == 1);54#endif55