Bug 6545 – [CTFE] Hard-coded array operations not yet supported

Status
RESOLVED
Resolution
FIXED
Severity
normal
Priority
P2
Component
dmd
Product
D
Version
D2
Platform
All
OS
All
Creation time
2011-08-23T02:08:00Z
Last change time
2015-06-09T05:11:52Z
Keywords
CTFE, pull, rejects-valid
Assigned to
yebblies
Creator
bearophile_hugs

Comments

Comment #0 by bearophile_hugs — 2011-08-23T02:08:53Z
This is a spinoff of bug 6511 See there for more details. This D2 code: T foo(T)() { T[1] a = [1]; a[] += a[]; return a[0]; } static assert(foo!int() == 2); // error void main() {} DMD 2.055beta gives: test.d(3): Error: _arraySliceSliceAddass_i cannot be interpreted at compile time, because it has no available source code test.d(6): Error: cannot evaluate foo() at compile time test.d(6): Error: static assert (foo() == 2) is not evaluatable at compile time This behaviour difference between long and int is not good. Part of a comment by Don: > the array operations which are special-cased in the > runtime don't have special case treatment in the CTFE engine, since CTFE > doesn't have access to the source code of druntime. The array ops which aren't > special-cased don't use druntime code, so they should all work.
Comment #1 by yebblies — 2012-02-03T22:31:27Z
Comment #2 by github-bugzilla — 2013-05-12T13:29:12Z
Commits pushed to master at https://github.com/D-Programming-Language/dmd https://github.com/D-Programming-Language/dmd/commit/5ad8794e91e1da3103a38fa1165c5522a383667b Issue 6545 - [CTFE] Hard-coded array operations not yet supported Refactor array op generation and always generate a D version of the array operation. In the interpreter, if a FuncDeclaration with no body is encoutered, use the D version if it is an array operation. https://github.com/D-Programming-Language/dmd/commit/a3c6eaabe20ff32891e0deba106024113a13763a Merge pull request #694 from yebblies/issue6545 Issue 6545 - [CTFE] Hard-coded array operations not yet supported