diff options
Diffstat (limited to 'clang/lib')
| -rw-r--r-- | clang/lib/Analysis/BasicStore.cpp | 22 | ||||
| -rw-r--r-- | clang/lib/Analysis/SVals.cpp | 13 | 
2 files changed, 19 insertions, 16 deletions
diff --git a/clang/lib/Analysis/BasicStore.cpp b/clang/lib/Analysis/BasicStore.cpp index 8cfe7a98401..b883f880614 100644 --- a/clang/lib/Analysis/BasicStore.cpp +++ b/clang/lib/Analysis/BasicStore.cpp @@ -526,19 +526,15 @@ Store BasicStoreManager::getInitialStore() {        if (VD->getStorageClass() == VarDecl::Static)          continue; -      // Only handle pointers and integers for now. -      QualType T = VD->getType(); -      if (Loc::IsLocType(T) || T->isIntegerType()) { -        // Initialize globals and parameters to symbolic values. -        // Initialize local variables to undefined. -        const MemRegion *R = StateMgr.getRegion(VD); -        SVal X = (VD->hasGlobalStorage() || isa<ParmVarDecl>(VD) || -                  isa<ImplicitParamDecl>(VD)) -              ? SVal::GetRValueSymbolVal(StateMgr.getSymbolManager(), R) -              : UndefinedVal(); - -        St = BindInternal(St, Loc::MakeVal(R), X); -      } +      // Initialize globals and parameters to symbolic values. +      // Initialize local variables to undefined. +      const MemRegion *R = StateMgr.getRegion(VD); +      SVal X = (VD->hasGlobalStorage() || isa<ParmVarDecl>(VD) || +                isa<ImplicitParamDecl>(VD)) +            ? SVal::GetRValueSymbolVal(StateMgr.getSymbolManager(), R) +            : UndefinedVal(); + +      St = BindInternal(St, Loc::MakeVal(R), X);      }    }    return St; diff --git a/clang/lib/Analysis/SVals.cpp b/clang/lib/Analysis/SVals.cpp index cca0e94191d..3762ae5ce61 100644 --- a/clang/lib/Analysis/SVals.cpp +++ b/clang/lib/Analysis/SVals.cpp @@ -324,11 +324,18 @@ NonLoc NonLoc::MakeCompoundVal(QualType T, llvm::ImmutableList<SVal> Vals,  SVal SVal::GetRValueSymbolVal(SymbolManager& SymMgr, const MemRegion* R) {    SymbolRef sym = SymMgr.getRegionRValueSymbol(R); -  if (const TypedRegion* TR = dyn_cast<TypedRegion>(R)) -    if (Loc::IsLocType(TR->getRValueType(SymMgr.getContext()))) +  if (const TypedRegion* TR = dyn_cast<TypedRegion>(R)) { +    QualType T = TR->getRValueType(SymMgr.getContext()); +     +    if (Loc::IsLocType(T))        return Loc::MakeVal(sym); -  return NonLoc::MakeVal(sym); +    // Only handle integers for now. +    if (T->isIntegerType()) +      return NonLoc::MakeVal(sym); +  } + +  return UnknownVal();  }  nonloc::LocAsInteger nonloc::LocAsInteger::Make(BasicValueFactory& Vals, Loc V,  | 

