summaryrefslogtreecommitdiffstats
path: root/clang/test/Analysis/system-header-simulator.h
diff options
context:
space:
mode:
authorAnna Zaks <ganna@apple.com>2012-02-23 01:05:27 +0000
committerAnna Zaks <ganna@apple.com>2012-02-23 01:05:27 +0000
commit07de9c12f398d65d124cf1bdc0c9465a7d944e47 (patch)
tree122ebe83f19e7f0b1a1aca4334c6453d78e32ab8 /clang/test/Analysis/system-header-simulator.h
parent8634d73e17cfab25cc77f9dc6d80bb84724a2dc7 (diff)
downloadbcm5719-llvm-07de9c12f398d65d124cf1bdc0c9465a7d944e47.tar.gz
bcm5719-llvm-07de9c12f398d65d124cf1bdc0c9465a7d944e47.zip
[analyzer] Invalidate the region passed to pthread_setspecific() call.
Make this call an exception in ExprEngine::invalidateArguments: 'int pthread_setspecific(ptheread_key k, const void *)' stores a value into thread local storage. The value can later be retrieved with 'void *ptheread_getspecific(pthread_key)'. So even thought the parameter is 'const void *', the region escapes through the call. (Here we just blacklist the call in the ExprEngine's default logic. Another option would be to add a checker which evaluates the call and triggers the call to invalidate regions.) Teach the Malloc Checker, which treats all system calls as safe about the API. llvm-svn: 151220
Diffstat (limited to 'clang/test/Analysis/system-header-simulator.h')
-rw-r--r--clang/test/Analysis/system-header-simulator.h4
1 files changed, 4 insertions, 0 deletions
diff --git a/clang/test/Analysis/system-header-simulator.h b/clang/test/Analysis/system-header-simulator.h
index 1dd9c5b6074..472cb5a6160 100644
--- a/clang/test/Analysis/system-header-simulator.h
+++ b/clang/test/Analysis/system-header-simulator.h
@@ -11,3 +11,7 @@ unsigned long strlen(const char *);
char *strcpy(char *restrict s1, const char *restrict s2);
+typedef unsigned long __darwin_pthread_key_t;
+typedef __darwin_pthread_key_t pthread_key_t;
+int pthread_setspecific(pthread_key_t ,
+ const void *);
OpenPOWER on IntegriCloud