warn-uninitialized-statement-expression.c
1.15 KB
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
// RUN: %clang_cc1 -fsyntax-only -Wuninitialized -verify %s
void init(int *);
void foo(void) {
int i = ({
init(&i);
i;
});
}
void foo_bad(void) {
int i = ({
int z = i; // expected-warning{{variable 'i' is uninitialized when used within its own initialization}}
init(&i);
i;
});
}
struct widget {
int x, y;
};
void init2(struct widget *);
void bar(void) {
struct widget my_widget = ({
init2(&my_widget);
my_widget;
});
struct widget a = (init2(&a), a);
}
void bar_bad(void) {
struct widget my_widget = ({
struct widget z = my_widget; // expected-warning{{variable 'my_widget' is uninitialized when used within its own initialization}}
int x = my_widget.x; //FIXME: There should be an uninitialized warning here
init2(&my_widget);
my_widget;
});
}
void baz(void) {
struct widget a = ({
struct widget b = ({
b = a; // expected-warning{{variable 'a' is uninitialized when used within its own initialization}}
});
a;
});
}
void f(void) {
struct widget *a = ({
init2(a); // expected-warning{{variable 'a' is uninitialized when used within its own initialization}}
a;
});
}