[Mono-bugs] [Bug 79148][Maj] New - [GMCS] Anonymous delegates testcase fails with NullReferenceException

bugzilla-daemon at bugzilla.ximian.com bugzilla-daemon at bugzilla.ximian.com
Tue Aug 22 22:19:50 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 horst.reiterer at mind-breeze.com.

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

--- shadow/79148	2006-08-22 22:19:50.000000000 -0400
+++ shadow/79148.tmp.6181	2006-08-22 22:19:50.000000000 -0400
@@ -0,0 +1,150 @@
+Bug#: 79148
+Product: Mono: Compilers
+Version: 1.1
+OS: other
+OS Details: Red Hat Enterprise Linux 4 Update 2
+Status: NEW   
+Resolution: 
+Severity: 
+Priority: Major
+Component: C#
+AssignedTo: rharinath at novell.com                            
+ReportedBy: horst.reiterer at mind-breeze.com               
+QAContact: mono-bugs at ximian.com
+TargetMilestone: ---
+URL: 
+Cc: 
+Summary: [GMCS] Anonymous delegates testcase fails with NullReferenceException
+
+Compiling the following testcase succeeds with csc but fails with gmcs
+(1.1.13.6):
+
+  public delegate void A();
+
+  class B
+  {
+    public static event A D;
+    long[] d = new long[1];
+
+    void C()
+    {
+      int a = 0;
+      int b = 0;
+
+      A block = delegate {
+        long c = 0;
+
+        B.D += delegate {
+          d[a] = c;
+          F(b);
+        };
+      };
+    }
+
+    public void F(int i)
+    {
+    }
+
+    static void Main()
+    {
+      B b = new B();
+      b.C();
+    }
+  }
+
+Steps to reproduce the problem:
+1. gmcs testcase.cs
+
+Actual Results:
+
+Target: 1 b
+Trying: 2
+Trying: 0
+
+Unhandled Exception: System.NullReferenceException: Object reference not
+set to an instance of an object
+in <0x001c3> Mono.CSharp.CaptureContext:EmitCapturedVariableInstance
+(Mono.CSharp.EmitContext ec, Mono.CSharp.LocalInfo li,
+Mono.CSharp.AnonymousContainer am)
+in <0x00020> Mono.CSharp.EmitContext:EmitCapturedVariableInstance
+(Mono.CSharp.LocalInfo li)
+in <0x00059> Mono.CSharp.LocalVariableReference:Emit
+(Mono.CSharp.EmitContext ec)
+in <0x0022b> Mono.CSharp.Argument:Emit (Mono.CSharp.EmitContext ec)
+in <0x00170> Mono.CSharp.Invocation:EmitArguments (Mono.CSharp.EmitContext
+ec, System.Reflection.MethodBase mb, System.Collections.ArrayList
+arguments, Boolean dup_args, Mono.CSharp.LocalTemporary this_arg)
+in <0x00542> Mono.CSharp.Invocation:EmitCall (Mono.CSharp.EmitContext ec,
+Boolean is_base, Boolean is_static, Mono.CSharp.Expression instance_expr,
+System.Reflection.MethodBase method, System.Collections.ArrayList
+Arguments, Location loc, Boolean dup_args, Boolean omit_args)
+in <0x00024> Mono.CSharp.Invocation:EmitCall (Mono.CSharp.EmitContext ec,
+Boolean is_base, Boolean is_static, Mono.CSharp.Expression instance_expr,
+System.Reflection.MethodBase method, System.Collections.ArrayList
+Arguments, Location loc)
+in <0x00066> Mono.CSharp.Invocation:Emit (Mono.CSharp.EmitContext ec)
+in <0x00015> Mono.CSharp.Invocation: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 <0x000a8> Mono.CSharp.Block:DoEmit (Mono.CSharp.EmitContext ec)
+in <0x00268> Mono.CSharp.Block:Emit (Mono.CSharp.EmitContext ec)
+in <0x0001b> Mono.CSharp.EmitContext:EmitResolvedTopBlock
+(Mono.CSharp.ToplevelBlock block, Boolean unreachable)
+in <0x000a8> Mono.CSharp.AnonymousMethod:EmitMethod
+(Mono.CSharp.EmitContext ec)
+in <0x0001a> Mono.CSharp.AnonymousDelegate:Emit (Mono.CSharp.EmitContext ec)
+in <0x0022b> Mono.CSharp.Argument:Emit (Mono.CSharp.EmitContext ec)
+in <0x00170> Mono.CSharp.Invocation:EmitArguments (Mono.CSharp.EmitContext
+ec, System.Reflection.MethodBase mb, System.Collections.ArrayList
+arguments, Boolean dup_args, Mono.CSharp.LocalTemporary this_arg)
+in <0x00021> Mono.CSharp.BinaryDelegate:Emit (Mono.CSharp.EmitContext ec)
+in <0x00090> Mono.CSharp.FieldExpr:EmitAssign (Mono.CSharp.EmitContext ec,
+Mono.CSharp.Expression source, Boolean leave_copy, Boolean prepare_for_load)
+in <0x0017f> 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 <0x000a8> Mono.CSharp.Block:DoEmit (Mono.CSharp.EmitContext ec)
+in <0x00268> Mono.CSharp.Block:Emit (Mono.CSharp.EmitContext ec)
+in <0x0001b> Mono.CSharp.EmitContext:EmitResolvedTopBlock
+(Mono.CSharp.ToplevelBlock block, Boolean unreachable)
+in <0x000a8> 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 <0x0017f> 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 <0x000a8> Mono.CSharp.Block:DoEmit (Mono.CSharp.EmitContext ec)
+in <0x00268> Mono.CSharp.Block:Emit (Mono.CSharp.EmitContext ec)
+in <0x000a8> Mono.CSharp.Block:DoEmit (Mono.CSharp.EmitContext ec)
+in <0x00268> Mono.CSharp.Block:Emit (Mono.CSharp.EmitContext ec)
+in <0x000a8> Mono.CSharp.Block:DoEmit (Mono.CSharp.EmitContext ec)
+in <0x00268> Mono.CSharp.Block:Emit (Mono.CSharp.EmitContext ec)
+in <0x0001b> Mono.CSharp.EmitContext:EmitResolvedTopBlock
+(Mono.CSharp.ToplevelBlock block, Boolean unreachable)
+in <0x0007e> Mono.CSharp.EmitContext:EmitTopBlock (IMethodData md,
+Mono.CSharp.ToplevelBlock block)
+in <0x001c0> Mono.CSharp.MethodData:Emit (Mono.CSharp.TypeContainer
+container, Mono.CSharp.Attributable kind)
+in <0x00030> Mono.CSharp.Method:Emit ()
+in <0x0072d> Mono.CSharp.TypeContainer:EmitType ()
+in <0x00226> Mono.CSharp.RootContext:EmitCode ()
+in <0x00a9f> Mono.CSharp.Driver:MainDriver (System.String[] args)
+in <0x00051> Mono.CSharp.Driver:Main (System.String[] args)
+
+Expected Results:
+
+Successful compilation.
+
+How often does this happen? 
+
+100 out of 100 times


More information about the mono-bugs mailing list