A lot of this is overlapping CallOrObjCMessage's hasNonZeroCallbackArg. Should we be using that instead to pre-emptively strike these out?
(There are a couple cases that still matter, like the "NoCopy" ones, but other than that…) On Jun 20, 2012, at 16:35 , Anna Zaks <[email protected]> wrote: > 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); > > > _______________________________________________ > cfe-commits mailing list > [email protected] > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
