diff options
Diffstat (limited to 'lib/Analysis/SVals.cpp')
-rw-r--r-- | lib/Analysis/SVals.cpp | 174 |
1 files changed, 0 insertions, 174 deletions
diff --git a/lib/Analysis/SVals.cpp b/lib/Analysis/SVals.cpp index 77c3c8f..dd9490b 100644 --- a/lib/Analysis/SVals.cpp +++ b/lib/Analysis/SVals.cpp @@ -237,180 +237,6 @@ SVal loc::ConcreteInt::EvalBinOp(BasicValueFactory& BasicVals, } //===----------------------------------------------------------------------===// -// Utility methods for constructing SVals. -//===----------------------------------------------------------------------===// - -SVal ValueManager::makeZeroVal(QualType T) { - if (Loc::IsLocType(T)) - return Loc::MakeNull(BasicVals); - - if (T->isIntegerType()) - return NonLoc::MakeVal(BasicVals, 0, T); - - // FIXME: Handle floats. - // FIXME: Handle structs. - return UnknownVal(); -} - -SVal ValueManager::makeZeroArrayIndex() { - return nonloc::ConcreteInt(BasicVals.getZeroWithPtrWidth(false)); -} - -//===----------------------------------------------------------------------===// -// Utility methods for constructing Non-Locs. -//===----------------------------------------------------------------------===// - -NonLoc ValueManager::makeNonLoc(SymbolRef sym) { - return nonloc::SymbolVal(sym); -} - -NonLoc ValueManager::makeNonLoc(const SymExpr *lhs, BinaryOperator::Opcode op, - const APSInt& v, QualType T) { - // The Environment ensures we always get a persistent APSInt in - // BasicValueFactory, so we don't need to get the APSInt from - // BasicValueFactory again. - assert(!Loc::IsLocType(T)); - return nonloc::SymExprVal(SymMgr.getSymIntExpr(lhs, op, v, T)); -} - -NonLoc ValueManager::makeNonLoc(const SymExpr *lhs, BinaryOperator::Opcode op, - const SymExpr *rhs, QualType T) { - assert(SymMgr.getType(lhs) == SymMgr.getType(rhs)); - assert(!Loc::IsLocType(T)); - return nonloc::SymExprVal(SymMgr.getSymSymExpr(lhs, op, rhs, T)); -} - -NonLoc NonLoc::MakeIntVal(BasicValueFactory& BasicVals, uint64_t X, - bool isUnsigned) { - return nonloc::ConcreteInt(BasicVals.getIntValue(X, isUnsigned)); -} - -NonLoc NonLoc::MakeVal(BasicValueFactory& BasicVals, uint64_t X, - unsigned BitWidth, bool isUnsigned) { - return nonloc::ConcreteInt(BasicVals.getValue(X, BitWidth, isUnsigned)); -} - -NonLoc NonLoc::MakeVal(BasicValueFactory& BasicVals, uint64_t X, QualType T) { - return nonloc::ConcreteInt(BasicVals.getValue(X, T)); -} - -NonLoc NonLoc::MakeVal(BasicValueFactory& BasicVals, const IntegerLiteral* I) { - - return nonloc::ConcreteInt(BasicVals.getValue(APSInt(I->getValue(), - I->getType()->isUnsignedIntegerType()))); -} - -NonLoc NonLoc::MakeVal(BasicValueFactory& BasicVals, const llvm::APInt& I, - bool isUnsigned) { - return nonloc::ConcreteInt(BasicVals.getValue(I, isUnsigned)); -} - -NonLoc NonLoc::MakeVal(BasicValueFactory& BasicVals, const llvm::APSInt& I) { - return nonloc::ConcreteInt(BasicVals.getValue(I)); -} - -NonLoc NonLoc::MakeIntTruthVal(BasicValueFactory& BasicVals, bool b) { - return nonloc::ConcreteInt(BasicVals.getTruthValue(b)); -} - -NonLoc ValueManager::makeTruthVal(bool b, QualType T) { - return nonloc::ConcreteInt(BasicVals.getTruthValue(b, T)); -} - -NonLoc NonLoc::MakeCompoundVal(QualType T, llvm::ImmutableList<SVal> Vals, - BasicValueFactory& BasicVals) { - return nonloc::CompoundVal(BasicVals.getCompoundValData(T, Vals)); -} - -SVal ValueManager::getRegionValueSymbolVal(const MemRegion* R, QualType T) { - SymbolRef sym = SymMgr.getRegionValueSymbol(R, T); - - if (const TypedRegion* TR = dyn_cast<TypedRegion>(R)) { - if (T.isNull()) - T = TR->getValueType(SymMgr.getContext()); - - // If T is of function pointer type, create a CodeTextRegion wrapping a - // symbol. - if (T->isFunctionPointerType()) { - return Loc::MakeVal(MemMgr.getCodeTextRegion(sym, T)); - } - - if (Loc::IsLocType(T)) - return Loc::MakeVal(MemMgr.getSymbolicRegion(sym)); - - // Only handle integers for now. - if (T->isIntegerType() && T->isScalarType()) - return makeNonLoc(sym); - } - - return UnknownVal(); -} - -SVal ValueManager::getConjuredSymbolVal(const Expr* E, unsigned Count) { - QualType T = E->getType(); - SymbolRef sym = SymMgr.getConjuredSymbol(E, Count); - - // If T is of function pointer type, create a CodeTextRegion wrapping a - // symbol. - if (T->isFunctionPointerType()) { - return Loc::MakeVal(MemMgr.getCodeTextRegion(sym, T)); - } - - if (Loc::IsLocType(T)) - return Loc::MakeVal(MemMgr.getSymbolicRegion(sym)); - - if (T->isIntegerType() && T->isScalarType()) - return makeNonLoc(sym); - - return UnknownVal(); -} - -SVal ValueManager::getConjuredSymbolVal(const Expr* E, QualType T, - unsigned Count) { - - SymbolRef sym = SymMgr.getConjuredSymbol(E, T, Count); - - // If T is of function pointer type, create a CodeTextRegion wrapping a - // symbol. - if (T->isFunctionPointerType()) { - return Loc::MakeVal(MemMgr.getCodeTextRegion(sym, T)); - } - - if (Loc::IsLocType(T)) - return Loc::MakeVal(MemMgr.getSymbolicRegion(sym)); - - if (T->isIntegerType() && T->isScalarType()) - return makeNonLoc(sym); - - return UnknownVal(); -} - -SVal ValueManager::getFunctionPointer(const FunctionDecl* FD) { - CodeTextRegion* R - = MemMgr.getCodeTextRegion(FD, Context.getPointerType(FD->getType())); - return loc::MemRegionVal(R); -} - -nonloc::LocAsInteger nonloc::LocAsInteger::Make(BasicValueFactory& Vals, Loc V, - unsigned Bits) { - return LocAsInteger(Vals.getPersistentSValWithData(V, Bits)); -} - -//===----------------------------------------------------------------------===// -// Utility methods for constructing Locs. -//===----------------------------------------------------------------------===// - -Loc Loc::MakeVal(const MemRegion* R) { return loc::MemRegionVal(R); } - -Loc Loc::MakeVal(const AddrLabelExpr *E) { - return loc::GotoLabel(E->getLabel()); -} - -Loc Loc::MakeNull(BasicValueFactory &BasicVals) { - return loc::ConcreteInt(BasicVals.getZeroWithPtrWidth()); -} - -//===----------------------------------------------------------------------===// // Pretty-Printing. //===----------------------------------------------------------------------===// |