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 22void char_test() { 23 if (@'a') {} 24 // expected-warning@-1{{implicit boolean conversion of Objective-C object literal always evaluates to true}} 25} 26 27void 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 38void 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 49void 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 56void string_test() { 57 if (@"asdf") {} 58 // expected-warning@-1{{implicit boolean conversion of Objective-C object literal always evaluates to true}} 59} 60 61void 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 66void 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 71void objc_bool_test () { 72 if (__objc_yes) {} 73 if (__objc_no) {} 74} 75