Bug 28201

Summary: Mono C# compiler incorrectly emits CS0229 when referencing from a DLL a property in an interface that hides a method from an interface that it is derived from.
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: PC   
OS: Mac OS   
Tags: Is this bug a regression?: ---
Last known good build:

Description emoriarty 2015-03-19 12:45:47 UTC
Mono C# compiler incorrectly emits CS0229 when referencing from a DLL a property in an interface that hides a method from an interface that it is derived from. 

------------
$ cat A.cs
------------
using Reference;
class A
{
    void Foo(IA a) {
        IB b = a.Equals;
    }
}

-------------------
$ cat Reference.cs
-------------------
namespace Reference
{
    public interface IB {}
    public interface IA : IHide
    {
        new IB Equals { get; }
    }
    public interface IHide
    {
        bool Equals(object o);
    }
}

--------------------------
$ csc /t:library Reference.cs
--------------------------
Microsoft (R) Visual C# Compiler version 4.0.30319.18408
for Microsoft (R) .NET Framework 4.5
Copyright (C) Microsoft Corporation. All rights reserved.

-----------------------------------
$ csc /t:library /r:Reference.dll A.cs
-----------------------------------
Microsoft (R) Visual C# Compiler version 4.0.30319.18408
for Microsoft (R) .NET Framework 4.5
Copyright (C) Microsoft Corporation. All rights reserved.

-----------------
$ mcs --version
-----------------
Mono C# compiler version 3.8.0.0

-------------------------------
$ mcs /t:library Reference.cs 
-------------------------------

---------------------------------------
$ mcs /t:library /r:Reference.dll A.cs 
---------------------------------------
A.cs(5,18): error CS0229: Ambiguity between `Reference.IHide.Equals(object)' and `Reference.IA.Equals'
/home/emoriarty/testing/73585/Reference.dll (Location of the symbol related to previous error)
A.cs(5,18): error CS0428: Cannot convert method group `Equals' to non-delegate type `Reference.IB'. Consider using parentheses to invoke the method
Compilation failed: 2 error(s), 0 warnings


If both files are compiled on the same command line everything is ok.
------------------------------------
$ mcs /t:library  A.cs Reference.cs
------------------------------------


Edward Moriarty | Junior Engineer
Coverity | The Leader in Development Testing
Comment 1 Marek Safar 2015-03-27 06:27:39 UTC
Fixed in master