[Mono-bugs] [Bug 475860] New: C# compiler reports error CS1501 for code that should compile without errors.
    bugzilla_noreply at novell.com 
    bugzilla_noreply at novell.com
       
    Fri Feb 13 16:26:22 EST 2009
    
    
  
https://bugzilla.novell.com/show_bug.cgi?id=475860
           Summary: C# compiler reports error CS1501 for code that should
                    compile without errors.
    Classification: Mono
           Product: Mono: Compilers
           Version: unspecified
          Platform: Macintosh
        OS/Version: Mac OS X 10.5
            Status: NEW
          Severity: Major
          Priority: P5 - None
         Component: C#
        AssignedTo: mono-bugs at lists.ximian.com
        ReportedBy: dmitchell at logos.com
         QAContact: mono-bugs at lists.ximian.com
          Found By: ---
User-Agent:       Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_6; en-us)
AppleWebKit/525.27.1 (KHTML, like Gecko) Version/3.2.1 Safari/525.27.1
Compiling the file listed below results in error CS1501 with gmcs
-target:library, but it works fine with csc (csc does provide a few warnings,
but it has no errors).
---
using System;
namespace MonoBug
{
    public abstract class Reference :
        IEquatable<Reference>,
        IComparable<Reference>,
        IComparable<ReferencePoint>,
        IComparable<ReferenceRange>
    {
        public abstract bool Equals(Reference other);
        public int CompareTo(Reference other)
        {
            if (other == null)
                return 1;
            var otherRange = other as ReferenceRange;
            if (otherRange != null)
                return CompareTo(otherRange);
            else
                return CompareTo((ReferencePoint)other);
        }
        public abstract int CompareTo(ReferencePoint other);
        public abstract int CompareTo(ReferenceRange other);
    }
    public class ReferenceRange : Reference, IEquatable<ReferenceRange>
    {
        public override bool Equals(Reference other)
        {
            return Equals(other as ReferenceRange);
        }
        public bool Equals(ReferenceRange other)
        {
            return Start.Equals(other.Start) && End.Equals(other.End);
        }
        public override int CompareTo(ReferencePoint other)
        {
            if (other == null)
                return 1;
            return -other.CompareTo(this);
        }
        public override int CompareTo(ReferenceRange other)
        {
            if (other == null)
                return 1;
            int nCompare = Start.CompareTo(other.Start);
            if (nCompare == 0)
                nCompare = End.CompareTo(other.End);
            return nCompare;
        }
        public ReferencePoint Start { get { return _start; } }
        public ReferencePoint End { get { return _end; } }
        ReferencePoint _start;
        ReferencePoint _end;
    }
    public class ReferencePoint : Reference, IEquatable<ReferencePoint>
    {
        public override bool Equals(Reference other)
        {
            return Equals(other as ReferencePoint);
        }
        public bool Equals(ReferencePoint other)
        {
            if (other == null)
                return false;
            return _value == other._value;
        }
        public override int CompareTo(ReferencePoint other)
        {
            return _value.CompareTo(other._value);
        }
        public override int CompareTo(ReferenceRange other)
        {
            if (other == null)
                return 1;
            int nCompare = CompareTo(other.Start);
            if (nCompare == 0)
                nCompare = -1;
            return nCompare;
        }
        int _value;
    }
}
Reproducible: Always
Steps to Reproduce:
1. Put the code listed above into a cs file
2. Run "gmcs -target:library your-file.cs" at a command prompt
Actual Results:  
gmcs reports error CS1501 for the call to CompareTo that occurs within
ReferencePoint.CompareTo(ReferenceRange other)
Expected Results:  
gmcs should output a library with no errors.
I have encountered similar errors with other method overloading/overriding
scenarios, particularly with GetHashCode, operator==, and others. Explicitly
upcasting the object on which the method is called often works around the
issue, but it occasionally causes runtime errors.
-- 
Configure bugmail: https://bugzilla.novell.com/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug.
You are the assignee for the bug.
    
    
More information about the mono-bugs
mailing list