diff options
author | Ted Kremenek <kremenek@apple.com> | 2012-02-28 00:56:05 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2012-02-28 00:56:05 +0000 |
commit | 3bc5372fae18be64a7e482f0167f4b4a215dea44 (patch) | |
tree | 1dc39c5d8984463a7ae27e350298c610ee1ee345 /clang/test | |
parent | 8c4729fd4457e73d563f5306bac42f82353dcbd0 (diff) | |
download | bcm5719-llvm-3bc5372fae18be64a7e482f0167f4b4a215dea44.tar.gz bcm5719-llvm-3bc5372fae18be64a7e482f0167f4b4a215dea44.zip |
[analyzer] teach analyzer about ObjC literals, thus trimming out a false positive with the malloc() checker involving
comparing literal addresses to nil.
Fixes <rdar://problem/10579586>
llvm-svn: 151602
Diffstat (limited to 'clang/test')
-rw-r--r-- | clang/test/Analysis/malloc.m | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/clang/test/Analysis/malloc.m b/clang/test/Analysis/malloc.m new file mode 100644 index 00000000000..6451dbc9839 --- /dev/null +++ b/clang/test/Analysis/malloc.m @@ -0,0 +1,37 @@ +// RUN: %clang_cc1 -analyze -analyzer-checker=core,unix.Malloc -analyzer-store=region -verify %s +#include "system-header-simulator-objc.h" + +@class NSString; +typedef __typeof(sizeof(int)) size_t; +void *malloc(size_t); +void free(void *); + +// RDar10579586 - Test use of malloc() with Objective-C string literal as a +// test condition. Not really a malloc() issue, but this also exercises +// the check that malloc() returns uninitialized memory. +@interface RDar10579586 +struct rdar0579586_str { + char str_c; +}; +@end + +void rdar10579586(char x); + +@implementation RDar10579586 ++ (NSString *)foobar +{ + struct rdar0579586_str *buffer = ((void*)0); + NSString *error = ((void*)0); + + if ((buffer = malloc(sizeof(struct rdar0579586_str))) == ((void*)0)) + error = @"buffer allocation failure"; + + if (error != ((void*)0)) + return error; + + rdar10579586(buffer->str_c); // expected-warning {{Function call argument is an uninitialized value}} + free(buffer); + return ((void*)0); +} +@end + |