ElementRegion*
MemRegionManager::getElementRegion(QualType elementType, SVal Idx,
- const MemRegion* superRegion){
+ const MemRegion* superRegion, ASTContext& Ctx){
+
+ QualType T = Ctx.getCanonicalType(elementType);
llvm::FoldingSetNodeID ID;
- ElementRegion::ProfileRegion(ID, elementType, Idx, superRegion);
+ ElementRegion::ProfileRegion(ID, T, Idx, superRegion);
void* InsertPos;
MemRegion* data = Regions.FindNodeOrInsertPos(ID, InsertPos);
if (!R) {
R = (ElementRegion*) A.Allocate<ElementRegion>();
- new (R) ElementRegion(elementType, Idx, superRegion);
+ new (R) ElementRegion(T, Idx, superRegion);
Regions.InsertNode(R, InsertPos);
}
}
}
return loc::MemRegionVal(MRMgr.getElementRegion(elementType, Offset,
- BaseRegion));
+ BaseRegion, getContext()));
}
SVal BaseIdx = ElemR->getIndex();
else
NewIdx = nonloc::ConcreteInt(getBasicVals().getValue(BaseIdxI + OffI));
- return loc::MemRegionVal(MRMgr.getElementRegion(elementType, NewIdx, ArrayR));
+ return loc::MemRegionVal(MRMgr.getElementRegion(elementType, NewIdx, ArrayR,
+ getContext()));
}
SVal RegionStoreManager::getSizeInElements(const GRState* St,
T = AT->getElementType();
nonloc::ConcreteInt Idx(getBasicVals().getZeroWithPtrWidth(false));
- ElementRegion* ER = MRMgr.getElementRegion(T, Idx, ArrayR);
+ ElementRegion* ER = MRMgr.getElementRegion(T, Idx, ArrayR, getContext());
return loc::MemRegionVal(ER);
}
state = setCastType(state, R, ToTy);
SVal Idx = ValMgr.makeZeroArrayIndex();
- ElementRegion* ER = MRMgr.getElementRegion(PointeeTy, Idx, R);
+ ElementRegion* ER = MRMgr.getElementRegion(PointeeTy, Idx,R,getContext());
return CastResult(state, ER);
} else
return CastResult(state, R);
QualType EleTy = T->getAsPointerType()->getPointeeType();
SVal ZeroIdx = ValMgr.makeZeroArrayIndex();
- ER = MRMgr.getElementRegion(EleTy, ZeroIdx, SR);
+ ER = MRMgr.getElementRegion(EleTy, ZeroIdx, SR, getContext());
}
else if (const AllocaRegion *AR = dyn_cast<AllocaRegion>(MR)) {
// Get the alloca region's current cast type.
assert(T && "alloca region has no type.");
QualType EleTy = cast<PointerType>(T->getTypePtr())->getPointeeType();
SVal ZeroIdx = ValMgr.makeZeroArrayIndex();
- ER = MRMgr.getElementRegion(EleTy, ZeroIdx, AR);
+ ER = MRMgr.getElementRegion(EleTy, ZeroIdx, AR, getContext());
}
else
ER = cast<ElementRegion>(MR);
Offset->getValue()));
SVal NewIdx = Base->EvalBinOp(getBasicVals(), Op, OffConverted);
const MemRegion* NewER =
- MRMgr.getElementRegion(ER->getElementType(), NewIdx,ER->getSuperRegion());
+ MRMgr.getElementRegion(ER->getElementType(), NewIdx,ER->getSuperRegion(),
+ getContext());
return Loc::MakeVal(NewER);
}
for (; i < Size; ++i) {
SVal Idx = NonLoc::MakeVal(getBasicVals(), i);
- ElementRegion* ER = MRMgr.getElementRegion(CAT->getElementType(), Idx, R);
+ ElementRegion* ER = MRMgr.getElementRegion(CAT->getElementType(), Idx, R,
+ getContext());
QualType ETy = ER->getElementType();
SVal ElementVal = Retrieve(St, loc::MemRegionVal(ER), ETy);
ArrayVal = getBasicVals().consVals(ElementVal, ArrayVal);
SVal Idx = NonLoc::MakeVal(getBasicVals(), i);
ElementRegion* ER =
MRMgr.getElementRegion(cast<ArrayType>(T)->getElementType(),
- Idx, R);
+ Idx, R, getContext());
SVal V = NonLoc::MakeVal(getBasicVals(), str[j], sizeof(char)*8, true);
St = Bind(St, loc::MemRegionVal(ER), V);
SVal Idx = NonLoc::MakeVal(getBasicVals(), i);
ElementRegion* ER =
MRMgr.getElementRegion(cast<ArrayType>(T)->getElementType(),
- Idx, R);
+ Idx, R, getContext());
if (CAT->getElementType()->isStructureType())
St = BindStruct(St, ER, *VI);