[clang] [analyzer] Don't copy field-by-field conjured LazyCompoundVals (2/4) (PR #115917)

Balazs Benics via cfe-commits cfe-commits at lists.llvm.org
Thu Nov 14 05:45:49 PST 2024


================
@@ -2609,9 +2611,42 @@ RegionBindingsRef RegionStoreManager::bindVector(RegionBindingsConstRef B,
   return NewB;
 }
 
+std::optional<SVal>
+RegionStoreManager::getUniqueDefaultBinding(Store S,
+                                            const MemRegion *BaseR) const {
+  assert(BaseR == BaseR->getBaseRegion() && "Expecting a base region");
+  const auto *Cluster = getRegionBindings(S).lookup(BaseR);
+  if (!Cluster || !llvm::hasSingleElement(*Cluster))
+    return std::nullopt;
+
+  const auto [Key, Value] = *Cluster->begin();
+  return Key.isDirect() ? std::optional<SVal>{} : Value;
----------------
steakhal wrote:

I couldn't use nullopt here because we need a common type for the two branches of the ternary.
I genuinely think that `std::optional<SVal>{}` is way uglier than `std::nullopt`, thus I chose to deviate only here.

https://github.com/llvm/llvm-project/pull/115917


More information about the cfe-commits mailing list