On Thu, Nov 13, 2008 at 11:03 PM, Ted Kremenek <[EMAIL PROTECTED]> wrote:
> > On Nov 13, 2008, at 1:15 AM, Zhongxing Xu wrote: > > Author: zhongxingxu > Date: Thu Nov 13 03:15:14 2008 > New Revision: 59238 > > URL: http://llvm.org/viewvc/llvm-project?rev=59238&view=rev > Log: > Array index might be unsigned. We have to generate a temporary signed value > for > it to be evaluated by APSInt::operators. > > Modified: > cfe/trunk/lib/Analysis/RegionStore.cpp > > Modified: cfe/trunk/lib/Analysis/RegionStore.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Analysis/RegionStore.cpp?rev=59238&r1=59237&r2=59238&view=diff > > > ============================================================================== > --- cfe/trunk/lib/Analysis/RegionStore.cpp (original) > +++ cfe/trunk/lib/Analysis/RegionStore.cpp Thu Nov 13 03:15:14 2008 > @@ -197,6 +197,18 @@ > // Only handle integer indices for now. > if ((CI1 = dyn_cast<nonloc::ConcreteInt>(&Idx)) && > (CI2 = dyn_cast<nonloc::ConcreteInt>(&Offset))) { > + > + // Temporary SVal to hold a potential signed APSInt. > + SVal SignedInt; > + > + // Index might be unsigned. We have to convert it to signed. > + if (CI2->getValue().isUnsigned()) { > + llvm::APSInt SI = CI2->getValue(); > + SI.setIsSigned(true); > + SignedInt = nonloc::ConcreteInt(getBasicVals().getValue(SI)); > + CI2 = cast<nonloc::ConcreteInt>(&SignedInt); > + } > + > > > Hi Zhongxing, > > I'm not saying this isn't needed, but is there a particular justification > for the signed -> unsigned conversion? (I actually don't know by just > looking at your patch). It seems like things like this should go in > GRExprEngine, not the Store. > Consistent signedness is required by llvm::APSInt. So we should find a place to handle this. May be we should ensure all ConcreteInt be signed in GRExprEngine?
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
