[Mono-bugs] [Bug 406702] New: Compiler bug with anonymous method

bugzilla_noreply at novell.com bugzilla_noreply at novell.com
Mon Jul 7 05:39:50 EDT 2008


https://bugzilla.novell.com/show_bug.cgi?id=406702


           Summary: Compiler bug with anonymous method
           Product: Mono: Compilers
           Version: SVN
          Platform: Other
        OS/Version: Other
            Status: NEW
          Severity: Normal
          Priority: P5 - None
         Component: C#
        AssignedTo: mono-bugs at lists.ximian.com
        ReportedBy: informatique.internet at fiducial.fr
         QAContact: mono-bugs at lists.ximian.com
          Found By: ---


I've found this problem while trying to compile galaxium from svn with mono
from svn... (http://monoport.com/27829)

I've extracted a mini test case which shows the problem : 

try to compile this :


// Main.cs created with MonoDevelop
// User: hubert at 11:12 07/07/2008
//
// To change standard headers go to Edit->Preferences->Coding->Standard Headers
//
using System;

namespace AnonTest
{
        public interface IMsnCommand
                {
                        string Command { get; }
                        int TransactionID { get; set; }
                        bool ExpectResponse { get; }

                        bool IsPayloadIn { get; }
                        bool IsPayloadOut { get; }
                        bool IsTransIn { get; }
                        bool IsTransOut { get; }

                        string ToCommandString ();
                        byte[] ToByteArray ();
                } 

        public delegate void CommandHandler<T> (T cmd) where T : IMsnCommand;
                public delegate void CommandHandler (IMsnCommand cmd);
                public delegate void VoidDelegate ();

        class MainClass
        {





                public static void Main(string[] args)
                {
                        Console.WriteLine("Hello World!");
                        MainClass mainclass=new MainClass();
                        mainclass.Test="1";
                }

                public string Test
                {
                        get{
                                return "";
                        }
                        set
                        {
                                Session.Send(new CommandHandler(delegate{
                                        MyClass handle=new MyClass();
                                        Remove(handle,delegate{
                                                MyClass exprhandle=new
MyClass();
                                                Remove(exprhandle,delegate{
                                                Store(handle);
                                                });
                                        });
                                }));
                        }
                }

                public void Remove(MyClass handle,VoidDelegate callback)
                {
                        callback();
                }

                public void Store(MyClass handle)
                {
                }
        }

        public class MyClass{
        }

        public class Session{

                public static void Send(CommandHandler handler){

                }



        }
}

It crashes with :

Exception caught by the compiler while emitting:
   Block that caused the problem begin at:
/home/hubert/Projects/AnonTest/Main.cs(52,63):
System.NullReferenceException: Object reference not set to an instance of an
object
Internal compiler error at /home/hubert/Projects/AnonTest/Main.cs(52,55)::
exception caught while emitting MethodBuilder [<Test>c__AnonStorey0::<>m__1]


Unhandled Exception: System.NullReferenceException: Object reference not set to
an instance of an object
  at Mono.CSharp.AnonymousMethodBody.Emit (Mono.CSharp.EmitContext ec)
[0x00000] 
  at Mono.CSharp.Argument.Emit (Mono.CSharp.EmitContext ec) [0x00000] 
  at Mono.CSharp.Invocation.EmitArguments (Mono.CSharp.EmitContext ec,
System.Collections.ArrayList arguments, Boolean dup_args,
Mono.CSharp.LocalTemporary this_arg) [0x00000] 
  at Mono.CSharp.Invocation.EmitCall (Mono.CSharp.EmitContext ec, Boolean
is_base, Mono.CSharp.Expression instance_expr, System.Reflection.MethodBase
method, System.Collections.ArrayList Arguments, Location loc, Boolean dup_args,
Boolean omit_args) [0x00000] 
  at Mono.CSharp.Invocation.EmitCall (Mono.CSharp.EmitContext ec, Boolean
is_base, Mono.CSharp.Expression instance_expr, System.Reflection.MethodBase
method, System.Collections.ArrayList Arguments, Location loc) [0x00000] 
  at Mono.CSharp.MethodGroupExpr.EmitCall (Mono.CSharp.EmitContext ec,
System.Collections.ArrayList arguments) [0x00000] 
  at Mono.CSharp.Invocation.Emit (Mono.CSharp.EmitContext ec) [0x00000] 
  at Mono.CSharp.Invocation.EmitStatement (Mono.CSharp.EmitContext ec)
[0x00000] 
  at Mono.CSharp.StatementExpression.DoEmit (Mono.CSharp.EmitContext ec)
[0x00000] 
  at Mono.CSharp.Statement.Emit (Mono.CSharp.EmitContext ec) [0x00000] 
  at Mono.CSharp.Block.DoEmit (Mono.CSharp.EmitContext ec) [0x00000] 
  at Mono.CSharp.Block.Emit (Mono.CSharp.EmitContext ec) [0x00000] 
  at Mono.CSharp.ExplicitBlock.Emit (Mono.CSharp.EmitContext ec) [0x00000] 
  at Mono.CSharp.ToplevelBlock.Emit (Mono.CSharp.EmitContext ec) [0x00000] 
  at Mono.CSharp.EmitContext.EmitResolvedTopBlock (Mono.CSharp.ToplevelBlock
block, Boolean unreachable) [0x00000] 
  at Mono.CSharp.EmitContext.EmitTopBlock (IMethodData md,
Mono.CSharp.ToplevelBlock block) [0x00000] 

It will crash with


-- 
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