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;
});
}
|