Bug 7510 – implicit conversion to immutable fails for pure delegates and function pointers

Status
REOPENED
Severity
normal
Priority
P3
Component
dmd
Product
D
Version
D2
Platform
All
OS
All
Creation time
2012-02-15T10:41:38Z
Last change time
2024-12-13T17:58:23Z
Assigned to
No Owner
Creator
timon.gehr
Moved to GitHub: dmd#18414 →

Comments

Comment #0 by timon.gehr — 2012-02-15T10:41:38Z
DMD 2.058: void main(){ auto foo()pure{return new int[100];} immutable int[] x = foo(); // ok immutable int[] y = {return new int[100];}(); // ng immutable int[] z = delegate{return new int[100];}(); // ng } The code should compile.
Comment #1 by yebblies — 2013-11-26T21:57:22Z
As delegates/nested functions, they are not strongly pure and can access mutable data in the enclosing function. It works if they are made static.
Comment #2 by timon.gehr — 2013-11-27T08:14:30Z
(In reply to comment #1) > As delegates/nested functions, they are not strongly pure and can access > mutable data in the enclosing function. No, they can't because they don't. > It works if they are made static. That implies that this request is _valid_, not the opposite. Function literals have attributes inferred. The first step for making this pass is to even allow the 'immutable' attribute on strongly pure delegate literals. Note that the way purity is handled for delegate literals by DMD is wrong, since it has not been updated after the meaning of 'pure' was updated.
Comment #3 by robert.schadek — 2024-12-13T17:58:23Z
THIS ISSUE HAS BEEN MOVED TO GITHUB https://github.com/dlang/dmd/issues/18414 DO NOT COMMENT HERE ANYMORE, NOBODY WILL SEE IT, THIS ISSUE HAS BEEN MOVED TO GITHUB