diff options
| -rw-r--r-- | clang/lib/Checker/RegionStore.cpp | 3 | ||||
| -rw-r--r-- | clang/test/Analysis/misc-ps-region-store.m | 8 | 
2 files changed, 9 insertions, 2 deletions
diff --git a/clang/lib/Checker/RegionStore.cpp b/clang/lib/Checker/RegionStore.cpp index 6f8c2504bd5..a9d12dfb4a9 100644 --- a/clang/lib/Checker/RegionStore.cpp +++ b/clang/lib/Checker/RegionStore.cpp @@ -883,8 +883,7 @@ SVal RegionStoreManager::EvalBinOp(BinaryOperator::Opcode Op, Loc L, NonLoc R,      }      case MemRegion::AllocaRegionKind: {        const AllocaRegion *AR = cast<AllocaRegion>(MR); -      QualType T = getContext().CharTy; // Create an ElementRegion of bytes. -      QualType EleTy = T->getAs<PointerType>()->getPointeeType(); +      QualType EleTy = getContext().CharTy; // Create an ElementRegion of bytes.        SVal ZeroIdx = ValMgr.makeZeroArrayIndex();        ER = MRMgr.getElementRegion(EleTy, ZeroIdx, AR, getContext());        break; diff --git a/clang/test/Analysis/misc-ps-region-store.m b/clang/test/Analysis/misc-ps-region-store.m index 52516abc397..6b4f658a3f8 100644 --- a/clang/test/Analysis/misc-ps-region-store.m +++ b/clang/test/Analysis/misc-ps-region-store.m @@ -1033,3 +1033,11 @@ double rdar_8032791_1() {     return x;  } +// PR 7450 - Handle pointer arithmetic with __builtin_alloca +void pr_7450_aux(void *x); +void pr_7450() { +  void *p = __builtin_alloca(10); +  // Don't crash when analyzing the following statement. +  pr_7450_aux(p + 8); +} +  | 

