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