aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/validation/packed-bitfield0.c
blob: 2e20916176f16de74d3c4438d12103b05942ea85 (plain)
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
#define alignof(X)	__alignof__(X)
#define __packed	__attribute__((packed))

struct sa {
	int a:7;
	int c:10;
	int b:2;
} __packed;
_Static_assert(alignof(struct sa) == 1, "alignof(struct sa)");
_Static_assert( sizeof(struct sa) == 3,  "sizeof(struct sa)");


static int get_size(void)
{
	return sizeof(struct sa);
}

static void chk_align(struct sa sa, struct sa *p)
{
	_Static_assert(alignof(sa) == 1, "alignof(sa)");
	_Static_assert(alignof(*p) == 1, "alignof(*p)");
}

static int fp0(struct sa *sa)
{
	return sa->c;
}

static int fpx(struct sa *sa, int idx)
{
	return sa[idx].c;
}

static int fglobal(void)
{
	extern struct sa g;
	return g.c;
}

static struct sa l;
static int flocal(void)
{
	return l.c;
}


int main(void)
{
	extern void fun(struct sa *);
	struct sa sa = { 0 };

	fun(&sa);
	return 0;
}

/*
 * check-name: packed-bitfield0
 */