diff options
Diffstat (limited to 'clang/lib/StaticAnalyzer/Core/SVals.cpp')
| -rw-r--r-- | clang/lib/StaticAnalyzer/Core/SVals.cpp | 10 | 
1 files changed, 10 insertions, 0 deletions
diff --git a/clang/lib/StaticAnalyzer/Core/SVals.cpp b/clang/lib/StaticAnalyzer/Core/SVals.cpp index 67913a55b3dc..31725926cd0d 100644 --- a/clang/lib/StaticAnalyzer/Core/SVals.cpp +++ b/clang/lib/StaticAnalyzer/Core/SVals.cpp @@ -109,6 +109,14 @@ SymbolRef SVal::getAsSymbol(bool IncludeBaseRegions) const {    return getAsLocSymbol(IncludeBaseRegions);  } +const llvm::APSInt *SVal::getAsInteger() const { +  if (auto CI = getAs<nonloc::ConcreteInt>()) +    return &CI->getValue(); +  if (auto CI = getAs<loc::ConcreteInt>()) +    return &CI->getValue(); +  return nullptr; +} +  const MemRegion *SVal::getAsRegion() const {    if (Optional<loc::MemRegionVal> X = getAs<loc::MemRegionVal>())      return X->getRegion(); @@ -136,6 +144,8 @@ public:    }    template <class ConcreteInt> QualType VisitConcreteInt(ConcreteInt CI) {      const llvm::APSInt &Value = CI.getValue(); +    if (1 == Value.getBitWidth()) +      return Context.BoolTy;      return Context.getIntTypeForBitwidth(Value.getBitWidth(), Value.isSigned());    }    QualType VisitLocConcreteInt(loc::ConcreteInt CI) {  | 
