1*67e74705SXin Li// RUN: %clang_cc1 -fsyntax-only -verify -Wobjc-literal-conversion %s 2*67e74705SXin Li 3*67e74705SXin Li@class NSString; 4*67e74705SXin Li 5*67e74705SXin Li@interface NSNumber 6*67e74705SXin Li+ (NSNumber *)numberWithChar:(char)value; 7*67e74705SXin Li+ (NSNumber *)numberWithInt:(int)value; 8*67e74705SXin Li+ (NSNumber *)numberWithLongLong:(long long)value; 9*67e74705SXin Li+ (NSNumber *)numberWithFloat:(float)value; 10*67e74705SXin Li+ (NSNumber *)numberWithDouble:(double)value; 11*67e74705SXin Li+ (NSNumber *)numberWithBool:(bool)value; 12*67e74705SXin Li@end 13*67e74705SXin Li 14*67e74705SXin Li@interface NSArray 15*67e74705SXin Li+ (id)arrayWithObjects:(const id [])objects count:(int)cnt; 16*67e74705SXin Li@end 17*67e74705SXin Li 18*67e74705SXin Li@interface NSDictionary 19*67e74705SXin Li+ (id)dictionaryWithObjects:(const id [])objects forKeys:(const id [])keys count:(unsigned long)cnt; 20*67e74705SXin Li@end 21*67e74705SXin Li 22*67e74705SXin Livoid char_test() { 23*67e74705SXin Li if (@'a') {} 24*67e74705SXin Li // expected-warning@-1{{implicit boolean conversion of Objective-C object literal always evaluates to true}} 25*67e74705SXin Li} 26*67e74705SXin Li 27*67e74705SXin Livoid int_test() { 28*67e74705SXin Li if (@12) {} 29*67e74705SXin Li // expected-warning@-1{{implicit boolean conversion of Objective-C object literal always evaluates to true}} 30*67e74705SXin Li if (@-12) {} 31*67e74705SXin Li // expected-warning@-1{{implicit boolean conversion of Objective-C object literal always evaluates to true}} 32*67e74705SXin Li if (@12LL) {} 33*67e74705SXin Li // expected-warning@-1{{implicit boolean conversion of Objective-C object literal always evaluates to true}} 34*67e74705SXin Li if (@-12LL) {} 35*67e74705SXin Li // expected-warning@-1{{implicit boolean conversion of Objective-C object literal always evaluates to true}} 36*67e74705SXin Li} 37*67e74705SXin Li 38*67e74705SXin Livoid float_test() { 39*67e74705SXin Li if (@12.55) {} 40*67e74705SXin Li // expected-warning@-1{{implicit boolean conversion of Objective-C object literal always evaluates to true}} 41*67e74705SXin Li if (@-12.55) {} 42*67e74705SXin Li // expected-warning@-1{{implicit boolean conversion of Objective-C object literal always evaluates to true}} 43*67e74705SXin Li if (@12.55F) {} 44*67e74705SXin Li // expected-warning@-1{{implicit boolean conversion of Objective-C object literal always evaluates to true}} 45*67e74705SXin Li if (@-12.55F) {} 46*67e74705SXin Li // expected-warning@-1{{implicit boolean conversion of Objective-C object literal always evaluates to true}} 47*67e74705SXin Li} 48*67e74705SXin Li 49*67e74705SXin Livoid bool_test() { 50*67e74705SXin Li if (@true) {} 51*67e74705SXin Li // expected-warning@-1{{implicit boolean conversion of Objective-C object literal always evaluates to true}} 52*67e74705SXin Li if (@false) {} 53*67e74705SXin Li // expected-warning@-1{{implicit boolean conversion of Objective-C object literal always evaluates to true}} 54*67e74705SXin Li} 55*67e74705SXin Li 56*67e74705SXin Livoid string_test() { 57*67e74705SXin Li if (@"asdf") {} 58*67e74705SXin Li // expected-warning@-1{{implicit boolean conversion of Objective-C object literal always evaluates to true}} 59*67e74705SXin Li} 60*67e74705SXin Li 61*67e74705SXin Livoid array_test() { 62*67e74705SXin Li if (@[ @313, @331, @367, @379 ]) {} 63*67e74705SXin Li // expected-warning@-1{{implicit boolean conversion of Objective-C object literal always evaluates to true}} 64*67e74705SXin Li} 65*67e74705SXin Li 66*67e74705SXin Livoid dictionary_test() { 67*67e74705SXin Li if (@{ @0: @0, @1: @1, @2: @1, @3: @3 }) {} 68*67e74705SXin Li // expected-warning@-1{{implicit boolean conversion of Objective-C object literal always evaluates to true}} 69*67e74705SXin Li} 70*67e74705SXin Li 71*67e74705SXin Livoid objc_bool_test () { 72*67e74705SXin Li if (__objc_yes) {} 73*67e74705SXin Li if (__objc_no) {} 74*67e74705SXin Li} 75