Bug 968 – ICE on compile-time execution

Status
RESOLVED
Resolution
FIXED
Severity
normal
Priority
P2
Component
dmd
Product
D
Version
D1 (retired)
Platform
x86
OS
All
Creation time
2007-02-15T13:40:00Z
Last change time
2014-02-16T15:21:39Z
Keywords
ice-on-invalid-code, ice-on-valid-code
Assigned to
bugzilla
Creator
fvbommel

Comments

Comment #0 by fvbommel — 2007-02-15T13:40:57Z
----- // 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...
Comment #1 by fvbommel — 2007-02-16T14:46:38Z
*** Bug 970 has been marked as a duplicate of this bug. ***
Comment #2 by fvbommel — 2007-02-16T14:48:00Z
Pragma re-reported this for Windows, so I guess that makes it an OS-independent bug.
Comment #3 by bugzilla — 2007-02-26T19:27:31Z
Fixed DMD 1.007
Comment #4 by thomas-dloop — 2007-03-11T06:20:09Z