Bug 18474

Summary: Mono C# compiler incorrectly emits CS0030 when converting type T2[] to T1[] where T1 and T2 are generic types constrained by "T1 : class, T2"
Product: [Mono] Compilers Reporter: emoriarty
Component: C#Assignee: Marek Safar <masafa>
Status: RESOLVED FIXED    
Severity: normal CC: mono-bugs+mono, sig-rnd-sat-mono-bugs
Priority: ---    
Version: unspecified   
Target Milestone: ---   
Hardware: All   
OS: All   
Tags: Is this bug a regression?: ---
Last known good build:

Description emoriarty 2014-03-19 16:43:45 UTC
The Mono C# compiler incorrectly emits CS0030 when converting type T2[] to T1[] where T1 and T2 are generic types constrained by "T1 : class, T2". Here is a reproducer for this issue.

===== Test.cs =====
     1  class A<T1,T2> where T1 : class, T2 {
     2      public void Foo(T2[] array) {
     3          T1[] a = (T1[]) array;
     4      }
     5  }
===== End of Test.cs =====

Command Lines:

#From Visual Studio 2013 command prompt
$ csc.exe /target:library Test.cs
Microsoft (R) Visual C# Compiler version 12.0.21005.1
for C# 5
Copyright (C) Microsoft Corporation. All rights reserved.

# From Mono-3.2.6 command prompt
$ mcs /target:library Test.cs
test-files/Test_CS0030.cs(3,25): error CS0030: Cannot convert type `T2[]' to `T1[]'
Compilation failed: 1 error(s), 0 warnings

Other Testing:
# Mono
2.11.4.0: fail
3.0.0.0: fail
3.0.7.0: fail
3.1.1.0: fail
3.2.6.0: fail
master/652615f0a22: fail

# csc via developer command prompts.
VS2008: pass
VS2010: pass
VS2013: pass

Edward Moriarty | Junior Engineer
Coverity | The Leader in Development Testing
Comment 1 Marek Safar 2014-05-21 06:51:14 UTC
Fixed in master