blob: d017fdb8aa07df5d36f181d83f3fe4739d69f6fd [file] [log] [blame]
Daniel Dunbard410fa22010-01-27 20:23:08 +00001// 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
Daniel Dunbar684de632010-04-22 16:14:54 +00004#define check(name, cond) int _##name##_check[(cond) ? 1 : -1]
5
6struct s0 { char field0; double field1; };
Daniel Dunbard410fa22010-01-27 20:23:08 +00007#ifdef __ARM_EABI__
Daniel Dunbar684de632010-04-22 16:14:54 +00008check(s0_size, sizeof(struct s0) == 16);
Daniel Dunbard410fa22010-01-27 20:23:08 +00009#else
Daniel Dunbar684de632010-04-22 16:14:54 +000010check(s0_size, sizeof(struct s0) == 12);
11#endif
Daniel Dunbard410fa22010-01-27 20:23:08 +000012
13struct s1 { char field0; long double field1; };
Daniel Dunbar684de632010-04-22 16:14:54 +000014#ifdef __ARM_EABI__
15check(s1_size, sizeof(struct s1) == 16);
16#else
17check(s1_size, sizeof(struct s1) == 12);
18#endif
Daniel Dunbard410fa22010-01-27 20:23:08 +000019
Daniel Dunbar684de632010-04-22 16:14:54 +000020struct s2 {
21 short field0;
22 int field1 : 24;
23 char field2;
24};
25#ifdef __ARM_EABI__
26check(s2_size, sizeof(struct s2) == 8);
27check(s2_offset_0, __builtin_offsetof(struct s2, field0) == 0);
28check(s2_offset_1, __builtin_offsetof(struct s2, field2) == 7);
29#else
30check(s2_size, sizeof(struct s2) == 6);
31check(s2_offset_0, __builtin_offsetof(struct s2, field0) == 0);
32check(s2_offset_1, __builtin_offsetof(struct s2, field2) == 5);
33#endif
34
35struct s3 {
36 short field0;
37 int field1 : 24 __attribute__((aligned(4)));
38 char field2;
39};
40check(s3_size, sizeof(struct s3) == 8);
41check(s3_offset_0, __builtin_offsetof(struct s3, field0) == 0);
42check(s3_offset_1, __builtin_offsetof(struct s3, field2) == 7);
43
44struct s4 {
Carl Norume224ba72011-03-07 22:57:45 +000045 int field0 : 4;
Daniel Dunbar684de632010-04-22 16:14:54 +000046};
47#ifdef __ARM_EABI__
48check(s4_size, sizeof(struct s4) == 4);
49check(s4_align, __alignof(struct s4) == 4);
50#else
51check(s4_size, sizeof(struct s4) == 1);
52check(s4_align, __alignof(struct s4) == 1);
Daniel Dunbard410fa22010-01-27 20:23:08 +000053#endif