[Mono-bugs] [Bug 78130][Min] New - Anonymous method inside anonymous method causes compiler crash

bugzilla-daemon at bugzilla.ximian.com bugzilla-daemon at bugzilla.ximian.com
Mon Apr 17 21:46:43 EDT 2006


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 atsushi at ximian.com.

http://bugzilla.ximian.com/show_bug.cgi?id=78130

--- shadow/78130	2006-04-17 21:46:43.000000000 -0400
+++ shadow/78130.tmp.30797	2006-04-17 21:46:43.000000000 -0400
@@ -0,0 +1,112 @@
+Bug#: 78130
+Product: Mono: Compilers
+Version: 1.0
+OS: 
+OS Details: 
+Status: NEW   
+Resolution: 
+Severity: 
+Priority: Minor
+Component: C#
+AssignedTo: rharinath at novell.com                            
+ReportedBy: atsushi at ximian.com               
+QAContact: mono-bugs at ximian.com
+TargetMilestone: ---
+URL: 
+Cc: 
+Summary: Anonymous method inside anonymous method causes compiler crash
+
+The following code causes compiler crash. The method invocation (Whoa()) is
+needed to reproduce the problem.
+
+public delegate void FooHandler ();
+
+public class Test
+{
+        public Test ()
+        {
+                FooHandler h = delegate () {
+                        FooHandler f = new FooHandler (delegate () {
+                                Whoa ();
+                        });
+                };
+        }
+
+        void Whoa ()
+        {
+        }
+}
+
+
+Actual Results:
+
+atsushi at linux-ymaf:~/tests/gmcs> mcs require-sync.cs
+require-sync.cs(8,15): warning CS0219: The variable `f' is assigned but its
+value is never used
+require-sync.cs(7,14): warning CS0219: The variable `h' is assigned but its
+value is never used
+
+Unhandled Exception: System.Exception: Trying to emit a local from a
+different ILGenerator.
+in <0x005e4> System.Reflection.Emit.ILGenerator:Emit (OpCode opcode,
+System.Reflection.Emit.LocalBuilder lbuilder)
+in <0x0006f> Mono.CSharp.ScopeInfo:EmitScopeInstance
+(System.Reflection.Emit.ILGenerator ig)
+in <0x0008a> Mono.CSharp.CaptureContext:EmitMethodHostInstance
+(Mono.CSharp.EmitContext target, Mono.CSharp.AnonymousContainer am)
+in <0x0001f> Mono.CSharp.EmitContext:EmitMethodHostInstance
+(Mono.CSharp.EmitContext target, Mono.CSharp.AnonymousMethod am)
+in <0x0001c> Mono.CSharp.AnonymousDelegate+AnonymousInstance:Emit
+(Mono.CSharp.EmitContext ec)
+in <0x0005c> Mono.CSharp.DelegateCreation:Emit (Mono.CSharp.EmitContext ec)
+in <0x000c9> Mono.CSharp.AnonymousDelegate:Emit (Mono.CSharp.EmitContext ec)
+in <0x0003e> Mono.CSharp.LocalVariableReference:EmitAssign
+(Mono.CSharp.EmitContext ec, Mono.CSharp.Expression source, Boolean
+leave_copy, Boolean prepare_for_load)
+in <0x00179> Mono.CSharp.Assign:Emit (Mono.CSharp.EmitContext ec, Boolean
+is_statement)
+in <0x0000f> Mono.CSharp.Assign:EmitStatement (Mono.CSharp.EmitContext ec)
+in <0x00011> Mono.CSharp.StatementExpression:DoEmit
+(Mono.CSharp.EmitContext ec)in <0x00024> Mono.CSharp.Statement:Emit
+(Mono.CSharp.EmitContext ec)
+in <0x000a7> Mono.CSharp.Block:DoEmit (Mono.CSharp.EmitContext ec)
+in <0x0024f> Mono.CSharp.Block:Emit (Mono.CSharp.EmitContext ec)
+in <0x0001b> Mono.CSharp.EmitContext:EmitResolvedTopBlock
+(Mono.CSharp.ToplevelBlock block, Boolean unreachable)
+in <0x0009d> Mono.CSharp.AnonymousMethod:EmitMethod
+(Mono.CSharp.EmitContext ec)in <0x0001a> Mono.CSharp.AnonymousDelegate:Emit
+(Mono.CSharp.EmitContext ec)
+in <0x0003e> Mono.CSharp.LocalVariableReference:EmitAssign
+(Mono.CSharp.EmitContext ec, Mono.CSharp.Expression source, Boolean
+leave_copy, Boolean prepare_for_load)
+in <0x00179> Mono.CSharp.Assign:Emit (Mono.CSharp.EmitContext ec, Boolean
+is_statement)
+in <0x0000f> Mono.CSharp.Assign:EmitStatement (Mono.CSharp.EmitContext ec)
+in <0x00011> Mono.CSharp.StatementExpression:DoEmit
+(Mono.CSharp.EmitContext ec)in <0x00024> Mono.CSharp.Statement:Emit
+(Mono.CSharp.EmitContext ec)
+in <0x000a7> Mono.CSharp.Block:DoEmit (Mono.CSharp.EmitContext ec)
+in <0x0024f> Mono.CSharp.Block:Emit (Mono.CSharp.EmitContext ec)
+in <0x0001b> Mono.CSharp.EmitContext:EmitResolvedTopBlock
+(Mono.CSharp.ToplevelBlock block, Boolean unreachable)
+in <0x0007b> Mono.CSharp.EmitContext:EmitTopBlock (IMethodData md,
+Mono.CSharp.ToplevelBlock block)
+in <0x0024f> Mono.CSharp.Constructor:Emit ()
+in <0x00238> Mono.CSharp.TypeContainer:EmitConstructors ()
+in <0x0019c> Mono.CSharp.TypeContainer:EmitType ()
+in <0x0021b> Mono.CSharp.RootContext:EmitCode ()
+in <0x00a58> Mono.CSharp.Driver:MainDriver (System.String[] args)
+in <0x00042> Mono.CSharp.Driver:Main (System.String[] args)
+
+
+Expected Results:
+
+no crash.
+
+How often does this happen? 
+
+consistently.
+
+Additional information:
+
+It's quite easy to workaround this problem.


More information about the mono-bugs mailing list