[Issue 20230] New: segfault in dmd due to inconsistent conversion of function closure to delegate at compile time

d-bugmail at puremagic.com d-bugmail at puremagic.com
Thu Sep 19 13:00:21 UTC 2019


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

          Issue ID: 20230
           Summary: segfault in dmd due to inconsistent conversion of
                    function closure to delegate at compile time
           Product: D
           Version: D2
          Hardware: x86_64
                OS: Linux
            Status: NEW
          Severity: normal
          Priority: P1
         Component: dmd
          Assignee: nobody at puremagic.com
          Reporter: muffindrake at protonmail.ch

---
struct A {
    int delegate(int) f;
    int delegate(int) g;
}

A s;
A r = {
    f: delegate (int v) { return 41 + v; },
    g: (int v) { return 665 + v; }
};
A u = {
    f: delegate (int v) { return 41 + v; },
    g: delegate (int v) { return 665 + v; }
};

void
main()
{
    import std.stdio;

    s.f = delegate (int v) { return 41 + v; };
    s.g = (int v) { return 665 + v; };

    s.f(1).writeln;
    s.g(1).writeln;
    u.f(1).writeln;
    u.g(1).writeln;
    r.f(1).writeln;
    r.g(1).writeln; /* segfault on dmd */
}
---

I stumbled upon this issue through pure accident where I meant to be using
function instead of delegate in a structure field, and I only noticed the
problem when I compiled with dmd once in a blue moon, rather than ldc2 which
doesn't exhibit the segfault.

--


More information about the Digitalmars-d-bugs mailing list