]> granicus.if.org Git - clang/commitdiff
When creating LVals for array entries, canonicalize entries with a 0 index.
authorTed Kremenek <kremenek@apple.com>
Wed, 30 Apr 2008 21:05:35 +0000 (21:05 +0000)
committerTed Kremenek <kremenek@apple.com>
Wed, 30 Apr 2008 21:05:35 +0000 (21:05 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@50497 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Analysis/GRExprEngine.cpp

index 80e9af319000d4e312084c8d83f33849e432dcaf..877bd09a289c629e7562bc315bfeb22bd1c6b8a7 100644 (file)
@@ -803,7 +803,15 @@ void GRExprEngine::VisitArraySubscriptExpr(ArraySubscriptExpr* A, NodeTy* Pred,
       ValueState* St = GetState(*I2);
       RVal BaseV = GetRVal(St, Base);
       RVal IdxV  = GetRVal(St, Idx);      
-      RVal V = lval::ArrayOffset::Make(BasicVals, BaseV, IdxV);
+      
+      // If IdxV is 0, return just BaseV.
+      
+      bool useBase = false;
+      
+      if (nonlval::ConcreteInt* IdxInt = dyn_cast<nonlval::ConcreteInt>(&IdxV))        
+        useBase = IdxInt->getValue() == 0;
+      
+      RVal V = useBase ? BaseV : lval::ArrayOffset::Make(BasicVals, BaseV,IdxV);
 
       if (asLVal)
         MakeNode(Dst, A, *I2, SetRVal(St, A, V));