[analyzer] Fix transitions in check::PreStmt<MemberExpr> checker callback.

No in-tree checkers use this callback so far, hence no tests. But better fix
this now than remember to fix this when the checkers actually appear.

Patch by Henry Wong!

Differential Revision: https://reviews.llvm.org/D42785

llvm-svn: 324053
This commit is contained in:
Artem Dergachev
2018-02-02 02:23:37 +00:00
parent fb4acffbd1
commit 74db26ff14

View File

@@ -2251,16 +2251,15 @@ void ExprEngine::VisitMemberExpr(const MemberExpr *M, ExplodedNode *Pred,
ExplodedNodeSet CheckedSet;
getCheckerManager().runCheckersForPreStmt(CheckedSet, Pred, M, *this);
ExplodedNodeSet EvalSet;
ValueDecl *Member = M->getMemberDecl();
ExplodedNodeSet EvalSet;
ValueDecl *Member = M->getMemberDecl();
// Handle static member variables and enum constants accessed via
// member syntax.
if (isa<VarDecl>(Member) || isa<EnumConstantDecl>(Member)) {
ExplodedNodeSet Dst;
if (isa<VarDecl>(Member) || isa<EnumConstantDecl>(Member)) {
for (ExplodedNodeSet::iterator I = CheckedSet.begin(), E = CheckedSet.end();
I != E; ++I) {
VisitCommonDeclRefExpr(M, Member, Pred, EvalSet);
VisitCommonDeclRefExpr(M, Member, *I, EvalSet);
}
} else {
StmtNodeBuilder Bldr(CheckedSet, EvalSet, *currBldrCtx);