Home | History | Annotate | Download | only in SemaObjCXX
      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