[clang] Implement lifetime analysis for lifetime_capture_by(X) (#115921)
[llvm-project.git] / clang / test / SemaObjCXX / warn-objc-literal-conversion.mm
blob44645613e314b968e1844ac9a4b181a80e7d6bd6
1 // RUN: %clang_cc1 -fsyntax-only -verify -Wobjc-literal-conversion %s
3 @class NSString;
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
14 @interface NSArray
15 + (id)arrayWithObjects:(const id [])objects count:(int)cnt;
16 @end
18 @interface NSDictionary
19 + (id)dictionaryWithObjects:(const id [])objects forKeys:(const id [])keys count:(unsigned long)cnt;
20 @end
22 void char_test() {
23   if (@'a') {}
24   // expected-warning@-1{{implicit boolean conversion of Objective-C object literal always evaluates to true}}
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}}
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}}
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}}
56 void string_test() {
57   if (@"asdf") {}
58   // expected-warning@-1{{implicit boolean conversion of Objective-C object literal always evaluates to true}}
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}}
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}}
71 void objc_bool_test () {
72   if (__objc_yes) {}
73   if (__objc_no) {}