On Oct 23, 2008, at 5:52 PM, Zhongxing Xu wrote:
On Fri, Oct 24, 2008 at 8:09 AM, Ted Kremenek <[EMAIL PROTECTED]>
wrote:
On Oct 22, 2008, at 9:21 PM, Zhongxing Xu wrote:
New patch attached.
On Thu, Oct 23, 2008 at 9:28 AM, Ted Kremenek <[EMAIL PROTECTED]>
wrote:
On Oct 22, 2008, at 6:26 PM, Zhongxing Xu wrote:
This assertion will always be true. Did you mean assert(false &&
"...")?
No, I just don't want the program to crash when things happen, but
also put reminder there.
Then it's not really an assertion. Just use a comment.
OK. I'll make it a comment. But I do see others doing this in Clang.
Those places are probably miswritten assertions. When you spot
them feel free to bring it to everyone's attention or submit a patch.
Thanks Zhongxing!
<element2.patch>
+SVal RegionStoreManager::ArrayToPointer(SVal Array) {
+ const MemRegion* ArrayR = cast<loc::MemRegionVal>(&Array)-
>getRegion();
+
+ const VarDecl* D = cast<VarRegion>(ArrayR)->getDecl();
+
+ const ConstantArrayType* CAT =
+ cast<ConstantArrayType>(D->getType().getTypePtr());
Won't this cast<> fail for VLAs?
I fix with this:
+SVal RegionStoreManager::ArrayToPointer(SVal Array) {
+ const MemRegion* ArrayR = cast<loc::MemRegionVal>(&Array)-
>getRegion();
+
+ const VarDecl* D = cast<VarRegion>(ArrayR)->getDecl();
+
+ if (const ConstantArrayType* CAT =
+ dyn_cast<ConstantArrayType>(D->getType().getTypePtr())) {
+
+ BasicValueFactory& BasicVals = StateMgr.getBasicVals();
+
+ nonloc::ConcreteInt Idx(BasicVals.getValue(0, CAT->getSize
().getBitWidth(),
+ false));
+
+ ElementRegion* ER = MRMgr.getElementRegion(Idx, ArrayR);
+
+ return loc::MemRegionVal(ER);
+ }
+
+ return Array;
+}
Looks good, except you need a return value for the VLA case (UnknownVal
()?).
I am sure we'll iterate on this when we decide to handle VLAs.
Definitely; we just don't want it to crash in the meantime. ;-)
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits