Thread overview
[Issue 17845] [ICE] backend\cgcod.c 1677
[Issue 17845] [ICE] backend\cgcod.c 1677 static foreach
Sep 21, 2017
Mr. Smith
Sep 21, 2017
Mr. Smith
Sep 21, 2017
Mr. Smith
Sep 21, 2017
Mr. Smith
Sep 21, 2017
Mr. Smith
May 31, 2019
Basile-z
Mar 21, 2020
Basile-z
September 21, 2017
https://issues.dlang.org/show_bug.cgi?id=17845

Mr. Smith <mrsmith33@yandex.ru> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |ice

--
September 21, 2017
https://issues.dlang.org/show_bug.cgi?id=17845

--- Comment #1 from Mr. Smith <mrsmith33@yandex.ru> ---
This crashes with the same error

---
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)[]);
alias Formatter(Row) = void delegate(ref Row row, scope SinkT sink);

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

Formatter!Row[] parseRowInfo(Row)()
{
    import std.traits;
    Formatter!Row[] formatters;
    alias symbols = getSymbolsByUDA!(Row, Column!Row);
    foreach(i; 0..symbols.length)
    {
        formatters ~= getUDAs!(symbols, Column!Row)[0].formatter;
    }
    return formatters;
}
---

--
September 21, 2017
https://issues.dlang.org/show_bug.cgi?id=17845

Mr. Smith <mrsmith33@yandex.ru> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
            Summary|[ICE] backend\cgcod.c 1677  |[ICE] backend\cgcod.c 1677
                   |static foreach              |

--
September 21, 2017
https://issues.dlang.org/show_bug.cgi?id=17845

--- Comment #2 from Mr. Smith <mrsmith33@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;
}
---

--
September 21, 2017
https://issues.dlang.org/show_bug.cgi?id=17845

Mr. Smith <mrsmith33@yandex.ru> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |mrsmith33@yandex.ru

--
May 31, 2019
https://issues.dlang.org/show_bug.cgi?id=17845

Basile-z <b2.temp@gmx.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
                 CC|                            |b2.temp@gmx.com
           Hardware|x86_64                      |All
         Resolution|---                         |WORKSFORME
                 OS|Windows                     |All

--- Comment #3 from Basile-z <b2.temp@gmx.com> ---
All platform were affected, it was fixed since 2.072.2 : https://run.dlang.io/is/ppM9hz

--
March 21, 2020
https://issues.dlang.org/show_bug.cgi?id=17845

Basile-z <b2.temp@gmx.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|b2.temp@gmx.com             |

--