From: Ted Kremenek Date: Fri, 25 Jan 2008 23:22:27 +0000 (+0000) Subject: Reverting r46361 (http://llvm.org/viewvc/llvm-project?rev=46361&view=rev) until X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=e2dcd783a04f654c50bd8b13fb08a440afbd67e7;p=clang Reverting r46361 (http://llvm.org/viewvc/llvm-project?rev=46361&view=rev) until I diagnose the source of the failures it causes in the test suite. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@46376 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/AST/CFG.cpp b/AST/CFG.cpp index 15e8f407fe..7a13ac187a 100644 --- a/AST/CFG.cpp +++ b/AST/CFG.cpp @@ -991,53 +991,26 @@ namespace { typedef llvm::DenseMap BlkExprMapTy; } -static void FindSubExprAssignments(Stmt* S, llvm::SmallPtrSet& Set) { - for (Stmt::child_iterator I=S->child_begin(), E=S->child_end(); I!=E; ++I) { - if (BinaryOperator* B = dyn_cast(*I)) - if (B->isAssignmentOp()) Set.insert(B); - - FindSubExprAssignments(*I, Set); - } -} - static BlkExprMapTy* PopulateBlkExprMap(CFG& cfg) { BlkExprMapTy* M = new BlkExprMapTy(); - // Look for assignments that are used as subexpressions. These are the - // only assignments that we want to register as a block-level expression. - llvm::SmallPtrSet SubExprAssignments; - for (CFG::iterator I=cfg.begin(), E=cfg.end(); I != E; ++I) for (CFGBlock::iterator BI=I->begin(), EI=I->end(); BI != EI; ++BI) - FindSubExprAssignments(*BI, SubExprAssignments); + if (const Expr* E = dyn_cast(*BI)) { + unsigned x = M->size(); + (*M)[E] = x; - // Iterate over the statements again on identify the Expr* and Stmt* at - // the block-level that are block-level expressions. - for (CFG::iterator I=cfg.begin(), E=cfg.end(); I != E; ++I) - for (CFGBlock::iterator BI=I->begin(), EI=I->end(); BI != EI; ++BI) - if (Expr* E = dyn_cast(*BI)) { - - if (BinaryOperator* B = dyn_cast(E)) { - // Assignment expressions that are not nested within another - // expression are really "statements" whose value is never - // used by another expression. - if (B->isAssignmentOp() && !SubExprAssignments.count(E)) - continue; - } - else if (const StmtExpr* S = dyn_cast(E)) { - // Special handling for statement expressions. The last statement - // in the statement expression is also a block-level expr. + // Special handling for statement expressions. The last statement + // in the statement expression is also a block-level expr. + if (const StmtExpr* S = dyn_cast(E)) { const CompoundStmt* C = S->getSubStmt(); if (!C->body_empty()) { - unsigned x = M->size(); + x = M->size(); (*M)[C->body_back()] = x; } } - - unsigned x = M->size(); - (*M)[E] = x; } - + return M; }