[Issue 17845] [ICE] backend\cgcod.c 1677

d-bugmail at puremagic.com d-bugmail at puremagic.com
Thu Sep 21 09:13:38 UTC 2017


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

--- Comment #2 from Mr. Smith <mrsmith33 at yandex.ru> ---
Looks like the problem is with the use of delegate. When switching to function
it works.

---
void main()
{
    struct Row
    {
        @Column!Row((ref Row r, scope SinkT s){ s("test"); })
        uint fileSize;
    }
    auto formatters = parseRowInfo!Row;
}


alias SinkT = void delegate(const(char)[]);

// Internal error: ddmd\backend\cgcod.c 1677 when function -> delegate
alias Formatter(Row) = void function(ref Row row, scope SinkT sink);

struct Column(Row)
{
    Formatter!Row formatter;
}

Formatter!Row[] parseRowInfo(Row)()
{
    import std.traits;
    Formatter!Row[] formatters;
    Row r;
    foreach(string memberName; __traits(allMembers, Row))
    {
        foreach(attr; __traits(getAttributes, __traits(getMember, r,
memberName)))
        {
            static if (is(typeof(attr) == Column!Row))
            {
                formatters ~= attr.formatter;
            }
        }
    }
    return formatters;
}
---

--


More information about the Digitalmars-d-bugs mailing list