1*67e74705SXin Li// RUN: %clang_cc1 -fsyntax-only -Wuninitialized -fsyntax-only -fblocks %s -verify 2*67e74705SXin Li 3*67e74705SXin Li#include <stdarg.h> 4*67e74705SXin Li 5*67e74705SXin Li@interface NSObject {} @end 6*67e74705SXin Li@class NSString; 7*67e74705SXin Li 8*67e74705SXin Li@interface NSException 9*67e74705SXin Li+ (void)raise:(NSString *)name format:(NSString *)format, ...; 10*67e74705SXin Li+ (void)raise:(NSString *)name format:(NSString *)format arguments:(va_list)argList; 11*67e74705SXin Li- (void)raise; 12*67e74705SXin Li@end 13*67e74705SXin Li 14*67e74705SXin Li// Duplicated from uninit-variables.c. 15*67e74705SXin Li// Test just to ensure the analysis is working. 16*67e74705SXin Liint test1() { 17*67e74705SXin Li int x; // expected-note{{initialize the variable 'x' to silence this warning}} 18*67e74705SXin Li return x; // expected-warning{{variable 'x' is uninitialized when used here}} 19*67e74705SXin Li} 20*67e74705SXin Li 21*67e74705SXin Li// Test ObjC fast enumeration. 22*67e74705SXin Livoid test2() { 23*67e74705SXin Li id collection = 0; 24*67e74705SXin Li for (id obj in collection) { 25*67e74705SXin Li if (0 == obj) // no-warning 26*67e74705SXin Li break; 27*67e74705SXin Li } 28*67e74705SXin Li} 29*67e74705SXin Li 30*67e74705SXin Livoid test3() { 31*67e74705SXin Li id collection = 0; 32*67e74705SXin Li id obj; 33*67e74705SXin Li for (obj in collection) { // no-warning 34*67e74705SXin Li if (0 == obj) // no-warning 35*67e74705SXin Li break; 36*67e74705SXin Li } 37*67e74705SXin Li} 38*67e74705SXin Li 39*67e74705SXin Liint test_abort_on_exceptions(int y, NSException *e, NSString *s, int *z, ...) { 40*67e74705SXin Li int x; // expected-note {{initialize the variable 'x' to silence this warning}} 41*67e74705SXin Li if (y == 1) { 42*67e74705SXin Li va_list alist; 43*67e74705SXin Li va_start(alist, z); 44*67e74705SXin Li [NSException raise:@"Blah" format:@"Blah %@" arguments:alist]; 45*67e74705SXin Li return x; 46*67e74705SXin Li } 47*67e74705SXin Li else if (y == 2) { 48*67e74705SXin Li [NSException raise:@"Blah" format:s]; 49*67e74705SXin Li return x; 50*67e74705SXin Li } 51*67e74705SXin Li else if (y == 3) { 52*67e74705SXin Li [e raise]; 53*67e74705SXin Li return x; 54*67e74705SXin Li } 55*67e74705SXin Li return x; // expected-warning {{variable 'x' is uninitialized when used here}} 56*67e74705SXin Li} 57