]> granicus.if.org Git - clang/commitdiff
Get array's lvalue through standard interface.
authorZhongxing Xu <xuzhongxing@gmail.com>
Fri, 17 Oct 2008 02:20:14 +0000 (02:20 +0000)
committerZhongxing Xu <xuzhongxing@gmail.com>
Fri, 17 Oct 2008 02:20:14 +0000 (02:20 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@57666 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Analysis/GRExprEngine.cpp

index 76d89bb3b1a00562ec8a9bdf9aca394466a2fc63..bc7a00a54696fed4b682741b01cd6abd582ecd97 100644 (file)
@@ -804,20 +804,18 @@ void GRExprEngine::VisitDeclRefExpr(DeclRefExpr* Ex, NodeTy* Pred, NodeSet& Dst,
 
   if (const VarDecl* VD = dyn_cast<VarDecl>(D)) {
 
-    QualType T = VD->getType();
-    if (T->isArrayType()) {
+    RVal V = StateMgr.GetLValue(St, VD);
+
+    if (VD->getType()->isArrayType()) {
       // C++ standard says array of type T should be implicitly converted to
       // pointer to type T in some cases. Currently we don't do this cast in
       // VisitCast(), because BasicStore is not field sensitive. We shall do
       // this in a transfer function in the future. We represent both lvalue and
       // rvalue of array of type T as the corresponding MemRegionVal of it.
 
-      RVal V = lval::MemRegionVal(StateMgr.getRegion(VD));
       MakeNode(Dst, Ex, Pred, SetRVal(St, Ex, V));
       return;
     }
-
-    RVal V = StateMgr.GetLValue(St, VD);
     
     if (asLValue)
       MakeNode(Dst, Ex, Pred, SetRVal(St, Ex, V));