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);
Comment #2 by bugzilla — 2010-05-30T16:30:17Z