diff options
author | Richard Trieu <rtrieu@google.com> | 2014-01-28 23:40:26 +0000 |
---|---|---|
committer | Richard Trieu <rtrieu@google.com> | 2014-01-28 23:40:26 +0000 |
commit | 1e632af0d4989357836a52ff8a0e237e69ca81d3 (patch) | |
tree | 7eb2d52f01f30076c258c7459197eb8a99f24f4d /clang/test | |
parent | a86694ca7a25d299d015c62cd711c46dc8bc563a (diff) | |
download | bcm5719-llvm-1e632af0d4989357836a52ff8a0e237e69ca81d3.tar.gz bcm5719-llvm-1e632af0d4989357836a52ff8a0e237e69ca81d3.zip |
A new conversion warning for when an Objective-C object literal is implicitly
cast into a boolean true value. This warning will catch code like:
if (@0) {}
if (@"foo") {}
llvm-svn: 200356
Diffstat (limited to 'clang/test')
-rw-r--r-- | clang/test/Analysis/objc-string.mm | 2 | ||||
-rw-r--r-- | clang/test/SemaObjCXX/warn-objc-literal-conversion.mm | 74 |
2 files changed, 75 insertions, 1 deletions
diff --git a/clang/test/Analysis/objc-string.mm b/clang/test/Analysis/objc-string.mm index c67ab5e8919..a32b740bba0 100644 --- a/clang/test/Analysis/objc-string.mm +++ b/clang/test/Analysis/objc-string.mm @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -analyze -analyzer-checker=core,debug.ExprInspection -verify %s +// RUN: %clang_cc1 -analyze -analyzer-checker=core,debug.ExprInspection -verify -Wno-objc-literal-conversion %s void clang_analyzer_eval(bool); @class NSString; diff --git a/clang/test/SemaObjCXX/warn-objc-literal-conversion.mm b/clang/test/SemaObjCXX/warn-objc-literal-conversion.mm new file mode 100644 index 00000000000..44645613e31 --- /dev/null +++ b/clang/test/SemaObjCXX/warn-objc-literal-conversion.mm @@ -0,0 +1,74 @@ +// 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) {} +} |