martong added inline comments.
================ Comment at: clang/lib/StaticAnalyzer/Checkers/MallocChecker.cpp:396 + /// yes was the value obtained or not. + mutable Optional<Optional<int>> KernelZeroSizePtrValue; + ---------------- balazske wrote: > martong wrote: > > Which one is referred to the lazy initialization? The inner or the outer? > > These questions actually made me to come up with a more explanatory > > construct here: > > Could we do something like this? > > ``` > > using LazyInitialized = Optional<int>; > > mutable Optional<LazyInitialized> KernelZeroSizePtrValue; // Or > > Lazy<Optional<...>> > > ``` > Probably use a `std::unique_ptr<Optional<int>>` instead (like at the bug > types, they could be optional too)? > If there is a code like > ``` > bool IsSomethingInitialized; > int Something; > ``` > that looks as a clear case to use an optional (or unique_ptr)? And if yes, is > a reason for not using this construct if `int` is replaced by `Optional<int>`? Now I see that the lazy initialization is represented by the outer optional. So IMHO a using template could be the best to describe cleanly this construct: ``` template <class T> using LazyInitialized = Optional<T>; mutable LazyInitialized<Optional<int>> KernelZeroSizePtrValue; ``` Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D76830/new/ https://reviews.llvm.org/D76830 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits