diff options
author | Ted Kremenek <kremenek@apple.com> | 2011-02-12 01:25:04 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2011-02-12 01:25:04 +0000 |
commit | f9eb0aed2c5625827f0a212e740b8a5cce5e35e8 (patch) | |
tree | aa14ee9485464a866592b3bacf649c7a0d6448f9 /test/Analysis | |
parent | 148849a74781ed16c6e6f30366f9aaf1f67b1cb1 (diff) | |
download | clang-f9eb0aed2c5625827f0a212e740b8a5cce5e35e8.tar.gz |
Add test case for <rdar://problem/6888289>.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@125424 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/Analysis')
-rw-r--r-- | test/Analysis/nil-receiver-undefined-larger-than-voidptr-ret-region.m | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/test/Analysis/nil-receiver-undefined-larger-than-voidptr-ret-region.m b/test/Analysis/nil-receiver-undefined-larger-than-voidptr-ret-region.m new file mode 100644 index 0000000000..4c754fb951 --- /dev/null +++ b/test/Analysis/nil-receiver-undefined-larger-than-voidptr-ret-region.m @@ -0,0 +1,38 @@ +// RUN: %clang_cc1 -triple i386-apple-darwin8 -analyze -analyzer-experimental-internal-checks -analyzer-check-objc-mem -analyzer-constraints=range -analyzer-store=region -verify %s + +// <rdar://problem/6888289> - This test case shows that a nil instance +// variable can possibly be initialized by a method. +typedef struct RDar6888289_data { + long data[100]; +} RDar6888289_data; + +@interface RDar6888289 +{ + RDar6888289 *x; +} +- (RDar6888289_data) test; +- (RDar6888289_data) test2; +- (void) invalidate; +- (RDar6888289_data) getData; +@end + +@implementation RDar6888289 +- (RDar6888289_data) test { + if (!x) + [self invalidate]; + return [x getData]; +} +- (RDar6888289_data) test2 { + if (!x) {} + return [x getData]; // expected-warning{{The receiver of message 'getData' is nil and returns a value of type 'RDar6888289_data' that will be garbage}} +} + +- (void) invalidate { + x = self; +} + +- (RDar6888289_data) getData { + return (RDar6888289_data) { 0 }; +} +@end + |