[Mono-bugs] [Bug 52586][Wis] New - We do not handle overriden overloads correctly

bugzilla-daemon@bugzilla.ximian.com bugzilla-daemon@bugzilla.ximian.com
Sun, 4 Jan 2004 12:03:50 -0500 (EST)

Please do not reply to this email- if you want to comment on the bug, go to the
URL shown below and enter your comments there.

Changed by bmaurer@users.sf.net.


--- shadow/52586	2004-01-04 12:03:50.000000000 -0500
+++ shadow/52586.tmp.29311	2004-01-04 12:03:50.000000000 -0500
@@ -0,0 +1,67 @@
+Bug#: 52586
+Product: Mono/Compilers
+Version: unspecified
+OS Details: 
+Status: NEW   
+Priority: Wishlist
+Component: C#
+AssignedTo: mono-bugs@ximian.com                            
+ReportedBy: bmaurer@users.sf.net               
+QAContact: mono-bugs@ximian.com
+TargetMilestone: ---
+Summary: We do not handle overriden overloads correctly
+In this example:
+using System;
+class A {
+	public virtual void Foo (int i)	{
+		Console.WriteLine ("A.Foo (int i)");
+	}
+	public virtual void Foo (double d) {
+		Console.WriteLine ("A.Foo (double d)");
+	}
+class B : A {
+	public override void Foo (double d) {
+		Console.WriteLine ("B.Foo (double d)");
+	}
+	public static void Main () {
+		new B ().Foo (1);
+	}
+We print
+B.Foo (double d)
+While MS prints
+A.Foo (int i)
+The problem is that according to the spec, 14.3 Member lookup:
+A member lookup of a name N in a type T is processed as follows:
+First, the set of all accessible (10.5) members named N declared in T and
+the base types (14.3.1) of T is constructed. >>> Declarations that include
+an override modifier are excluded from the set. <<< If no members named N
+exist and are accessible, then the lookup produces no match, and the
+following steps are not evaluated. 
+We do not abide by the clause `Declarations that include an override
+modifier are excluded from the set.' Our member lookup is returning B.Foo.
+As such, when we do overload resolve, we follow the clause:
+`6  If N is applicable with respect to A (, then all methods
+declared in a base type of T are removed from the set.'
+Thus, the int overload is incorrectly removed from the applicable members list.