[cfe-commits] r158875 - in /cfe/trunk: lib/StaticAnalyzer/Checkers/MallocChecker.cpp test/Analysis/malloc.c test/Analysis/system-header-simulator.h
Anna Zaks
ganna at apple.com
Wed Jun 20 16:35:57 PDT 2012
Author: zaks
Date: Wed Jun 20 18:35:57 2012
New Revision: 158875
URL: http://llvm.org/viewvc/llvm-project?rev=158875&view=rev
Log:
[analyzer] Malloc leak false positive: Allow xpc context to escape.
Modified:
cfe/trunk/lib/StaticAnalyzer/Checkers/MallocChecker.cpp
cfe/trunk/test/Analysis/malloc.c
cfe/trunk/test/Analysis/system-header-simulator.h
Modified: cfe/trunk/lib/StaticAnalyzer/Checkers/MallocChecker.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Checkers/MallocChecker.cpp?rev=158875&r1=158874&r2=158875&view=diff
==============================================================================
--- cfe/trunk/lib/StaticAnalyzer/Checkers/MallocChecker.cpp (original)
+++ cfe/trunk/lib/StaticAnalyzer/Checkers/MallocChecker.cpp Wed Jun 20 18:35:57 2012
@@ -1298,6 +1298,12 @@
if (FName.equals("pthread_setspecific"))
return false;
+ // White list xpc connection context.
+ // TODO: Ensure that the deallocation actually happens, need to reason
+ // about "xpc_connection_set_finalizer_f".
+ if (FName.equals("xpc_connection_set_context"))
+ return false;
+
// White list the 'XXXNoCopy' ObjC functions.
if (FName.endswith("NoCopy")) {
// Look for the deallocator argument. We know that the memory ownership
Modified: cfe/trunk/test/Analysis/malloc.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Analysis/malloc.c?rev=158875&r1=158874&r2=158875&view=diff
==============================================================================
--- cfe/trunk/test/Analysis/malloc.c (original)
+++ cfe/trunk/test/Analysis/malloc.c Wed Jun 20 18:35:57 2012
@@ -974,3 +974,16 @@
// object doesn't escape and it hasn't been freed in this function.
}
+// Allow xpc context to escape. radar://11635258
+// TODO: Would be great if we checked that the finalize_connection_context actually releases it.
+static void finalize_connection_context(void *ctx) {
+ int *context = ctx;
+ free(context);
+}
+void foo (xpc_connection_t peer) {
+ int *ctx = calloc(1, sizeof(int));
+ xpc_connection_set_context(peer, ctx);
+ xpc_connection_set_finalizer_f(peer, finalize_connection_context);
+ xpc_connection_resume(peer);
+}
+
Modified: cfe/trunk/test/Analysis/system-header-simulator.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Analysis/system-header-simulator.h?rev=158875&r1=158874&r2=158875&view=diff
==============================================================================
--- cfe/trunk/test/Analysis/system-header-simulator.h (original)
+++ cfe/trunk/test/Analysis/system-header-simulator.h Wed Jun 20 18:35:57 2012
@@ -53,3 +53,10 @@
CGColorSpaceRef space,
CGBitmapInfo bitmapInfo*/);
void *CGBitmapContextGetData(CGContextRef context);
+
+// Include xpc.
+typedef struct _xpc_connection_s * xpc_connection_t;
+typedef void (*xpc_finalizer_t)(void *value);
+void xpc_connection_set_context(xpc_connection_t connection, void *context);
+void xpc_connection_set_finalizer_f(xpc_connection_t connection, xpc_finalizer_t finalizer);
+void xpc_connection_resume(xpc_connection_t connection);
More information about the cfe-commits
mailing list