| // RUN: %clang_cc1 -fsyntax-only -Wuninitialized -fsyntax-only -fblocks %s -verify | 
 |  | 
 | #include <stdarg.h> | 
 |  | 
 | @interface NSObject {} @end | 
 | @class NSString; | 
 |  | 
 | @interface NSException | 
 | + (void)raise:(NSString *)name format:(NSString *)format, ...; | 
 | + (void)raise:(NSString *)name format:(NSString *)format arguments:(va_list)argList; | 
 | - (void)raise; | 
 | @end | 
 |  | 
 | // Duplicated from uninit-variables.c. | 
 | // Test just to ensure the analysis is working. | 
 | int test1() { | 
 |   int x; // expected-note{{initialize the variable 'x' to silence this warning}} | 
 |   return x; // expected-warning{{variable 'x' is uninitialized when used here}} | 
 | } | 
 |  | 
 | // Test ObjC fast enumeration. | 
 | void test2() { | 
 |   id collection = 0; | 
 |   for (id obj in collection) { | 
 |     if (0 == obj) // no-warning | 
 |       break; | 
 |   } | 
 | } | 
 |  | 
 | void test3() { | 
 |   id collection = 0; | 
 |   id obj; | 
 |   for (obj in collection) { // no-warning | 
 |     if (0 == obj) // no-warning | 
 |       break; | 
 |   } | 
 | } | 
 |  | 
 | int test_abort_on_exceptions(int y, NSException *e, NSString *s, int *z, ...) { | 
 |   int x; // expected-note {{initialize the variable 'x' to silence this warning}} | 
 |   if (y == 1) { | 
 |     va_list alist; | 
 |     va_start(alist, z); | 
 |     [NSException raise:@"Blah" format:@"Blah %@" arguments:alist]; | 
 |     return x; | 
 |   } | 
 |   else if (y == 2) { | 
 | 	[NSException raise:@"Blah" format:s]; | 
 | 	return x;   | 
 |   } | 
 |   else if (y == 3) { | 
 | 	[e raise]; | 
 | 	return x; | 
 |   } | 
 |   return x; // expected-warning {{variable 'x' is uninitialized when used here}} | 
 | } |