File: attribute-aligned.c

package info (click to toggle)
frama-c 20220511-manganese-5
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 66,492 kB
  • sloc: ml: 278,834; ansic: 47,093; sh: 4,823; makefile: 3,613; javascript: 2,436; python: 1,919; perl: 897; lisp: 293; xml: 62
file content (105 lines) | stat: -rw-r--r-- 2,519 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
/* run.config*
STDOPT: +"-machdep gcc_x86_32"
*/
#include <stddef.h>
unsigned int S;
unsigned int A,B;
#define SIZE 4
#define TESTa(c, s, a) S=s, A=a
#define TESTb(c, s, a, b) S=s,A=a,B=b

//--------------------------------------------------------------------
struct c {
  char ca;
};

static void ct(void) {
  TESTa("c", sizeof(struct c), offsetof(struct c, ca));
  //         : size :  01
  //     gcc :   1  : |a|
}

//--------------------------------------------------------------------
struct d {
  char da;
} __attribute__((__aligned__(SIZE)));

static void dt(void) {
  TESTa("d", sizeof(struct d), offsetof(struct d, da));
  //         : size :  01234
  //     gcc :   4  : |a---|
}

//--------------------------------------------------------------------
struct p {
  char pa __attribute__((__aligned__(SIZE)));
};

static void pt(void) {
  TESTa("p", sizeof(struct p), offsetof(struct p, pa));
  //         : size :  01234
  //     gcc :   4  : |a---|
}

//--------------------------------------------------------------------
struct q {
  char qa __attribute__((__aligned__(SIZE)));
  char qb;
};

static void qt(void) {
  TESTb("q", sizeof(struct q), offsetof(struct q, qa), offsetof(struct q, qb));
  //         : size :  01234
  //     gcc :   4  : |ab--|
}

//--------------------------------------------------------------------
struct r {
  char ra;
  char rb __attribute__((__aligned__(SIZE)));
};

static void rt(void) {
  TESTb("r", sizeof(struct r), offsetof(struct r, ra), offsetof(struct r, rb));
  //         : size :  012345678
  //     gcc :   8  : |a---b---|
}

//--------------------------------------------------------------------
struct s {
  char sa __attribute__((__aligned__(SIZE)));
  char sb __attribute__((__aligned__(SIZE)));
};

static void st(void) {
  TESTb("s", sizeof(struct s), offsetof(struct s, sa), offsetof(struct s, sb));
  //         : size :  012345678
  //     gcc :   8  : |a---b---|
}

//--------------------------------------------------------------------
struct t {
  char ta;
  char tb[0] __attribute__((__aligned__(SIZE)));
};

static void tt(void) {
  TESTb("t", sizeof(struct t), offsetof(struct t, ta), offsetof(struct t, tb));
  //         : size :  012345678 : comment
  //     gcc :   4  : |a---|     : b at offset 4, outside the struct
  // frama-c :   8  : |a---b---| : b of size 1 instead of 0
}

//--------------------------------------------------------------------

int main(void)
{
  ct();
  dt();
  pt();
  qt();
  rt();
  st();
  tt();
  return 0;
}