D_Parser icon indicating copy to clipboard operation
D_Parser copied to clipboard

Stack overflow with `static foreach`

Open rainers opened this issue 6 years ago • 4 comments

This code (reduced from std.math) causes a stack overflow when trying to get a tooltip for Num.alignof:

import std.meta : AliasSeq;
deprecated("Please use std.complex")
static foreach (Num; AliasSeq!(cfloat, cdouble, creal, ifloat, idouble, ireal))
{
    auto abs(Num z) @safe pure nothrow @nogc
    {
	enum m = Num.alignof;
	return m;
    }
}

rainers avatar Oct 28 '18 18:10 rainers

Kann es sein, dass beim Auswerten des Tooltips eval=true ist, und dann der Wert evaluiert werden soll? Das ist noch nicht implementiert - abgesehen davon, dass ich nicht weiß, ob AliasSeq richtig ausgewertet wird^^

aBothe avatar Oct 28 '18 19:10 aBothe

Natürlich ist ein SO an der Stelle so oder so falsch.

aBothe avatar Oct 28 '18 19:10 aBothe

Passiert bereits beim ResolveTypeLoosely, auch mit meiner Ergänzung im TypeReferenceFinder.

rainers avatar Oct 28 '18 20:10 rainers

Hier ist noch en crash in dem Zusammenhang:

alias PageBits = size_t[4];

void sweep()
{
    Pool* pool = null;

    static foreach (w; 0 .. PageBits.length)
    {}

    if (pool.data)
    {
    }
}

rainers avatar Mar 29 '19 18:03 rainers