From 45d71a271554ff183629e7451ada8f440a20654c Mon Sep 17 00:00:00 2001 From: Jordan Rose Date: Fri, 21 Feb 2014 00:18:31 +0000 Subject: [analyzer] Fix a bug in IdenticalExprChecker concerning while loops. Somehow both Daniel and I missed the fact that while loops are only identical if they have identical bodies. Patch by Daniel Fahlgren! llvm-svn: 201829 --- clang/lib/StaticAnalyzer/Checkers/IdenticalExprChecker.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'clang/lib/StaticAnalyzer/Checkers/IdenticalExprChecker.cpp') diff --git a/clang/lib/StaticAnalyzer/Checkers/IdenticalExprChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/IdenticalExprChecker.cpp index a76dff120be..6abfc14877e 100644 --- a/clang/lib/StaticAnalyzer/Checkers/IdenticalExprChecker.cpp +++ b/clang/lib/StaticAnalyzer/Checkers/IdenticalExprChecker.cpp @@ -361,8 +361,13 @@ static bool isIdenticalStmt(const ASTContext &Ctx, const Stmt *Stmt1, const WhileStmt *WStmt1 = cast(Stmt1); const WhileStmt *WStmt2 = cast(Stmt2); - return isIdenticalStmt(Ctx, WStmt1->getCond(), WStmt2->getCond(), - IgnoreSideEffects); + if (!isIdenticalStmt(Ctx, WStmt1->getCond(), WStmt2->getCond(), + IgnoreSideEffects)) + return false; + if (!isIdenticalStmt(Ctx, WStmt1->getBody(), WStmt2->getBody(), + IgnoreSideEffects)) + return false; + return true; } case Stmt::IfStmtClass: { const IfStmt *IStmt1 = cast(Stmt1); -- cgit v1.2.3