[Lldb-commits] [PATCH] D138558: [lldb][DataFormatter] Add std::ranges::ref_view formatter

Michael Buch via Phabricator via lldb-commits lldb-commits at lists.llvm.org
Fri Dec 2 03:34:49 PST 2022


Michael137 added a comment.

In D138558#3963732 <https://reviews.llvm.org/D138558#3963732>, @labath wrote:

> You may want to check that this kind of automatic dereferencing does not send lldb into a tailspin if the printed data structure is recursive. I know we had problems like that with smart pointer pretty printers.
>
> I'd try some code like:
>
>   #include <ranges>
>   #include <vector>
>   
>   struct A {
>     std::ranges::ref_view<std::vector<A>> a;
>   };
>   
>   int main() {
>       std::vector<A> v;
>       v.push_back(A{v});
>       v[0].a = v;
>       // print v ?
>   }

@labath good point

E.g., the following would cause such unbounded recursion (didn't find a good way of triggering it using the actual ref_view since it's not default constructible, but it's probably doable):

  #include <vector>
  
  namespace std {
  inline namespace __1 {
  namespace ranges {
  template<typename T>
  struct ref_view {
      T* __range_;
  };
  }
  }
  }
  
  struct Foo {
      std::ranges::ref_view<std::vector<Foo>> a;
  };
  
  int main() {
      Foo f;
      std::vector<Foo> v;
      v.push_back(f);
  
      std::ranges::ref_view<std::vector<Foo>> r{.__range_ = &v};
      f.a = r;
  
      return 0;
  }


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D138558/new/

https://reviews.llvm.org/D138558



More information about the lldb-commits mailing list