Bug 4078 – [CTFE] Failed return of dynamic array item
Status
RESOLVED
Resolution
FIXED
Severity
normal
Priority
P2
Component
dmd
Product
D
Version
D2
Platform
x86
OS
Windows
Creation time
2010-04-10T16:41:00Z
Last change time
2015-06-09T05:13:46Z
Keywords
patch, rejects-valid
Assigned to
nobody
Creator
bearophile_hugs
Comments
Comment #0 by bearophile_hugs — 2010-04-10T16:41:23Z
int foo() {
int[] arr = new int[1];
return arr[0];
}
static assert(foo() == 0);
void main() {}
dmd 2.043 prints:
test1.d(5): Error: static assert (null == 0) is not evaluatable at compile time
Comment #1 by clugdbug — 2010-05-22T06:56:04Z
This patch also fixes bug 4052 which has the same root cause.
PATCH (svn 497): interpret.c, NewExp::interpret, line 1579.
return createBlockDuplicatedArrayLiteral(newtype,
- newtype->defaultInitLiteral(), lenExpr->toInteger());
+ ((TypeArray *)newtype)->next->defaultInitLiteral(),
+ lenExpr->toInteger());
TEST CASES FOR TEST SUITE:
int bug4078() {
int[] arr = new int[1];
return arr[0];
}
static assert(bug4078() == 0);
int bug4052() {
int[] arr = new int[1];
int s;
foreach (x; arr)
s += x;
foreach (x; arr)
s += x * x;
return 4052;
}
static assert(bug4052() == 4052);