[Issue 21097] New: [REG2.083] Stack exhaustion upon large struct .destroy

d-bugmail at puremagic.com d-bugmail at puremagic.com
Thu Jul 30 23:36:45 UTC 2020


https://issues.dlang.org/show_bug.cgi?id=21097

          Issue ID: 21097
           Summary: [REG2.083] Stack exhaustion upon large struct .destroy
           Product: D
           Version: D2
          Hardware: All
                OS: All
            Status: NEW
          Severity: regression
          Priority: P1
         Component: druntime
          Assignee: nobody at puremagic.com
          Reporter: johanengelen at weka.io

Testcase:
```
import std.stdio;

struct S {
 // doesn't have to be this large to exhaust the stack of course
    ubyte[10_000_000] i = [1,2];

    void close() { destroy(this); }
}

void main() {
   auto s = new S();
   s.close(); 
}
```

The problem is that the instantiated druntime template to write S.init to the
object uses a stack allocated temporary with the same size as the object -->
stack exhaustion. Prior versions used a global statically allocated variable
and thus did not have the problem. (but there was duplication of data)

There's been a lot of work on the object.destroy code for structs, I can't
trace back history easily.
What works: LDC 1.13.0 (dlang 2.083.1)
What doesn't: LDC 1.14 (dlang 2.084)

--


More information about the Digitalmars-d-bugs mailing list