diff --git a/clang/include/clang/StaticAnalyzer/Core/PathSensitive/MemRegion.h b/clang/include/clang/StaticAnalyzer/Core/PathSensitive/MemRegion.h --- a/clang/include/clang/StaticAnalyzer/Core/PathSensitive/MemRegion.h +++ b/clang/include/clang/StaticAnalyzer/Core/PathSensitive/MemRegion.h @@ -100,8 +100,9 @@ }; private: + mutable RegionOffset cachedOffset; const Kind kind; - mutable Optional cachedOffset; + mutable bool hasCachedOffset = false; protected: MemRegion(Kind k) : kind(k) {} diff --git a/clang/lib/StaticAnalyzer/Core/MemRegion.cpp b/clang/lib/StaticAnalyzer/Core/MemRegion.cpp --- a/clang/lib/StaticAnalyzer/Core/MemRegion.cpp +++ b/clang/lib/StaticAnalyzer/Core/MemRegion.cpp @@ -1579,9 +1579,11 @@ } RegionOffset MemRegion::getAsOffset() const { - if (!cachedOffset) + if (!hasCachedOffset) { cachedOffset = calculateOffset(this); - return *cachedOffset; + hasCachedOffset = true; + } + return cachedOffset; } //===----------------------------------------------------------------------===//