[cfe-commits] r50497 - /cfe/trunk/lib/Analysis/GRExprEngine.cpp

Ted Kremenek kremenek at apple.com
Wed Apr 30 14:05:36 PDT 2008


Author: kremenek
Date: Wed Apr 30 16:05:35 2008
New Revision: 50497

URL: http://llvm.org/viewvc/llvm-project?rev=50497&view=rev
Log:
When creating LVals for array entries, canonicalize entries with a 0 index.

Modified:
    cfe/trunk/lib/Analysis/GRExprEngine.cpp

Modified: cfe/trunk/lib/Analysis/GRExprEngine.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Analysis/GRExprEngine.cpp?rev=50497&r1=50496&r2=50497&view=diff

==============================================================================
--- cfe/trunk/lib/Analysis/GRExprEngine.cpp (original)
+++ cfe/trunk/lib/Analysis/GRExprEngine.cpp Wed Apr 30 16:05:35 2008
@@ -803,7 +803,15 @@
       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));





More information about the cfe-commits mailing list