// RUN: %clang_cc1 -fsyntax-only -verify -Wobjc-literal-conversion %s @class NSString; @interface NSNumber + (NSNumber *)numberWithChar:(char)value; + (NSNumber *)numberWithInt:(int)value; + (NSNumber *)numberWithLongLong:(long long)value; + (NSNumber *)numberWithFloat:(float)value; + (NSNumber *)numberWithDouble:(double)value; + (NSNumber *)numberWithBool:(bool)value; @end @interface NSArray + (id)arrayWithObjects:(const id [])objects count:(int)cnt; @end @interface NSDictionary + (id)dictionaryWithObjects:(const id [])objects forKeys:(const id [])keys count:(unsigned long)cnt; @end void char_test() { if (@'a') {} // expected-warning@-1{{implicit boolean conversion of Objective-C object literal always evaluates to true}} } void int_test() { if (@12) {} // expected-warning@-1{{implicit boolean conversion of Objective-C object literal always evaluates to true}} if (@-12) {} // expected-warning@-1{{implicit boolean conversion of Objective-C object literal always evaluates to true}} if (@12LL) {} // expected-warning@-1{{implicit boolean conversion of Objective-C object literal always evaluates to true}} if (@-12LL) {} // expected-warning@-1{{implicit boolean conversion of Objective-C object literal always evaluates to true}} } void float_test() { if (@12.55) {} // expected-warning@-1{{implicit boolean conversion of Objective-C object literal always evaluates to true}} if (@-12.55) {} // expected-warning@-1{{implicit boolean conversion of Objective-C object literal always evaluates to true}} if (@12.55F) {} // expected-warning@-1{{implicit boolean conversion of Objective-C object literal always evaluates to true}} if (@-12.55F) {} // expected-warning@-1{{implicit boolean conversion of Objective-C object literal always evaluates to true}} } void bool_test() { if (@true) {} // expected-warning@-1{{implicit boolean conversion of Objective-C object literal always evaluates to true}} if (@false) {} // expected-warning@-1{{implicit boolean conversion of Objective-C object literal always evaluates to true}} } void string_test() { if (@"asdf") {} // expected-warning@-1{{implicit boolean conversion of Objective-C object literal always evaluates to true}} } void array_test() { if (@[ @313, @331, @367, @379 ]) {} // expected-warning@-1{{implicit boolean conversion of Objective-C object literal always evaluates to true}} } void dictionary_test() { if (@{ @0: @0, @1: @1, @2: @1, @3: @3 }) {} // expected-warning@-1{{implicit boolean conversion of Objective-C object literal always evaluates to true}} } void objc_bool_test () { if (__objc_yes) {} if (__objc_no) {} }