It's not yet possible to make a test case which should compile without error. But this one segfaults on 2.050. --- int function() bug5159 = function int() { return 27; }; static assert(bug5159()); --- PATCH: interpret.c, CallExp::interpret(), line 2715. if (ecall->op == TOKstar) { // Calling a function pointer Expression * pe = ((PtrExp*)ecall)->e1; if (pe->op == TOKvar) { VarDeclaration *vd = ((VarExp *)((PtrExp*)ecall)->e1)->var->isVarDeclaration(); if (vd && vd->value && vd->value->op == TOKsymoff) fd = ((SymOffExp *)vd->value)->var->isFuncDeclaration(); else { - ecall = vd->value->interpret(istate); + ecall = getVarExp(loc, istate, vd); + if (ecall == EXP_CANT_INTERPRET) + return ecall; if (ecall->op == TOKsymoff) fd = ((SymOffExp *)ecall)->var->isFuncDeclaration(); }
http://www.dsource.org/projects/dmd/changeset/752