--- 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; static foreach(member; getSymbolsByUDA!(Row, Column!Row)) { formatters ~= getUDAs!(member, Column!Row)[0].formatter; } return formatters; } --- This is reduced case. I was trying to make this work without static in foreach, but adding static crashed the compiler. Win10 DMD 2.076 Doesn't crash on dpaste though.
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; } ---
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; } ---
All platform were affected, it was fixed since 2.072.2 : https://run.dlang.io/is/ppM9hz