www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 23859] New: [REG 2.103] Throwing while in a deep callstack

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

          Issue ID: 23859
           Summary: [REG 2.103] Throwing while in a deep callstack causes
                    memory corruption
           Product: D
           Version: D2
          Hardware: All
                OS: Windows
            Status: NEW
          Severity: regression
          Priority: P1
         Component: druntime
          Assignee: nobody puremagic.com
          Reporter: r.sagitario gmx.de

When compiling this snippet 

module test;
void* recurse(int n)
{
        if (n > 0)
                return recurse(n - 1) + 1; // avoid tail call optimization
        throw new Exception("cancel");
}

void main()
{
        try
        {
                recurse(200);
        }
        catch(Exception e)
        {
        }
}

with dmd 2.103.0 and running it on Windows with

 dmd -m64 test.d
 test.exe
 echo %errorlevel%
-1073740940 The exit code is 0xC0000374 and reports a critical error, a heap corruption in this case. --
Apr 24 2023