-----
// 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.