aboutsummaryrefslogtreecommitdiff
path: root/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp
diff options
context:
space:
mode:
authorAnna Zaks <ganna@apple.com>2013-03-26 18:57:58 +0000
committerAnna Zaks <ganna@apple.com>2013-03-26 18:57:58 +0000
commit8a660eb1084294a903f6dcc00bf2fa4e3bc92cfc (patch)
tree7ad7bf446b160f3758a89b0695a81ef2ea65674b /lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp
parentdf5f80f8a34e26a4fb77f48f858c7838426a0785 (diff)
[analyzer] Change inlining policy to inline small functions when reanalyzing ObjC methods as top level.
This allows us to better reason about(inline) small wrapper functions. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@178063 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp')
-rw-r--r--lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp25
1 files changed, 11 insertions, 14 deletions
diff --git a/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp b/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp
index f3d545a026..d71e528848 100644
--- a/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp
+++ b/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp
@@ -234,11 +234,11 @@ public:
else if (Mode == AM_Path) {
llvm::errs() << " (Path, ";
switch (IMode) {
- case ExprEngine::Inline_None:
- llvm::errs() << " Inline_None";
+ case ExprEngine::Inline_Minimal:
+ llvm::errs() << " Inline_Minimal";
break;
- case ExprEngine::Inline_All:
- llvm::errs() << " Inline_All";
+ case ExprEngine::Inline_Regular:
+ llvm::errs() << " Inline_Regular";
break;
}
llvm::errs() << ")";
@@ -284,7 +284,8 @@ public:
virtual void HandleTranslationUnit(ASTContext &C);
/// \brief Determine which inlining mode should be used when this function is
- /// analyzed. For example, determines if the callees should be inlined.
+ /// analyzed. This allows to redefine the default inlining policies when
+ /// analyzing a given function.
ExprEngine::InliningModes
getInliningModeForFunction(const Decl *D, SetOfConstDecls Visited);
@@ -299,7 +300,7 @@ public:
/// set of functions which should be considered analyzed after analyzing the
/// given root function.
void HandleCode(Decl *D, AnalysisMode Mode,
- ExprEngine::InliningModes IMode = ExprEngine::Inline_None,
+ ExprEngine::InliningModes IMode = ExprEngine::Inline_Minimal,
SetOfConstDecls *VisitedCallees = 0);
void RunPathSensitiveChecks(Decl *D,
@@ -410,22 +411,18 @@ static bool shouldSkipFunction(const Decl *D,
ExprEngine::InliningModes
AnalysisConsumer::getInliningModeForFunction(const Decl *D,
SetOfConstDecls Visited) {
- ExprEngine::InliningModes HowToInline =
- (Mgr->shouldInlineCall()) ? ExprEngine::Inline_All :
- ExprEngine::Inline_None;
-
// We want to reanalyze all ObjC methods as top level to report Retain
- // Count naming convention errors more aggressively. But we can turn off
+ // Count naming convention errors more aggressively. But we should tune down
// inlining when reanalyzing an already inlined function.
if (Visited.count(D)) {
assert(isa<ObjCMethodDecl>(D) &&
"We are only reanalyzing ObjCMethods.");
const ObjCMethodDecl *ObjCM = cast<ObjCMethodDecl>(D);
if (ObjCM->getMethodFamily() != OMF_init)
- HowToInline = ExprEngine::Inline_None;
+ return ExprEngine::Inline_Minimal;
}
- return HowToInline;
+ return ExprEngine::Inline_Regular;
}
void AnalysisConsumer::HandleDeclsCallGraph(const unsigned LocalTUDeclsSize) {
@@ -595,7 +592,7 @@ void AnalysisConsumer::HandleCode(Decl *D, AnalysisMode Mode,
checkerMgr->runCheckersOnASTBody(D, *Mgr, BR);
if ((Mode & AM_Path) && checkerMgr->hasPathSensitiveCheckers()) {
RunPathSensitiveChecks(D, IMode, VisitedCallees);
- if (IMode != ExprEngine::Inline_None)
+ if (IMode != ExprEngine::Inline_Minimal)
NumFunctionsAnalyzed++;
}
}