Thread overview | ||||||||
---|---|---|---|---|---|---|---|---|
|
November 23, 2010 [Issue 5258] New: [CTFE] Stack overflow with struct by ref | ||||
---|---|---|---|---|
| ||||
http://d.puremagic.com/issues/show_bug.cgi?id=5258 Summary: [CTFE] Stack overflow with struct by ref Product: D Version: D2 Platform: x86 OS/Version: Windows Status: NEW Keywords: rejects-valid Severity: normal Priority: P2 Component: DMD AssignedTo: nobody@puremagic.com ReportedBy: bearophile_hugs@eml.cc --- Comment #0 from bearophile_hugs@eml.cc 2010-11-22 17:09:12 PST --- This D2 program generates a Stack Overflow with DMD 2.050 despite the stack dept is very small: struct Foo { int x; } void bar(int n, ref Foo f) { if (n) bar(n - 1, f); else f.x++; } int spam() { bar(1, Foo()); return 0; } enum _ = spam(); void main() {} -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
May 06, 2011 [Issue 5258] [CTFE] Stack overflow with struct by ref | ||||
---|---|---|---|---|
| ||||
Posted in reply to bearophile_hugs@eml.cc | http://d.puremagic.com/issues/show_bug.cgi?id=5258 bearophile_hugs@eml.cc changed: What |Removed |Added ---------------------------------------------------------------------------- Severity|normal |regression --- Comment #1 from bearophile_hugs@eml.cc 2011-05-06 02:51:16 PDT --- This CTFE bug is present in DMD v1.068beta still, but it seems absent in DMD v1.042. A longer example that gives the correct answer with DMD 1.042 but produces stack overflow with DMD v1.068beta: import std.c.stdio: printf; bool test(int k, int j, ulong diag45, ulong diag135, ulong cols) { return ((cols & (1UL << j)) + (diag135 & (1UL << (j + k))) + (diag45 & (1UL << (32 + j - k))) ) == 0; } void mark(int k, int j, ref ulong diag45, ref ulong diag135, ref ulong cols) { cols ^= (1UL << j); diag135 ^= (1UL << (j + k)); diag45 ^= (1UL << (32 + j - k)); } uint solve(int niv, int dx, ref ulong diag45, ref ulong diag135, ref ulong cols) { uint solutions_found; if (niv) { for (int i = 0; i < dx; i++) if (test(niv, i, diag45, diag135, cols)) { mark(niv, i, diag45, diag135, cols); solutions_found += solve(niv - 1, dx, diag45, diag135, cols); mark(niv, i, diag45, diag135, cols); } } else { for (int i = 0; i < dx; i++) solutions_found += test(0, i, diag45, diag135, cols); } return solutions_found; } ulong nqueen(int n) { // masques ulong diag45 = 0; // / diagonal bitboard ulong diag135 = 0; // \ diagonal bitboard ulong cols = 0; // column bitboard return solve(n - 1, n, diag45, diag135, cols); } const ulong result = nqueen(9); void main() { // NQUEENS: 1, 0, 0, 2, 10, 4, 40, 92, 352, 724, 2_680, 14_200, 73_712, 365_596 printf("%lld\n", result); } -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
May 06, 2011 [Issue 5258] [CTFE] Stack overflow with struct by ref | ||||
---|---|---|---|---|
| ||||
Posted in reply to bearophile_hugs@eml.cc | http://d.puremagic.com/issues/show_bug.cgi?id=5258 --- Comment #2 from Don <clugdbug@yahoo.com.au> 2011-05-06 04:09:57 PDT --- This is a pseudo-regression: it was never doing what it was supposed to. The test case happened to give the correct results on a previous version, but only because one bug hid another. Slight changes would make it fail. Ref parameters are not going to work reliably in CTFE until pointers are implemented. Which is not happening in this release. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
May 17, 2011 [Issue 5258] [CTFE] Stack overflow with struct by ref | ||||
---|---|---|---|---|
| ||||
Posted in reply to bearophile_hugs@eml.cc | http://d.puremagic.com/issues/show_bug.cgi?id=5258 --- Comment #3 from Don <clugdbug@yahoo.com.au> 2011-05-17 14:22:02 PDT --- The bug reported in comment 1 is bug 5845, which is a different bug. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
May 27, 2011 [Issue 5258] [CTFE] Stack overflow with struct by ref | ||||
---|---|---|---|---|
| ||||
Posted in reply to bearophile_hugs@eml.cc | http://d.puremagic.com/issues/show_bug.cgi?id=5258 Don <clugdbug@yahoo.com.au> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED Resolution| |FIXED --- Comment #4 from Don <clugdbug@yahoo.com.au> 2011-05-27 12:52:46 PDT --- https://github.com/D-Programming-Language/dmd/commit/ff385f5a931b52eea27430ae6d4c6658876f05f0 -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
June 12, 2011 [Issue 5258] [CTFE] Stack overflow with struct by ref | ||||
---|---|---|---|---|
| ||||
Posted in reply to bearophile_hugs@eml.cc | http://d.puremagic.com/issues/show_bug.cgi?id=5258 Don <clugdbug@yahoo.com.au> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |verylonglogin.reg@gmail.com --- Comment #5 from Don <clugdbug@yahoo.com.au> 2011-06-11 22:33:41 PDT --- *** Issue 6131 has been marked as a duplicate of this issue. *** -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
Copyright © 1999-2021 by the D Language Foundation