Bug 6708 – immutable ref implicit cast to const ref

Status
RESOLVED
Resolution
FIXED
Severity
normal
Priority
P2
Component
dmd
Product
D
Version
D2
Platform
All
OS
All
Creation time
2011-09-21T13:48:00Z
Last change time
2013-01-17T20:28:10Z
Keywords
pull, rejects-valid
Assigned to
yebblies
Creator
bearophile_hugs

Comments

Comment #0 by bearophile_hugs — 2011-09-21T13:48:10Z
I think this is correct code because foo and bar can't change the contents of arr and x in any way: void foo(const ref int y) {} void bar(const ref int[5] a1) {} void spam(const ref int[] a2) {} void baz(const ref int[int] aa) {} void main() { immutable int x; foo(x); // Error? immutable int[5] arr1; bar(arr1); // Error? immutable int[] arr2; spam(arr2); // Error? immutable int[int] aa; baz(aa); // Error? } But DMD 2.055 gives errors: test.d(7): Error: constant 0 is not an lvalue test.d(9): Error: cast(const(int[5u]))arr1 is not an lvalue test.d(11): Error: cast(const(int[]))arr2 is not an lvalue test.d(13): Error: cast(const(int[int]))aa is not an lvalue See also a thread on this topic in D.learn: http://www.digitalmars.com/webnews/newsgroups.php?art_group=digitalmars.D.learn&article_id=29609
Comment #1 by yebblies — 2013-01-16T06:58:11Z
Only the first one gives an error now. Happening because the const-folder is overly aggressive. https://github.com/D-Programming-Language/dmd/pull/1496
Comment #2 by yebblies — 2013-01-16T07:06:19Z
*** Issue 7225 has been marked as a duplicate of this issue. ***
Comment #3 by github-bugzilla — 2013-01-17T18:45:15Z
Commits pushed to master at https://github.com/D-Programming-Language/dmd https://github.com/D-Programming-Language/dmd/commit/704240e0d391cbf76f45d4d5e8e2a87454494e11 Fix Issue 6708 - immutable ref implicit cast to const ref https://github.com/D-Programming-Language/dmd/commit/685d943a3af777621476239e200d895c6d375490 Merge pull request #1496 from yebblies/issue6708 Fix Issue 6708 - immutable ref implicit cast to const ref