March 29, 2023
https://issues.dlang.org/show_bug.cgi?id=23815

          Issue ID: 23815
           Summary: closure allocated even if the escape is opnly used to
                    access static members
           Product: D
           Version: D2
          Hardware: x86_64
                OS: Linux
            Status: NEW
          Keywords: performance
          Severity: enhancement
          Priority: P1
         Component: dmd
          Assignee: nobody@puremagic.com
          Reporter: b2.temp@gmx.com

# Summary

D allocates a closure for an escaped aggregate instance even if only used to access a static member.

# Example

```d
class C
{
    static int i;
}

auto v(C c)
{
    return {return c.i;}(); // it thinks `c` is escaped
}
```

# IR output

This is not a LDC bug but we can verify more easily that a closure is allocated using its IR output: https://godbolt.org/z/j3EvorjzY.

Note that it is not a dup of 17804. Here the escape is well on the stack, it is really that there should not be any escape.

--