sgatev added a comment. I see that the declaration of `operator*` in `std::unique_ptr` is `typename add_lvalue_reference<T>::type operator*() const;`. I managed to reproduce the crash with the following snippet:
#include <optional> namespace detail { template <class T> struct type_identity { using type = T; }; template <class T> auto try_add_lvalue_reference(int) -> type_identity<T&>; template <class T> auto try_add_lvalue_reference(...) -> type_identity<T>; template <class T> auto try_add_rvalue_reference(int) -> type_identity<T&&>; template <class T> auto try_add_rvalue_reference(...) -> type_identity<T>; } // namespace detail template <class T> struct add_lvalue_reference : decltype(detail::try_add_lvalue_reference<T>(0)) {}; template <class T> struct add_rvalue_reference : decltype(detail::try_add_rvalue_reference<T>(0)) {}; template <typename T> struct smart_ptr { typename add_lvalue_reference<T>::type operator*() &; }; void foo() { smart_ptr<std::optional<float>> x; *x = std::nullopt; } I suggest adding the definition of `add_lvalue_reference` to StdTypeTraitsHeader <https://github.com/llvm/llvm-project/blob/f93dee10336a2361da528db0ff0f7188acba9627/clang/unittests/Analysis/FlowSensitive/UncheckedOptionalAccessModelTest.cpp#L48> and adding a test with the rest of the code above. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D127434/new/ https://reviews.llvm.org/D127434 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits