aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTed Kremenek <kremenek@apple.com>2012-09-21 06:13:13 +0000
committerTed Kremenek <kremenek@apple.com>2012-09-21 06:13:13 +0000
commitddc0c4814788dda4ef224cd4d22d07154a6ede49 (patch)
tree1f4ad120357f10a7ecc2f87741583ca8043d6418
parent1a6eac865260b2795e3555e569e6a2e990ee73bd (diff)
Simplify getRuntimeDefinition() back to taking no arguments.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@164363 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--include/clang/Analysis/AnalysisContext.h6
-rw-r--r--include/clang/StaticAnalyzer/Core/PathSensitive/CallEvent.h25
-rw-r--r--lib/StaticAnalyzer/Core/CallEvent.cpp18
-rw-r--r--lib/StaticAnalyzer/Core/ExprEngineCallAndReturn.cpp2
4 files changed, 26 insertions, 25 deletions
diff --git a/include/clang/Analysis/AnalysisContext.h b/include/clang/Analysis/AnalysisContext.h
index 0185e8b69a..02b85304db 100644
--- a/include/clang/Analysis/AnalysisContext.h
+++ b/include/clang/Analysis/AnalysisContext.h
@@ -104,6 +104,12 @@ public:
ASTContext &getASTContext() const { return D->getASTContext(); }
const Decl *getDecl() const { return D; }
+ /// Return the AnalysisDeclContextManager (if any) that created
+ /// this AnalysisDeclContext.
+ AnalysisDeclContextManager *getManager() const {
+ return Manager;
+ }
+
/// Return the build options used to construct the CFG.
CFG::BuildOptions &getCFGBuildOptions() {
return cfgBuildOptions;
diff --git a/include/clang/StaticAnalyzer/Core/PathSensitive/CallEvent.h b/include/clang/StaticAnalyzer/Core/PathSensitive/CallEvent.h
index 1b9a33eb0b..bd0511602c 100644
--- a/include/clang/StaticAnalyzer/Core/PathSensitive/CallEvent.h
+++ b/include/clang/StaticAnalyzer/Core/PathSensitive/CallEvent.h
@@ -192,8 +192,7 @@ public:
/// \brief Returns the definition of the function or method that will be
/// called.
- virtual RuntimeDefinition
- getRuntimeDefinition(AnalysisDeclContextManager &M) const = 0;
+ virtual RuntimeDefinition getRuntimeDefinition() const = 0;
/// \brief Returns the expression whose value will be the result of this call.
/// May be null.
@@ -366,13 +365,14 @@ public:
return cast<FunctionDecl>(CallEvent::getDecl());
}
- virtual RuntimeDefinition
- getRuntimeDefinition(AnalysisDeclContextManager &M) const {
+ virtual RuntimeDefinition getRuntimeDefinition() const {
const FunctionDecl *FD = getDecl();
// Note that the AnalysisDeclContext will have the FunctionDecl with
// the definition (if one exists).
if (FD) {
- AnalysisDeclContext *AD = M.getContext(FD);
+ AnalysisDeclContext *AD =
+ getLocationContext()->getAnalysisDeclContext()->
+ getManager()->getContext(FD);
if (AD->getBody())
return RuntimeDefinition(AD->getDecl());
}
@@ -476,8 +476,7 @@ public:
return BR->getDecl();
}
- virtual RuntimeDefinition
- getRuntimeDefinition(AnalysisDeclContextManager &M) const {
+ virtual RuntimeDefinition getRuntimeDefinition() const {
return RuntimeDefinition(getBlockDecl());
}
@@ -519,8 +518,7 @@ public:
virtual const FunctionDecl *getDecl() const;
- virtual RuntimeDefinition
- getRuntimeDefinition(AnalysisDeclContextManager &M) const;
+ virtual RuntimeDefinition getRuntimeDefinition() const;
virtual void getInitialStackFrameContents(const StackFrameContext *CalleeCtx,
BindingsTy &Bindings) const;
@@ -562,8 +560,7 @@ public:
virtual const Expr *getCXXThisExpr() const;
- virtual RuntimeDefinition
- getRuntimeDefinition(AnalysisDeclContextManager &M) const;
+ virtual RuntimeDefinition getRuntimeDefinition() const;
virtual Kind getKind() const { return CE_CXXMember; }
@@ -643,8 +640,7 @@ public:
virtual SourceRange getSourceRange() const { return Location; }
virtual unsigned getNumArgs() const { return 0; }
- virtual RuntimeDefinition
- getRuntimeDefinition(AnalysisDeclContextManager &M) const;
+ virtual RuntimeDefinition getRuntimeDefinition() const;
/// \brief Returns the value of the implicit 'this' object.
virtual SVal getCXXThisVal() const;
@@ -850,8 +846,7 @@ public:
llvm_unreachable("Unknown message kind");
}
- virtual RuntimeDefinition
- getRuntimeDefinition(AnalysisDeclContextManager &M) const;
+ virtual RuntimeDefinition getRuntimeDefinition() const;
virtual void getInitialStackFrameContents(const StackFrameContext *CalleeCtx,
BindingsTy &Bindings) const;
diff --git a/lib/StaticAnalyzer/Core/CallEvent.cpp b/lib/StaticAnalyzer/Core/CallEvent.cpp
index 3743871361..3b4c13471b 100644
--- a/lib/StaticAnalyzer/Core/CallEvent.cpp
+++ b/lib/StaticAnalyzer/Core/CallEvent.cpp
@@ -414,7 +414,7 @@ SVal CXXInstanceCall::getCXXThisVal() const {
}
-RuntimeDefinition CXXInstanceCall::getRuntimeDefinition(AnalysisDeclContextManager &M) const {
+RuntimeDefinition CXXInstanceCall::getRuntimeDefinition() const {
// Do we have a decl at all?
const Decl *D = getDecl();
if (!D)
@@ -423,7 +423,7 @@ RuntimeDefinition CXXInstanceCall::getRuntimeDefinition(AnalysisDeclContextManag
// If the method is non-virtual, we know we can inline it.
const CXXMethodDecl *MD = cast<CXXMethodDecl>(D);
if (!MD->isVirtual())
- return AnyFunctionCall::getRuntimeDefinition(M);
+ return AnyFunctionCall::getRuntimeDefinition();
// Do we know the implicit 'this' object being called?
const MemRegion *R = getCXXThisVal().getAsRegion();
@@ -513,16 +513,16 @@ const Expr *CXXMemberCall::getCXXThisExpr() const {
return getOriginExpr()->getImplicitObjectArgument();
}
-RuntimeDefinition CXXMemberCall::getRuntimeDefinition(AnalysisDeclContextManager &M) const {
+RuntimeDefinition CXXMemberCall::getRuntimeDefinition() const {
// C++11 [expr.call]p1: ...If the selected function is non-virtual, or if the
// id-expression in the class member access expression is a qualified-id,
// that function is called. Otherwise, its final overrider in the dynamic type
// of the object expression is called.
if (const MemberExpr *ME = dyn_cast<MemberExpr>(getOriginExpr()->getCallee()))
if (ME->hasQualifier())
- return AnyFunctionCall::getRuntimeDefinition(M);
+ return AnyFunctionCall::getRuntimeDefinition();
- return CXXInstanceCall::getRuntimeDefinition(M);
+ return CXXInstanceCall::getRuntimeDefinition();
}
@@ -600,13 +600,13 @@ SVal CXXDestructorCall::getCXXThisVal() const {
return UnknownVal();
}
-RuntimeDefinition CXXDestructorCall::getRuntimeDefinition(AnalysisDeclContextManager &M) const {
+RuntimeDefinition CXXDestructorCall::getRuntimeDefinition() const {
// Base destructors are always called non-virtually.
// Skip CXXInstanceCall's devirtualization logic in this case.
if (isBaseDestructor())
- return AnyFunctionCall::getRuntimeDefinition(M);
+ return AnyFunctionCall::getRuntimeDefinition();
- return CXXInstanceCall::getRuntimeDefinition(M);
+ return CXXInstanceCall::getRuntimeDefinition();
}
@@ -790,7 +790,7 @@ bool ObjCMethodCall::canBeOverridenInSubclass(ObjCInterfaceDecl *IDecl,
llvm_unreachable("The while loop should always terminate.");
}
-RuntimeDefinition ObjCMethodCall::getRuntimeDefinition(AnalysisDeclContextManager &M) const {
+RuntimeDefinition ObjCMethodCall::getRuntimeDefinition() const {
const ObjCMessageExpr *E = getOriginExpr();
assert(E);
Selector Sel = E->getSelector();
diff --git a/lib/StaticAnalyzer/Core/ExprEngineCallAndReturn.cpp b/lib/StaticAnalyzer/Core/ExprEngineCallAndReturn.cpp
index 9d4d16c6cd..eb5395e93c 100644
--- a/lib/StaticAnalyzer/Core/ExprEngineCallAndReturn.cpp
+++ b/lib/StaticAnalyzer/Core/ExprEngineCallAndReturn.cpp
@@ -640,7 +640,7 @@ void ExprEngine::defaultEvalCall(NodeBuilder &Bldr, ExplodedNode *Pred,
// If we already tried once and failed, make sure we don't retry later.
State = InlinedFailedState;
} else {
- RuntimeDefinition RD = Call->getRuntimeDefinition(AnalysisDeclContexts);
+ RuntimeDefinition RD = Call->getRuntimeDefinition();
const Decl *D = RD.getDecl();
if (D) {
if (RD.mayHaveOtherDefinitions()) {