summaryrefslogtreecommitdiffstats
path: root/clang/lib
diff options
context:
space:
mode:
authorTed Kremenek <kremenek@apple.com>2014-10-19 07:30:55 +0000
committerTed Kremenek <kremenek@apple.com>2014-10-19 07:30:55 +0000
commit0c28bc20da65169dac6133be5e230b7c5c0914c1 (patch)
treeab2cb8d30a98e28b7164258e7605290c3967f20b /clang/lib
parent11751538678a971a5d261eb0b3af3eafc2361942 (diff)
downloadbcm5719-llvm-0c28bc20da65169dac6133be5e230b7c5c0914c1.tar.gz
bcm5719-llvm-0c28bc20da65169dac6133be5e230b7c5c0914c1.zip
[analyzer] Tweak MallocSizeOfChecker to not warn when using sizeof(void*) to allocate a bunch of any pointer type.
This suppresses a common false positive when analyzing libc++. Along the way, introduce some tests to show this checker actually works with C++ static_cast<>. llvm-svn: 220160
Diffstat (limited to 'clang/lib')
-rw-r--r--clang/lib/StaticAnalyzer/Checkers/MallocSizeofChecker.cpp4
1 files changed, 4 insertions, 0 deletions
diff --git a/clang/lib/StaticAnalyzer/Checkers/MallocSizeofChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/MallocSizeofChecker.cpp
index 4a50d936287..296aec66805 100644
--- a/clang/lib/StaticAnalyzer/Checkers/MallocSizeofChecker.cpp
+++ b/clang/lib/StaticAnalyzer/Checkers/MallocSizeofChecker.cpp
@@ -137,6 +137,10 @@ public:
// Determine if the pointee and sizeof types are compatible. Here
// we ignore constness of pointer types.
static bool typesCompatible(ASTContext &C, QualType A, QualType B) {
+ // sizeof(void*) is compatible with any other pointer.
+ if (B->isVoidPointerType() && A->getAs<PointerType>())
+ return true;
+
while (true) {
A = A.getCanonicalType();
B = B.getCanonicalType();
OpenPOWER on IntegriCloud