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