blob: 4b76515d625766c269bd6c7825f17e5a1f23fe88 [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
Andy Gibbs8e8fb3b2012-10-19 12:44:48 +00003// expected-no-diagnostics
Daniel Dunbard410fa22010-01-27 20:23:08 +00004
Daniel Dunbar684de632010-04-22 16:14:54 +00005#define check(name, cond) int _##name##_check[(cond) ? 1 : -1]
6
7struct s0 { char field0; double field1; };
Daniel Dunbard410fa22010-01-27 20:23:08 +00008#ifdef __ARM_EABI__
Daniel Dunbar684de632010-04-22 16:14:54 +00009check(s0_size, sizeof(struct s0) == 16);
Daniel Dunbard410fa22010-01-27 20:23:08 +000010#else
Daniel Dunbar684de632010-04-22 16:14:54 +000011check(s0_size, sizeof(struct s0) == 12);
12#endif
Daniel Dunbard410fa22010-01-27 20:23:08 +000013
14struct s1 { char field0; long double field1; };
Daniel Dunbar684de632010-04-22 16:14:54 +000015#ifdef __ARM_EABI__
16check(s1_size, sizeof(struct s1) == 16);
17#else
18check(s1_size, sizeof(struct s1) == 12);
19#endif
Daniel Dunbard410fa22010-01-27 20:23:08 +000020
Daniel Dunbar684de632010-04-22 16:14:54 +000021struct 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 {
Carl Norume224ba72011-03-07 22:57:45 +000046 int field0 : 4;
Daniel Dunbar684de632010-04-22 16:14:54 +000047};
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);
Daniel Dunbard410fa22010-01-27 20:23:08 +000054#endif