namespace loc {
enum Kind { SymbolValKind, GotoLabelKind, MemRegionKind, FuncValKind,
- ConcreteIntKind, StringLiteralValKind };
+ ConcreteIntKind };
class SymbolVal : public Loc {
public:
}
};
-class StringLiteralVal : public Loc {
-public:
- StringLiteralVal(StringLiteral* L) : Loc(StringLiteralValKind, L) {}
-
- StringLiteral* getLiteral() const { return (StringLiteral*) Data; }
-
- // Implement isa<T> support.
- static inline bool classof(const SVal* V) {
- return V->getBaseKind() == LocKind &&
- V->getSubKind() == StringLiteralValKind;
- }
-
- static inline bool classof(const Loc* V) {
- return V->getSubKind() == StringLiteralValKind;
- }
-};
-
} // end clang::loc namespace
} // end clang namespace
case loc::FuncValKind:
case loc::GotoLabelKind:
- case loc::StringLiteralValKind:
isFeasible = Assumption;
return St;
break;
case loc::ConcreteIntKind:
- case loc::StringLiteralValKind:
// While these seem funny, this can happen through casts.
// FIXME: What we should return is the field offset. For example,
// add the field offset to the integer value. That way funny things
case loc::FuncValKind:
return LV;
- case loc::StringLiteralValKind:
- // FIXME: Implement better support for fetching characters from strings.
- return UnknownVal();
-
default:
assert (false && "Invalid Loc.");
break;
case loc::MemRegionKind:
case loc::FuncValKind:
case loc::GotoLabelKind:
- case loc::StringLiteralValKind:
return NonLoc::MakeIntTruthVal(BasicVals, L == R);
}
case loc::MemRegionKind:
case loc::FuncValKind:
case loc::GotoLabelKind:
- case loc::StringLiteralValKind:
return NonLoc::MakeIntTruthVal(BasicVals, L != R);
}
return UndefinedVal();
case loc::ConcreteIntKind:
- case loc::StringLiteralValKind:
// While these seem funny, this can happen through casts.
// FIXME: What we should return is the field offset. For example,
// add the field offset to the integer value. That way funny things
case loc::FuncValKind:
return L;
- case loc::StringLiteralValKind:
- return UnknownVal();
-
default:
assert(false && "Invalid Location");
break;
Loc Loc::MakeVal(AddrLabelExpr* E) { return loc::GotoLabel(E->getLabel()); }
-Loc Loc::MakeVal(StringLiteral* S) {
- return loc::StringLiteralVal(S);
-}
-
//===----------------------------------------------------------------------===//
// Pretty-Printing.
//===----------------------------------------------------------------------===//
<< cast<loc::FuncVal>(this)->getDecl()->getIdentifier()->getName();
break;
- case loc::StringLiteralValKind:
- Out << "literal \""
- << cast<loc::StringLiteralVal>(this)->getLiteral()->getStrData()
- << "\"";
- break;
-
default:
assert (false && "Pretty-printing not implemented for this Loc.");
break;
<< cast<loc::FuncVal>(this)->getDecl()->getIdentifier()->getName();
break;
- case loc::StringLiteralValKind:
- Out << "literal \""
- << cast<loc::StringLiteralVal>(this)->getLiteral()->getStrData()
- << "\"";
- break;
-
default:
assert (false && "Pretty-printing not implemented for this Loc.");
break;