diff options
| author | Chris Wailes <chris.wailes@gmail.com> | 2013-10-24 14:28:17 +0000 |
|---|---|---|
| committer | Chris Wailes <chris.wailes@gmail.com> | 2013-10-24 14:28:17 +0000 |
| commit | 44930884b741731818bc4fbbb6d0d1139013ad12 (patch) | |
| tree | ce7f7fa430d4da17374b17a8dfaa29804a934eeb /clang/lib | |
| parent | 0b59a430e58ad5e800c8b58222da9d974dc22f17 (diff) | |
| download | bcm5719-llvm-44930884b741731818bc4fbbb6d0d1139013ad12.tar.gz bcm5719-llvm-44930884b741731818bc4fbbb6d0d1139013ad12.zip | |
Replaced duplicate code with calls to forwardInfo.
Also made move constructor handling safer.
llvm-svn: 193347
Diffstat (limited to 'clang/lib')
| -rw-r--r-- | clang/lib/Analysis/Consumed.cpp | 44 |
1 files changed, 17 insertions, 27 deletions
diff --git a/clang/lib/Analysis/Consumed.cpp b/clang/lib/Analysis/Consumed.cpp index ed806ce6711..c1902718a8f 100644 --- a/clang/lib/Analysis/Consumed.cpp +++ b/clang/lib/Analysis/Consumed.cpp @@ -592,12 +592,7 @@ void ConsumedStmtVisitor::VisitCallExpr(const CallExpr *Call) { // Special case for the std::move function. // TODO: Make this more specific. (Deferred) if (FunDecl->getNameAsString() == "move") { - InfoEntry Entry = PropagationMap.find(Call->getArg(0)); - - if (Entry != PropagationMap.end()) { - PropagationMap.insert(PairType(Call, Entry->second)); - } - + forwardInfo(Call->getArg(0), Call); return; } @@ -690,26 +685,25 @@ void ConsumedStmtVisitor::VisitCXXConstructExpr(const CXXConstructExpr *Call) { } else if (Constructor->isMoveConstructor()) { - PropagationInfo PInfo = - PropagationMap.find(Call->getArg(0))->second; + InfoEntry Entry = PropagationMap.find(Call->getArg(0)); - if (PInfo.isVar()) { - const VarDecl* Var = PInfo.getVar(); - - PropagationMap.insert(PairType(Call, - PropagationInfo(StateMap->getState(Var), ThisType))); - - StateMap->setState(Var, consumed::CS_Consumed); + if (Entry != PropagationMap.end()) { + PropagationInfo PInfo = Entry->second; - } else { - PropagationMap.insert(PairType(Call, PInfo)); + if (PInfo.isVar()) { + const VarDecl* Var = PInfo.getVar(); + + PropagationMap.insert(PairType(Call, + PropagationInfo(StateMap->getState(Var), ThisType))); + + StateMap->setState(Var, consumed::CS_Consumed); + + } else { + PropagationMap.insert(PairType(Call, PInfo)); + } } - } else if (Constructor->isCopyConstructor()) { - MapType::iterator Entry = PropagationMap.find(Call->getArg(0)); - - if (Entry != PropagationMap.end()) - PropagationMap.insert(PairType(Call, Entry->second)); + forwardInfo(Call->getArg(0), Call); } else { ConsumedState RetState = mapConsumableAttrState(ThisType); @@ -717,7 +711,6 @@ void ConsumedStmtVisitor::VisitCXXConstructExpr(const CXXConstructExpr *Call) { } } - void ConsumedStmtVisitor::VisitCXXMemberCallExpr( const CXXMemberCallExpr *Call) { @@ -854,10 +847,7 @@ void ConsumedStmtVisitor::VisitDeclStmt(const DeclStmt *DeclS) { void ConsumedStmtVisitor::VisitMaterializeTemporaryExpr( const MaterializeTemporaryExpr *Temp) { - InfoEntry Entry = PropagationMap.find(Temp->GetTemporaryExpr()); - - if (Entry != PropagationMap.end()) - PropagationMap.insert(PairType(Temp, Entry->second)); + forwardInfo(Temp->GetTemporaryExpr(), Temp); } void ConsumedStmtVisitor::VisitMemberExpr(const MemberExpr *MExpr) { |

