| // 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) {} |
| } |