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