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 | |