digitalmars.D.bugs - [Issue 9935] New: static if evaluation of template causes OOM/stack overflow.
- d-bugmail puremagic.com (19/19) Apr 15 2013 http://d.puremagic.com/issues/show_bug.cgi?id=9935
- d-bugmail puremagic.com (7/7) Apr 15 2013 http://d.puremagic.com/issues/show_bug.cgi?id=9935
- d-bugmail puremagic.com (6/6) Apr 15 2013 http://d.puremagic.com/issues/show_bug.cgi?id=9935
- d-bugmail puremagic.com (17/17) Apr 15 2013 http://d.puremagic.com/issues/show_bug.cgi?id=9935
- d-bugmail puremagic.com (84/84) Oct 07 2013 http://d.puremagic.com/issues/show_bug.cgi?id=9935
- d-bugmail puremagic.com (13/13) Oct 07 2013 http://d.puremagic.com/issues/show_bug.cgi?id=9935
http://d.puremagic.com/issues/show_bug.cgi?id=9935 Summary: static if evaluation of template causes OOM/stack overflow. Product: D Version: D2 Platform: All OS/Version: All Status: NEW Severity: major Priority: P2 Component: DMD AssignedTo: nobody puremagic.com ReportedBy: ibuclaw ubuntu.com Found this when trying to reduce another bug. Attached problematic source. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Apr 15 2013
http://d.puremagic.com/issues/show_bug.cgi?id=9935 Created an attachment (id=1209) typetuple.d -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Apr 15 2013
http://d.puremagic.com/issues/show_bug.cgi?id=9935 Requires -unittest to reproduce. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Apr 15 2013
http://d.puremagic.com/issues/show_bug.cgi?id=9935 And here is the change that dustmite made to cause the bug. --- diff -pur bug.reduced/typetuple.d bug.test/typetuple.d --- bug.reduced/typetuple.d 2013-04-15 11:48:35.739230767 +0100 +++ bug.test/typetuple.d 2013-04-15 11:49:13.303231268 +0100 -34,7 +34,7 alias GenericReplace!(T, U, TList).resul template GenericReplace(args...) { -alias args[0]from; +alias args[]from; alias args[1]to; alias args[2 .. $] tuple; -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Apr 15 2013
http://d.puremagic.com/issues/show_bug.cgi?id=9935 Walter Bright <bugzilla digitalmars.com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |bugzilla digitalmars.com 00:10:09 PDT --- The example code: ------------------ template TypeTuple(TList...) { alias TList TypeTuple; } template staticIndexOf(T, TList...) { enum staticIndexOf = genericIndexOf!(T, TList).index; } template genericIndexOf(args...) { alias args[0]e; alias args[1 .. $] tuple; alias Alias!(tuple[0]) head; alias tuple[1 .. $] tail; static if (isSame!(e, head)) { enum index = 0; } else { enum next = genericIndexOf!(e, tail).index; enum index = (next == -1) ? -1 : 1 + next; } } template Replace(alias T, alias U, TList...) { alias GenericReplace!(T, U, TList).result Replace; } template GenericReplace(args...) { alias args[]from; alias args[1]to; alias args[2 .. $] tuple; alias Alias!(tuple[0]) head; alias tuple[1 .. $] tail; static if (isSame!(from, head)) alias TypeTuple!(to, tail) result; else alias TypeTuple!(head, GenericReplace!(from, to, tail).result) result; } unittest { static assert(Pack!(Replace!(1111, "11", 2222, 1111, 1111, 1111)). equals!(2222, "11", 1111, 1111)); } template Alias(a...) { alias a Alias; } template isSame(ab...) { static if (!__traits(compiles, expectType!ab) && __traits(compiles, expectBool!(ab[0] == ab[1]))) static if (!__traits(compiles) ) enum isSame = ab[0] == ab[1]; else enum isSame = (isSame); else enum isSame = __traits(isSame, ab, ab); } template expectBool(bool b) {} template Pack(T...) { template equals(U...) { static if (T.length == 0) enum equals = true; else enum equals = isSame!(T, U) && Pack!(T[1 .. $]).equals!(U); } } -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Oct 07 2013
http://d.puremagic.com/issues/show_bug.cgi?id=9935 Walter Bright <bugzilla digitalmars.com> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED Resolution| |WORKSFORME 00:11:48 PDT --- 2.064 head produces error message: test.d(53): Error: template instance test.Replace!(1111, "11", 2222, 1111, 1111, 1111) recursive expansion -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Oct 07 2013