Bug 5147 – [CTFE] Return fixed-sized matrix

Status
RESOLVED
Resolution
FIXED
Severity
normal
Priority
P2
Component
dmd
Product
D
Version
D2
Platform
x86
OS
Windows
Creation time
2010-10-31T14:20:00Z
Last change time
2011-04-08T21:20:10Z
Keywords
rejects-valid
Assigned to
nobody
Creator
bearophile_hugs

Comments

Comment #0 by bearophile_hugs — 2010-10-31T14:20:21Z
This is borderline between enhancement and rejects-valid bug report. DMD 2.050 doesn't support this code: int[1][1] foo() { int[1][1] a; return a; } enum int[1][1] m1 = foo(); immutable int[1][1] m2 = foo(); void main() {} Errors generated: test.d(2): Error: Slice operation a[] = 0 cannot be evaluated at compile time test.d(5): Error: cannot evaluate foo() at compile time This code is very useful to initialize an enum/immutable global matrix.
Comment #1 by michal.minich — 2010-10-31T14:49:37Z
I would like to point out that this code works: int[1] foo2() { int[1] a; return a; } enum int[1] m3 = foo2(); immutable int[1] m4 = foo2(); void main() {}
Comment #2 by bearophile_hugs — 2010-10-31T16:31:43Z
See also bug 5081 for a different solution
Comment #3 by clugdbug — 2011-04-08T21:20:10Z
This is definitely a bug, not an enhancement. It applies to any use of multidimensional static arrays in CTFE (not just return values). Thus, it also applies to D1. Fixed. D1: https://github.com/D-Programming-Language/dmd/commit/ef2a0f1da10331c4de102ca3e029ea1c1c1a46bf D2: https://github.com/D-Programming-Language/dmd/commit/0219a5f0dcc88076759a4c472582954d0fb804b0