@@ -330,13 +330,12 @@ class RegionBindingsRef : public llvm::ImmutableMapRef<const MemRegion *,
330330// / the number of bindings that can be added.
331331class BoundedRegionBindingsRef : public RegionBindingsRef {
332332public:
333- static BoundedRegionBindingsRef
334- createWithLimit (RegionBindingsRef Base,
335- SmallVectorImpl<SVal> *EscapedValuesDuringBind,
336- unsigned BindingsLeft) {
337- return BoundedRegionBindingsRef{Base, EscapedValuesDuringBind,
338- BindingsLeft};
339- }
333+ BoundedRegionBindingsRef (RegionBindingsRef Base,
334+ SmallVectorImpl<SVal> &EscapedValuesDuringBind,
335+ unsigned BindingsLeft)
336+ : RegionBindingsRef(Base),
337+ EscapedValuesDuringBind (&EscapedValuesDuringBind),
338+ BindingsLeft(BindingsLeft) {}
340339
341340 unsigned bindingsLeft () const { return BindingsLeft; }
342341
@@ -361,12 +360,12 @@ class BoundedRegionBindingsRef : public RegionBindingsRef {
361360 data_type_ref BindingKeyAndValue) const {
362361 return BoundedRegionBindingsRef{RegionBindingsRef::commitBindingsToCluster (
363362 BaseRegion, BindingKeyAndValue),
364- EscapedValuesDuringBind, BindingsLeft};
363+ * EscapedValuesDuringBind, BindingsLeft};
365364 }
366365
367366 BoundedRegionBindingsRef removeCluster (const MemRegion *BaseRegion) const {
368367 return BoundedRegionBindingsRef{
369- RegionBindingsRef::removeCluster (BaseRegion), EscapedValuesDuringBind,
368+ RegionBindingsRef::removeCluster (BaseRegion), * EscapedValuesDuringBind,
370369 BindingsLeft};
371370 }
372371
@@ -379,7 +378,7 @@ class BoundedRegionBindingsRef : public RegionBindingsRef {
379378 V = UnknownVal ();
380379 }
381380 return BoundedRegionBindingsRef{RegionBindingsRef::addBinding (K, V),
382- EscapedValuesDuringBind, BindingsLeft - 1 };
381+ * EscapedValuesDuringBind, BindingsLeft - 1 };
383382 }
384383
385384 BoundedRegionBindingsRef addBinding (const MemRegion *R, BindingKey::Kind k,
@@ -388,14 +387,7 @@ class BoundedRegionBindingsRef : public RegionBindingsRef {
388387 }
389388
390389private:
391- BoundedRegionBindingsRef (RegionBindingsRef Base,
392- SmallVectorImpl<SVal> *EscapedValuesDuringBind,
393- unsigned BindingsLeft)
394- : RegionBindingsRef(Base),
395- EscapedValuesDuringBind (EscapedValuesDuringBind),
396- BindingsLeft(BindingsLeft) {}
397-
398- SmallVectorImpl<SVal> *EscapedValuesDuringBind;
390+ SmallVectorImpl<SVal> *EscapedValuesDuringBind; // nonnull
399391 unsigned BindingsLeft;
400392};
401393
@@ -594,7 +586,7 @@ class RegionStoreManager : public StoreManager {
594586 BindResult Bind (Store store, Loc LV, SVal V) override {
595587 llvm::SmallVector<SVal, 0 > EscapedValuesDuringBind;
596588 BoundedRegionBindingsRef BoundedBindings =
597- getRegionBindings (store, & EscapedValuesDuringBind);
589+ getRegionBindings (store, EscapedValuesDuringBind);
598590 return BindResult{StoreRef (bind (BoundedBindings, LV, V).asStore (), *this ),
599591 std::move (EscapedValuesDuringBind)};
600592 }
@@ -608,7 +600,7 @@ class RegionStoreManager : public StoreManager {
608600 SVal V) override {
609601 llvm::SmallVector<SVal, 0 > EscapedValuesDuringBind;
610602 BoundedRegionBindingsRef B =
611- getRegionBindings (store, & EscapedValuesDuringBind);
603+ getRegionBindings (store, EscapedValuesDuringBind);
612604 // Use other APIs when you have to wipe the region that was initialized
613605 // earlier.
614606 assert (!(B.getDefaultBinding (R) || B.getDirectBinding (R)) &&
@@ -637,7 +629,7 @@ class RegionStoreManager : public StoreManager {
637629
638630 llvm::SmallVector<SVal, 0 > EscapedValuesDuringBind;
639631 BoundedRegionBindingsRef B =
640- getRegionBindings (store, & EscapedValuesDuringBind);
632+ getRegionBindings (store, EscapedValuesDuringBind);
641633 SVal V = svalBuilder.makeZeroVal (Ctx.CharTy );
642634 B = removeSubRegionBindings (B, cast<SubRegion>(R));
643635 B = B.addBinding (BindingKey::Make (R, BindingKey::Default), V);
@@ -809,8 +801,8 @@ class RegionStoreManager : public StoreManager {
809801
810802 BoundedRegionBindingsRef
811803 getRegionBindings (Store store,
812- SmallVectorImpl<SVal> * EscapedValuesDuringBind) const {
813- return BoundedRegionBindingsRef::createWithLimit (
804+ SmallVectorImpl<SVal> & EscapedValuesDuringBind) const {
805+ return BoundedRegionBindingsRef (
814806 getRegionBindings (store), EscapedValuesDuringBind,
815807 /* BindingsLeft=*/ RegionStoreMaxBindingFanOut);
816808 }
0 commit comments