summaryrefslogtreecommitdiffstats
path: root/clang
diff options
context:
space:
mode:
authorAnna Zaks <ganna@apple.com>2012-04-06 01:00:47 +0000
committerAnna Zaks <ganna@apple.com>2012-04-06 01:00:47 +0000
commite8628c5bc731ce04cd6f918733e1b83ae269a20c (patch)
treecbf6e4212322eeb95f01eb39d6eaacac950dc8ec /clang
parentf1548d4f740b47ade23911ed3fbd4e16c2b53089 (diff)
downloadbcm5719-llvm-e8628c5bc731ce04cd6f918733e1b83ae269a20c.tar.gz
bcm5719-llvm-e8628c5bc731ce04cd6f918733e1b83ae269a20c.zip
[analyzer]Fix false positive: pointer might escape through CG*WithData.
llvm-svn: 154156
Diffstat (limited to 'clang')
-rw-r--r--clang/include/clang/StaticAnalyzer/Core/PathSensitive/ObjCMessage.h1
-rw-r--r--clang/test/Analysis/malloc.mm18
2 files changed, 19 insertions, 0 deletions
diff --git a/clang/include/clang/StaticAnalyzer/Core/PathSensitive/ObjCMessage.h b/clang/include/clang/StaticAnalyzer/Core/PathSensitive/ObjCMessage.h
index 33934af10cc..d8aec0991d9 100644
--- a/clang/include/clang/StaticAnalyzer/Core/PathSensitive/ObjCMessage.h
+++ b/clang/include/clang/StaticAnalyzer/Core/PathSensitive/ObjCMessage.h
@@ -278,6 +278,7 @@ public:
if (StrInStrNoCase(FName, "InsertValue") != StringRef::npos||
StrInStrNoCase(FName, "AddValue") != StringRef::npos ||
StrInStrNoCase(FName, "SetValue") != StringRef::npos ||
+ StrInStrNoCase(FName, "WithData") != StringRef::npos ||
StrInStrNoCase(FName, "AppendValue") != StringRef::npos||
StrInStrNoCase(FName, "SetAttribute") != StringRef::npos) {
return true;
diff --git a/clang/test/Analysis/malloc.mm b/clang/test/Analysis/malloc.mm
index d2409ac1609..3515a4f99af 100644
--- a/clang/test/Analysis/malloc.mm
+++ b/clang/test/Analysis/malloc.mm
@@ -136,3 +136,21 @@ static inline void radar11111210(OSQueueHead *pool) {
OSAtomicEnqueue(pool, newItem, 4);
}
+// Pointer might escape through CGDataProviderCreateWithData (radar://11187558).
+typedef struct CGDataProvider *CGDataProviderRef;
+typedef void (*CGDataProviderReleaseDataCallback)(void *info, const void *data,
+ size_t size);
+extern CGDataProviderRef CGDataProviderCreateWithData(void *info,
+ const void *data, size_t size,
+ CGDataProviderReleaseDataCallback releaseData)
+ __attribute__((visibility("default")));
+void *calloc(size_t, size_t);
+
+static void releaseDataCallback (void *info, const void *data, size_t size) {
+#pragma unused (info, size)
+ free((void*)data);
+}
+void testCGDataProviderCreateWithData() {
+ void* b = calloc(8, 8);
+ CGDataProviderRef p = CGDataProviderCreateWithData(0, b, 8*8, releaseDataCallback);
+} \ No newline at end of file
OpenPOWER on IntegriCloud