[Issue 2962] ICE(glue.c) or bad codegen passing variable as template value parameter
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Sun Jan 30 08:09:54 PST 2011
http://d.puremagic.com/issues/show_bug.cgi?id=2962
Rainer Schuetze <r.sagitario at gmx.de> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |r.sagitario at gmx.de
--- Comment #30 from Rainer Schuetze <r.sagitario at gmx.de> 2011-01-30 08:07:38 PST ---
I've also hit this issue today after updating to the latest dmd and runtime
from github.
As there is no hint where the problem is in my project, I took a look at the
last test case, and figured out a few things:
- the template instantiation for foo is added to module a, but the
instantiation of inner is added to module b.
- the error is triggered because the code for the inner function is generated
before the code for the outer function. Hence the reliance on the order of
modules on the command line.
- that made me think, that it might be ok to just skip the test, but the
following code shows, that it does not work because the inner function needs
the stack offset which is only calculated when the outer function is generated:
// module b
T foo(T)(T p, int q)
{
T inner(U)() {
return p;
}
return inner!int();
}
// module a
import b;
void main()
{
assert(foo!int(5, 2) == 5);
}
fails for "dmd b.a b.d", but not for "dmd a.d b.d".
Is there a good reason why the inner function is generated into a different
module than the outer function?
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
More information about the Digitalmars-d-bugs
mailing list