Handle the case where 'element' in ObjCforCollectionstmt is not a DeclStmt or DeclRefExpr.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59290 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Analysis/LiveVariables.cpp b/lib/Analysis/LiveVariables.cpp
index 98b1ee2..7b04beb 100644
--- a/lib/Analysis/LiveVariables.cpp
+++ b/lib/Analysis/LiveVariables.cpp
@@ -184,18 +184,21 @@
   
   // This represents a 'kill' for the variable.
   Stmt* Element = S->getElement();
-  DeclRefExpr *DR = 0;
+  DeclRefExpr* DR = 0;
   VarDecl* VD = 0;
   
   if (DeclStmt* DS = dyn_cast<DeclStmt>(Element))
     VD = cast<VarDecl>(DS->getSolitaryDecl());
   else {
-    DR = cast<DeclRefExpr>(Element);
-    VD = cast<VarDecl>(DR->getDecl());
+    Expr* ElemExpr = cast<Expr>(Element)->IgnoreParens();    
+    if ((DR = dyn_cast<DeclRefExpr>(ElemExpr)))
+      VD = cast<VarDecl>(DR->getDecl());
   }
 
-  LiveState(VD, AD) = Dead;
-  if (AD.Observer && DR) { AD.Observer->ObserverKill(DR); }
+  if (VD) {
+    LiveState(VD, AD) = Dead;
+    if (AD.Observer && DR) { AD.Observer->ObserverKill(DR); }
+  }
 }