57 lines
1.2 KiB
C
57 lines
1.2 KiB
C
|
// 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;
|
||
|
});
|
||
|
}
|