// RUN: %clang_cc1 -fsyntax-only -Wuninitialized -verify %s
voidinit(int*);voidfoo(void){int i =({init(&i);
i;});}voidfoo_bad(void){int i =({int z = i;// expected-warning{{variable 'i' is uninitialized when used within its own initialization}}
init(&i);
i;});}structwidget{int x, y;};voidinit2(struct widget *);voidbar(void){struct widget my_widget =({init2(&my_widget);
my_widget;});struct widget a =(init2(&a), a);}voidbar_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;});}voidbaz(void){struct widget a =({struct widget b =({
b = a;// expected-warning{{variable 'a' is uninitialized when used within its own initialization}}
});
a;});}voidf(void){structwidget *a = ({init2(a);// expected-warning{{variable 'a' is uninitialized when used within its own initialization}}
a;});}