]> granicus.if.org Git - clang/commitdiff
Generalize VisitLValue: not only can CallExprs and ObjCMessageExprs return aggregate...
authorTed Kremenek <kremenek@apple.com>
Sat, 18 Oct 2008 04:15:35 +0000 (04:15 +0000)
committerTed Kremenek <kremenek@apple.com>
Sat, 18 Oct 2008 04:15:35 +0000 (04:15 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@57761 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Analysis/GRExprEngine.cpp

index 103ec145d4ec31578132557d5c659f41839af7d2..d122dca0195a1e8825d7caba21d09325ceae7745 100644 (file)
@@ -408,9 +408,6 @@ void GRExprEngine::VisitLValue(Expr* Ex, NodeTy* Pred, NodeSet& Dst) {
   }
   
   switch (Ex->getStmtClass()) {
-    default:
-      Ex->dump();
-      assert(0 && "Other kinds of expressions do not have lvalue.");
       
     case Stmt::ArraySubscriptExprClass:
       VisitArraySubscriptExpr(cast<ArraySubscriptExpr>(Ex), Pred, Dst, true);
@@ -447,16 +444,16 @@ void GRExprEngine::VisitLValue(Expr* Ex, NodeTy* Pred, NodeSet& Dst) {
       Dst.Add(Pred);
       return;
       
-    case Stmt::CallExprClass:
-    case Stmt::ObjCMessageExprClass:
-      // Function calls and message expressions that return temporaries
-      // that are objects can be called in this context.  We need to
-      // enhance our support of struct return values, so right now just
-      // do a regular visit.
-      assert (!Ex->getType()->isIntegerType());
-      assert (!Ex->getType()->isPointerType());
-      Visit(Ex, Pred, Dst);
+    default:
+      // Arbitrary subexpressions can return aggregate temporaries that
+      // can be used in a lvalue context.  We need to enhance our support
+      // of such temporaries in both the environment and the store, so right
+      // now we just do a regular visit.
+      assert (Ex->getType()->isAggregateType() && 
+              "Other kinds of expressions with non-aggregate types do not "
+              "have lvalues.");
       
+      Visit(Ex, Pred, Dst);
   }
 }