https://gcc.gnu.org/bugzilla/show_bug.cgi?id=112307

Richard Biener <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |redi at gcc dot gnu.org

--- Comment #4 from Richard Biener <rguenth at gcc dot gnu.org> ---
I don't quite see how

  return EnumeratorRange(Enumerator(std::views::single(Intersection())));

makes CompositeMesh::Intersections() return an object that refers to itself
but points-to doesn't consider it could:

callarg(12) = &mesh
...
ESCAPED = &mesh
intersections = NONLOCAL
intersections = callarg(12)

debugging at -O0 shows

(gdb) p intersections
$1 = {enumerator_ = {
    range_ =
{<std::ranges::view_interface<std::ranges::single_view<Intersection> >> = {<No
data fields>}, _M_value = {_M_value = {is_boundary_ = true}}}, 
    begin_ = std::optional<Intersection *> = {
      [contained value] = 0x7fffffffde80}}, end_reached_ = false}
(gdb) p &intersections
$2 = (EnumeratorRange<CompositeMesh::Intersections() const::Enumerator> *)
0x7fffffffde80

so it contains a reference to itself.  As said this feels like those other
issues which are maybe invalid because of object lifetimes.

But maybe there's sth special here.

Reply via email to