summaryrefslogtreecommitdiffstats
path: root/clang/lib/StaticAnalyzer
diff options
context:
space:
mode:
authorGeorge Karpenkov <ekarpenkov@apple.com>2018-11-30 20:43:42 +0000
committerGeorge Karpenkov <ekarpenkov@apple.com>2018-11-30 20:43:42 +0000
commitbe3f4bd36bc95163088b63063e157e54c99a5b53 (patch)
tree8c84e493d7061eae878a199f53d05d9a3aa74cb1 /clang/lib/StaticAnalyzer
parente64fe2abaeaa045af3d36804e3da17efc94ba7de (diff)
downloadbcm5719-llvm-be3f4bd36bc95163088b63063e157e54c99a5b53.tar.gz
bcm5719-llvm-be3f4bd36bc95163088b63063e157e54c99a5b53.zip
Revert "Reverting r347949-r347951 because they broke the test bots."
This reverts commit 5bad6129c012fbf186eb055be49344e790448ecc. Hopefully fixing the issue which was breaking the bots. llvm-svn: 348030
Diffstat (limited to 'clang/lib/StaticAnalyzer')
-rw-r--r--clang/lib/StaticAnalyzer/Core/RetainSummaryManager.cpp28
1 files changed, 17 insertions, 11 deletions
diff --git a/clang/lib/StaticAnalyzer/Core/RetainSummaryManager.cpp b/clang/lib/StaticAnalyzer/Core/RetainSummaryManager.cpp
index fc4544f843d..b42e0c1f64d 100644
--- a/clang/lib/StaticAnalyzer/Core/RetainSummaryManager.cpp
+++ b/clang/lib/StaticAnalyzer/Core/RetainSummaryManager.cpp
@@ -124,10 +124,8 @@ RetainSummaryManager::generateSummary(const FunctionDecl *FD,
}
const IdentifierInfo *II = FD->getIdentifier();
- if (!II)
- return getDefaultSummary();
- StringRef FName = II->getName();
+ StringRef FName = II ? II->getName() : "";
// Strip away preceding '_'. Doing this here will effect all the checks
// down below.
@@ -304,6 +302,12 @@ RetainSummaryManager::generateSummary(const FunctionDecl *FD,
if (FName == "retain")
return getOSSummaryRetainRule(FD);
+
+ if (FName == "free")
+ return getOSSummaryFreeRule(FD);
+
+ if (MD->getOverloadedOperator() == OO_New)
+ return getOSSummaryCreateRule(MD);
}
}
@@ -480,20 +484,14 @@ RetainSummaryManager::getSummary(const CallEvent &Call,
const RetainSummary *Summ;
switch (Call.getKind()) {
case CE_Function:
- Summ = getFunctionSummary(cast<SimpleFunctionCall>(Call).getDecl());
- break;
case CE_CXXMember:
- Summ = getFunctionSummary(cast<CXXMemberCall>(Call).getDecl());
- break;
case CE_CXXMemberOperator:
- Summ = getFunctionSummary(cast<CXXMemberOperatorCall>(Call).getDecl());
- break;
case CE_CXXConstructor:
- Summ = getFunctionSummary(cast<CXXConstructorCall>(Call).getDecl());
+ case CE_CXXAllocator:
+ Summ = getFunctionSummary(cast_or_null<FunctionDecl>(Call.getDecl()));
break;
case CE_Block:
case CE_CXXDestructor:
- case CE_CXXAllocator:
// FIXME: These calls are currently unsupported.
return getPersistentStopSummary();
case CE_ObjCMessage: {
@@ -619,6 +617,14 @@ RetainSummaryManager::getOSSummaryReleaseRule(const FunctionDecl *FD) {
}
const RetainSummary *
+RetainSummaryManager::getOSSummaryFreeRule(const FunctionDecl *FD) {
+ return getPersistentSummary(RetEffect::MakeNoRet(),
+ /*ReceiverEff=*/DoNothing,
+ /*DefaultEff=*/DoNothing,
+ /*ThisEff=*/Dealloc);
+}
+
+const RetainSummary *
RetainSummaryManager::getOSSummaryCreateRule(const FunctionDecl *FD) {
return getPersistentSummary(RetEffect::MakeOwned(RetEffect::OS));
}
OpenPOWER on IntegriCloud