From cef621d094c7bd4a7abaca75e448c311ff5af926 Mon Sep 17 00:00:00 2001 From: Shuai Wang Date: Sat, 15 Sep 2018 21:38:18 +0000 Subject: [PATCH] [NFC] cosmetic tweaks to ExprMutationAnalyzer to be more consistent especially considering future changes. llvm-svn: 342340 --- .../Analysis/Analyses/ExprMutationAnalyzer.h | 8 +++--- clang/lib/Analysis/ExprMutationAnalyzer.cpp | 25 +++++++++---------- 2 files changed, 17 insertions(+), 16 deletions(-) diff --git a/clang/include/clang/Analysis/Analyses/ExprMutationAnalyzer.h b/clang/include/clang/Analysis/Analyses/ExprMutationAnalyzer.h index 42d5b29aa86b..f75157d05001 100644 --- a/clang/include/clang/Analysis/Analyses/ExprMutationAnalyzer.h +++ b/clang/include/clang/Analysis/Analyses/ExprMutationAnalyzer.h @@ -26,12 +26,14 @@ public: ExprMutationAnalyzer(const Stmt &Stm, ASTContext &Context) : Stm(Stm), Context(Context) {} - bool isMutated(const Decl *Dec) { return findDeclMutation(Dec) != nullptr; } bool isMutated(const Expr *Exp) { return findMutation(Exp) != nullptr; } + bool isMutated(const Decl *Dec) { return findMutation(Dec) != nullptr; } const Stmt *findMutation(const Expr *Exp); - const Stmt *findDeclMutation(const Decl *Dec); + const Stmt *findMutation(const Decl *Dec); private: + using ResultMap = llvm::DenseMap; + bool isUnevaluated(const Expr *Exp); const Stmt *findExprMutation(ArrayRef Matches); @@ -50,7 +52,7 @@ private: llvm::DenseMap> FuncParmAnalyzer; - llvm::DenseMap Results; + ResultMap Results; }; // A convenient wrapper around ExprMutationAnalyzer for analyzing function diff --git a/clang/lib/Analysis/ExprMutationAnalyzer.cpp b/clang/lib/Analysis/ExprMutationAnalyzer.cpp index 678eeebab2de..f8ede47bda80 100644 --- a/clang/lib/Analysis/ExprMutationAnalyzer.cpp +++ b/clang/lib/Analysis/ExprMutationAnalyzer.cpp @@ -131,13 +131,13 @@ ExprMutationAnalyzer::findExprMutation(ArrayRef Matches) { const Stmt * ExprMutationAnalyzer::findDeclMutation(ArrayRef Matches) { for (const auto &DeclNodes : Matches) { - if (const Stmt *S = findDeclMutation(DeclNodes.getNodeAs("decl"))) + if (const Stmt *S = findMutation(DeclNodes.getNodeAs("decl"))) return S; } return nullptr; } -const Stmt *ExprMutationAnalyzer::findDeclMutation(const Decl *Dec) { +const Stmt *ExprMutationAnalyzer::findMutation(const Decl *Dec) { const auto Refs = match( findAll(declRefExpr(to(equalsNode(Dec))).bind("expr")), Stm, Context); for (const auto &RefNodes : Refs) { @@ -280,15 +280,14 @@ const Stmt *ExprMutationAnalyzer::findReferenceMutation(const Expr *Exp) { // Follow non-const reference returned by `operator*()` of move-only classes. // These are typically smart pointers with unique ownership so we treat // mutation of pointee as mutation of the smart pointer itself. - const auto Ref = match( - findAll(cxxOperatorCallExpr( - hasOverloadedOperatorName("*"), - callee(cxxMethodDecl(ofClass(isMoveOnly()), - returns(hasUnqualifiedDesugaredType( - nonConstReferenceType())))), - argumentCountIs(1), hasArgument(0, equalsNode(Exp))) - .bind("expr")), - Stm, Context); + const auto Ref = + match(findAll(cxxOperatorCallExpr( + hasOverloadedOperatorName("*"), + callee(cxxMethodDecl(ofClass(isMoveOnly()), + returns(nonConstReferenceType()))), + argumentCountIs(1), hasArgument(0, equalsNode(Exp))) + .bind("expr")), + Stm, Context); if (const Stmt *S = findExprMutation(Ref)) return S; @@ -370,7 +369,7 @@ FunctionParmMutationAnalyzer::FunctionParmMutationAnalyzer( for (const ParmVarDecl *Parm : Ctor->parameters()) { if (Results.find(Parm) != Results.end()) continue; - if (const Stmt *S = InitAnalyzer.findDeclMutation(Parm)) + if (const Stmt *S = InitAnalyzer.findMutation(Parm)) Results[Parm] = S; } } @@ -383,7 +382,7 @@ FunctionParmMutationAnalyzer::findMutation(const ParmVarDecl *Parm) { if (Memoized != Results.end()) return Memoized->second; - if (const Stmt *S = BodyAnalyzer.findDeclMutation(Parm)) + if (const Stmt *S = BodyAnalyzer.findMutation(Parm)) return Results[Parm] = S; return Results[Parm] = nullptr;