Bug 18639

Summary: Mono C# compiler incorrectly emits CS1674 when a type's relationship to IDisposable is defined through multiple type parameter constraints
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-28 14:21:06 UTC
The Mono C# compiler incorrectly emits CS1674 when a types relationship to IDisposable is defined through multiple type parameter constraints.

===== Test.cs =====
     1  class R<T, U>
     2  where T : System.IDisposable
     3  where U : T
     4  {
     5    void M(U u) { using(u) {} }
     6  }
===== 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 line
$ mcs /target:library Test.cs
Mono C# compiler version 3.2.6.0
Test.cs(5,23): error CS1674: `U': type used in a using statement must be implicitly convertible to `System.IDisposable'
Test.cs(1,12): (Location of the symbol related to previous error)
Compilation failed: 1 error(s), 0 warnings

Other Tested Mono Versions
# 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/02b95e955: fail

Edward Moriarty | Junior Engineer
Coverity | The Leader in Development Testing
Comment 1 Marek Safar 2014-05-02 04:13:17 UTC
Fixed in master