aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/validation/constexpr-init.c
blob: c182fe79cbecb1d71ed3e170086823fd513be7c4 (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
static int a = 1;					// OK
static int b[2] = {1, 1};				// OK
static void c(void) {}

struct A {
	int a;
	int b[2];
};

struct B {
	int c;
	struct A d;
};

static struct B d= {1, {1, {1, 1}}};				// OK
static struct B e= {a, {1, {1, 1}}};				// KO
static struct B f= {1, {a, {1, 1}}};				// KO
static struct B g= {1, {1, {a, 1}}};				// KO
static struct B h= {1, {1, {1, a}}};				// KO
static struct B i= {.c = 1, .d = {.a = 1, .b = {1, 1}}};	// OK
static struct B j= {.c = a, .d = {.a = 1, .b = {1, 1}}};	// KO
static struct B k= {.c = 1, .d = {.a = a, .b = {1, 1}}};	// KO
static struct B l= {.c = 1, .d = {.a = 1, .b = {a, 1}}};	// KO
static struct B m= {.c = 1, .d = {.a = 1, .b = {1, a}}};	// KO

static int n[] = {a, 1};				// KO
static int o[] = {1, a};				// KO
static int p[] = {[0] = a, [1] = 1};			// KO
static int q[] = {[0] = 1, [1] = a};			// KO

static void r(void) {
	int a = 0;
	int b = a;		// OK
}

static void s(void) {
	int a = 1;
	static int b = a;	// KO
}

/*
 * check-name: constexprness static storage object initializer
 * check-command: sparse -Wconstexpr-not-const $file
 *
 * check-error-start
constexpr-init.c:16:21: warning: non-constant initializer for static object
constexpr-init.c:17:25: warning: non-constant initializer for static object
constexpr-init.c:18:29: warning: non-constant initializer for static object
constexpr-init.c:19:32: warning: non-constant initializer for static object
constexpr-init.c:21:26: warning: non-constant initializer for static object
constexpr-init.c:22:40: warning: non-constant initializer for static object
constexpr-init.c:23:49: warning: non-constant initializer for static object
constexpr-init.c:24:52: warning: non-constant initializer for static object
constexpr-init.c:26:19: warning: non-constant initializer for static object
constexpr-init.c:27:22: warning: non-constant initializer for static object
constexpr-init.c:28:25: warning: non-constant initializer for static object
constexpr-init.c:29:34: warning: non-constant initializer for static object
constexpr-init.c:38:24: warning: non-constant initializer for static object
 * check-error-end
 */