Bug 6838 – Covariant return types don't work with static arrays

Status
RESOLVED
Resolution
FIXED
Severity
normal
Priority
P2
Component
dmd
Product
D
Version
D2
Platform
x86
OS
Windows
Creation time
2011-10-22T09:07:00Z
Last change time
2012-05-04T16:06:07Z
Keywords
wrong-code
Assigned to
nobody
Creator
pszturmaj

Comments

Comment #0 by pszturmaj — 2011-10-22T09:07:48Z
This is an example from http://d-programming-language.org/function.html, but with changed return types: class Foo { int[] test() { return null; } } class Bar : Foo { int[2] test() { return [1, 2]; } // overrides and is covariant with Foo.test() } // and here's additional test code: void main() { Foo f = new Bar(); auto arr = f.test(); assert(arr.length == 2); } This code compiles but fails on assert. Returned arr.length is 1 and accessing the first element of that array results in access violation. Given that static arrays are implicitly convertible to dynamic arrays, it should work. If not, it at least should not compile.
Comment #1 by lovelydear — 2012-04-20T17:00:57Z
This no longer compiles on 2.059 Win32: PS E:\DigitalMars\dmd2\samples> rdmd bug.d bug.d(6): Error: function bug.Bar.test of type int[2u]() overrides but is not covariant with bug.Foo.test of type int[]() Failed: "dmd" "-v" "-o-" "bug.d" "-I." PS E:\DigitalMars\dmd2\samples>
Comment #2 by lovelydear — 2012-05-01T15:28:26Z
Should be closed as FIXED.
Comment #3 by lovelydear — 2012-05-04T16:06:07Z
Code returns a sound compilation error.