[Mono-bugs] [Bug 656918] Unexpected "method argument length mismatch" in System.Delegate.CreateDelegate
    bugzilla_noreply at novell.com 
    bugzilla_noreply at novell.com
       
    Tue Dec 14 06:48:23 EST 2010
    
    
  
https://bugzilla.novell.com/show_bug.cgi?id=656918
https://bugzilla.novell.com/show_bug.cgi?id=656918#c2
Jb Evain <jbevain at novell.com> changed:
           What    |Removed                     |Added
----------------------------------------------------------------------------
          Component|Sys.Core                    |C#
            Version|2.6.x                       |SVN
         AssignedTo|jbevain at novell.com          |msafar at novell.com
            Product|Mono: Class Libraries       |Mono: Compilers
--- Comment #2 from Jb Evain <jbevain at novell.com> 2010-12-14 11:48:22 UTC ---
This is actually a compiler issue.
Test case to be compiled with dmcs:
<<<<<<<<<<<<<<<<<<
using System;
using System.Linq.Expressions;
using System.Reflection;
class Foo {
    public void OnBaz (IBaz baz)
    {
    }
}
interface IBar {
    void RunOnBaz (Action<IBaz> action);
}
interface IBaz {
}
class Program {
    static void Main ()
    {
        var foo = new Foo ();
        Test (bar => bar.RunOnBaz (foo.OnBaz));
    }
    static void Test (Expression<Action<IBar>> expression)
    {
        var flags = BindingFlags.Static | BindingFlags.Instance |
BindingFlags.Public | BindingFlags.NonPublic;
        Console.WriteLine (
            typeof (Expression).GetProperty ("DebugView", flags).GetValue
(expression, null));
    }
}
<<<<<<<<<<<<<<<<<<
dmcs seems to pass a null constant argument to the this parameter of
CreateDelegate.
The binary produced by csc works on .net and on Mono:
<<<<<<<<<<<<<<<<<<
Lambda #Lambda1<System.Action`1[IBar]>(IBar $bar) {
    .Call $bar.RunOnBaz((System.Action`1[IBaz]).Call
System.Delegate.CreateDelegate(
            .Constant<System.Type>(System.Action`1[IBaz]),
           
Constant<Program+<>c__DisplayClass0>(Program+<>c__DisplayClass0).foo,
            .Constant<System.Reflection.MethodInfo>(Void OnBaz(IBaz))))
}
<<<<<<<<<<<<<<<<<<
The binary produced by dmcs doesn't work, neither on .net, nor on Mono:
<<<<<<<<<<<<<<<<<<
Lambda #Lambda1<System.Action`1[IBar]>(IBar $bar) {
    .Call $bar.RunOnBaz((System.Action`1[IBaz]).Call
System.Delegate.CreateDelegate(
            .Constant<System.Type>(System.Action`1[IBaz]),
            null,
            .Constant<System.Reflection.MethodInfo>(Void OnBaz(IBaz))))
}
<<<<<<<<<<<<<<<<<<
-- 
Configure bugmail: https://bugzilla.novell.com/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug.
    
    
More information about the mono-bugs
mailing list