http://bugzilla.novell.com/show_bug.cgi?id=532571


           Summary: Compiler throws exception when dealing with broken
                    code
    Classification: Mono
           Product: Mono: Compilers
           Version: unspecified
          Platform: Other
        OS/Version: Other
            Status: NEW
          Severity: Minor
          Priority: P5 - None
         Component: C#
        AssignedTo: [email protected]
        ReportedBy: [email protected]
         QAContact: [email protected]
          Found By: ---


Compile:

using System;

public class Foo<T> where T : IComparable<T>
{
    public string Test () {
        return null;
    }
}

public class Foo
{
    public string Test<T> () where T : IComparable<T>
    {
        return null;
    }
}

public static class Driver
{
    static void UseBrokenMethod () {
        new Foo().Test<int> ();
    }

    static void UseBrokenType () {
        return Foo<int> ().Test ();
    }

    public static int Main () {
        try {
            var t = typeof (Foo);
            var m = t.GetMethod ("Test");
            var gma = m.GetGenericArguments () [0];
            var res = gma.GetGenericParameterConstraints () [0];
            UseBrokenMethod ();
            return 1;
        } catch (TypeLoadException) {}

        try {
            var t = typeof (Foo<>);
            var gta = t.GetGenericArguments () [0];
            var res = gta.GetGenericParameterConstraints () [0];
            UseBrokenType ();
            return 2;
        } catch (TypeLoadException) {}
        return 0;
    }

}

Results in:
dd.cs(25,17): error CS0127: `Driver.UseBrokenType()': A return keyword must not
be followed by any expression when method returns void
Internal compiler error at dd.cs(24,21):: exception caught while emitting
MethodBuilder [Driver::UseBrokenType]

Unhandled Exception: System.InvalidOperationException: Type is not generic
  at System.Reflection.Emit.TypeBuilder.GetGenericTypeDefinition () [0x00000] 
  at Mono.CSharp.GenericTypeExpr..ctor (System.Type t,
Mono.CSharp.TypeArguments args, Location l) [0x00000] 
  at Mono.CSharp.SimpleName.ResolveAsTypeStep (IResolveContext ec, Boolean
silent) [0x00000] 
  at Mono.CSharp.SimpleName.DoSimpleNameResolve (Mono.CSharp.EmitContext ec,
Mono.CSharp.Expression right_side, Boolean intermediate) [0x00000] 
..

-- 
Configure bugmail: http://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.
_______________________________________________
mono-bugs maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-bugs

Reply via email to