This crashes the compiler: void foo(alias dg)() { dg(); } alias foo!( (int[] a...){} ) bar;
Another test case, involving a variable instead of a delegate literal: void bug6351(alias dg)() { dg(); } void delegate(int[] a...) deleg6351 = (int[] a...){}; alias bug6351!(deleg6351) baz6531; The problem is in expression.c, functionParameters(). The parameter 'fd' is NULL, but the function calls fd->isSafe(). In fact, 'fd' will be null for any kind of call involving a variable -- TOKvar, TOKdotvar, TOKindex, TOKstar, TOKcall, TOKdotti. For the delegate literal case, we can determine 'fd' in expression.c 7618. This will allow @safe inference for delegate literals as parameters. For the variable case, the function type should be used instead of fd. Lcheckargs: assert(tf->ty == Tfunction); + if (!f && e1->op == TOKfunction) + { + f = ((FuncExp *)e1)->fd; + }
*** Issue 6341 has been marked as a duplicate of this issue. ***
https://github.com/D-Programming-Language/dmd/pull/330
https://github.com/D-Programming-Language/dmd/commit/b9ee455e4e8c129b429d8e22fd4f6d15885274fb