----- // Slightly modified from example provided by // Walter upon introduction of v1.006 import std.stdio; real test(real x) { real root = x / 2; for (int ntries = 0; ntries < 5 || true; ntries++) { root = (root + x / root) / 2; } return root; } void main() { static x = test(); } ----- Error checking could be improved here, this gives: --- test.d(15): function test.test (real) does not match parameter types () test.d(15): Error: expected 1 arguments, not 0 dmd: interpret.c:96: Expression* FuncDeclaration::interpret(Expressions*): Assertion `parameters && parameters->dim == dim' failed. Aborted (core dumped) --- It tells you what's wrong, but still trips an assert that seems to be about the same error. However: ----- real test() { return 0.0; } void main() { static x = test(); } ----- it still gives: --- dmd: interpret.c:96: Expression* FuncDeclaration::interpret(Expressions*): Assertion `parameters && parameters->dim == dim' failed. Aborted (core dumped) --- The same assert is tripped, but I don't see why this would even be invalid code. So I don't know, maybe it's a different bug entirely. Or it tripped the other clause of the assert. I don't feel like inspecting interpret.c to find out what exactly the assert is checking and why it's false...
*** Bug 970 has been marked as a duplicate of this bug. ***
Pragma re-reported this for Windows, so I guess that makes it an OS-independent bug.
Fixed DMD 1.007
Added to DStress as http://dstress.kuehne.cn/run/i/interpret_04_A.d
AltStyle によって変換されたページ (->オリジナル) / アドレス: モード: デフォルト 音声ブラウザ ルビ付き 配色反転 文字拡大 モバイル