Replaced duplicate code with calls to forwardInfo.
authorChris Wailes <chris.wailes@gmail.com>
Thu, 24 Oct 2013 14:28:17 +0000 (14:28 +0000)
committerChris Wailes <chris.wailes@gmail.com>
Thu, 24 Oct 2013 14:28:17 +0000 (14:28 +0000)
Also made move constructor handling safer.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@193347 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Analysis/Consumed.cpp

index ed806ce67118d0d1384c9a8cbd50c375a82cf56e..c1902718a8f7b6e427cfa6a8c410e6038e965abc 100644 (file)
@@ -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) {