Bugzilla – Bug 321941
[ANONYMOUS METHODS] (FIXED) crash instead of CS0236 (wrong field reference in delegate initializer)
Last modified: 2007-09-15 21:24:23 UTC
---- Reported by atsushi@ximian.com 2006-08-31 12:26:07 MST ---- When given the following code, mcs crashes. delegate void Foo (); class Test { object o1; Foo h = delegate () { o1 = null; }; } Actual Results: Exception caught by the compiler while compiling: Block that caused the problem begin at: 20060831.cs(7,10): Block being compiled: [20060831.cs(7,22):,20060831.cs(9,2): ] System.NullReferenceException: Object reference not set to an instance of an obj ect Unhandled Exception: System.NullReferenceException: Object reference not set to an instance of an object at Mono.CSharp.EmitContext.CaptureThis () [0x00000] at Mono.CSharp.This.ResolveBase (Mono.CSharp.EmitContext ec) [0x00000] at Mono.CSharp.EmitContext.GetThis (Location loc) [0x00000] at Mono.CSharp.SimpleName.DoSimpleNameResolve (Mono.CSharp.EmitContext ec, Mono.CSharp.Expression right_side, Boolean intermediate) [0x00000] at Mono.CSharp.SimpleName.SimpleNameResolve (Mono.CSharp.EmitContext ec, Mono.CSharp.Expression right_side, Boolean intermediate) [0x00000] at Mono.CSharp.SimpleName.DoResolveLValue (Mono.CSharp.EmitContext ec, Mono.CSharp.Expression right_side) [0x00000] at Mono.CSharp.Expression.ResolveLValue (Mono.CSharp.EmitContext ec, Mono.CSharp.Expression right_side, Location loc) [0x00000] at Mono.CSharp.Assign.DoResolve (Mono.CSharp.EmitContext ec) [0x00000] at Mono.CSharp.Expression.Resolve (Mono.CSharp.EmitContext ec, ResolveFlags flags) [0x00000] at Mono.CSharp.Expression.Resolve (Mono.CSharp.EmitContext ec) [0x00000] at Mono.CSharp.ExpressionStatement.ResolveStatement (Mono.CSharp.EmitContext ec) [0x00000] at Mono.CSharp.StatementExpression.Resolve (Mono.CSharp.EmitContext ec) [0x00000] at Mono.CSharp.Block.Resolve (Mono.CSharp.EmitContext ec) [0x00000] at Mono.CSharp.EmitContext.ResolveTopBlock (Mono.CSharp.EmitContext anonymous_method_host, Mono.CSharp.ToplevelBlock block, Mono.CSharp.Parameters ip, IMethodData md, System.Boolean unreachable) [0x00000] Expected Results: (with csc) 20060831.cs(8,3): error CS0236: A field initializer cannot reference the nonstatic field, method, or property 'Test.o1' 20060831.cs(5,9): (Location of symbol related to previous error) How often does this happen? consistently. Additional Information: haven't tried Martin's anonymous method diff. It might not happen with the patched version. ---- Additional Comments From martin@ximian.com 2006-10-04 18:19:17 MST ---- Fixed in SVN. Unknown operating system unknown. Setting to default OS "Other".