[Issue 14299] New: [REG2.067.0-rc1] "ref" parameter in CTFE handled incorrectly for recursive calls
via Digitalmars-d-bugs
digitalmars-d-bugs at puremagic.com
Tue Mar 17 01:31:59 PDT 2015
https://issues.dlang.org/show_bug.cgi?id=14299
Issue ID: 14299
Summary: [REG2.067.0-rc1] "ref" parameter in CTFE handled
incorrectly for recursive calls
Product: D
Version: D2
Hardware: All
OS: All
Status: NEW
Keywords: ice-on-valid-code, wrong-code
Severity: regression
Priority: P1
Component: DMD
Assignee: nobody at puremagic.com
Reporter: sludwig at outerproduct.org
The following code works correctly in DMD 2.066.1:
```
string test2() {
string n;
return test(0, n);
}
string test(int idx, ref string name) {
string ret;
name = [cast(char)(idx + '0')];
ret ~= name;
if (idx < 2) {
string subname;
ret ~= test(idx+1, subname);
}
ret ~= name;
return ret;
}
static assert(test2() == "012210");
```
On DMD 2.067-rc1 it fails with:
Assertion failure: 'v->ctfeAdrOnStack >= 0 && v->ctfeAdrOnStack <
stackPointer()
' on line 182 in file 'interpret.c'
In the original, more complex, scenario instead of an ICE, the "name" variable
was silently corrupted instead and contained the contents of "subname" after
the recursive call to test().
--
More information about the Digitalmars-d-bugs
mailing list