Bug 6696 – Error messages for const/immutable arrays given to immutable/const
Status
RESOLVED
Resolution
FIXED
Severity
minor
Priority
P2
Component
dmd
Product
D
Version
D2
Platform
x86
OS
Windows
Creation time
2011-09-19T14:52:00Z
Last change time
2012-10-20T18:18:39Z
Keywords
diagnostic
Assigned to
nobody
Creator
bearophile_hugs
Comments
Comment #0 by bearophile_hugs — 2011-09-19T14:52:47Z
A wrong D2 program:
void foo(immutable ref int[5] a) {}
void bar(const ref int[5] a) {}
void main() {
const int[5] arr1;
foo(arr1); // line 5
immutable int[5] arr2;
bar(arr2); // line 7
}
DMD 2.055 prints:
test.d(5): Error: function test.foo (ref immutable immutable(int[5u]) a) is not callable using argument types (const(int[5u]))
test.d(5): Error: cast(immutable(int[5u]))arr1 is not an lvalue
test.d(7): Error: cast(const(int[5u]))arr2 is not an lvalue
The first error message is almost good, but why does it print "immutable immutable"?
I think the second error message is useless.
In line 7 the bar(arr2) call gives just a "arr2 is not an lvalue" that I think is not good enough.
So for this program I think a better error message printout is something like:
test.d(5): Error: function test.foo(ref immutable(int[5]) a) is not callable using argument types (const(int[5])).
test.d(7): Error: function test.foo(ref const(int[5]) a) is not callable using argument types (immutable(int[5])).
Comment #1 by andrej.mitrovich — 2012-10-20T18:18:39Z
Only error now is:
Error: function test.foo (ref immutable(int[5u]) a) is not callable using argument types (const(int[5u]))
line 7 is now allowed apparently.