aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/validation/compound-sizes.c
blob: d8ccf6052ada6e19cc56516d9cf3a7b0112b71c3 (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
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
// This tests sparse "-vcompound" output.
#define NULL ((void*)0)
typedef unsigned int       uint32_t;
typedef unsigned long long uint64_t;

// Do not list functions.
static int do_nothing(void)
{}

// no:
static inline int zero(void)
{
	return 0 / 1;
}

// no:
struct inventory {
	unsigned char	description[64];
	unsigned char	department[64];
	uint32_t	dept_number;
	uint32_t	item_cost;
	uint64_t	stock_number;
	uint32_t	tally[12];	// per month
};

// no
static struct inventory *get_inv(uint64_t stocknum)
{
	return NULL;
}

// no
union un {
	struct inventory inv;
	unsigned char	bytes[0];
};

// yes
static union un un;

// yes
static struct inventory	inven[100];

// no
typedef struct inventory	inventory_t;

// no
static struct inventory	*invptr;

// yes
static inventory_t		invent[10];

// no
static float		floater;
static double		double_float;

// yes
static float		floats[42];
static double		doubles[84];

// no
int main(void)
{
	// no, these are not global.
	struct inventory inv[10];
	inventory_t	invt[10];
	// what about statics?
	static struct inventory invtop;
	static inventory_t inv_top;
	static uint64_t stocknums[100];

	invptr = get_inv(42000);
	return 0;
}

/*
 * check-name: compound-sizes
 * check-command: sparse -vcompound $file
 * check-assert: _Alignof(long long) == 8
 *
 * check-error-start
compound-sizes.c:39:17: union un static [toplevel] un: compound size 192, alignment 8
compound-sizes.c:42:25: struct inventory static [toplevel] inven[100]: compound size 19200, alignment 8
compound-sizes.c:51:33: struct inventory static [toplevel] [usertype] invent[10]: compound size 1920, alignment 8
compound-sizes.c:58:25: float static [toplevel] floats[42]: compound size 168, alignment 4
compound-sizes.c:59:25: double static [toplevel] doubles[84]: compound size 672, alignment 8
 * check-error-end
 */