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