Bug 321941 (MONO79232) - [ANONYMOUS METHODS] (FIXED) crash instead of CS0236 (wrong field reference in delegate initializer)
Summary: [ANONYMOUS METHODS] (FIXED) crash instead of CS0236 (wrong field reference in...
Status: RESOLVED FIXED
Alias: MONO79232
Product: Mono: Compilers
Classification: Mono
Component: C# (show other bugs)
Version: 1.1
Hardware: Other Other
: P3 - Medium : Minor
Target Milestone: ---
Assignee: Martin Baulig
QA Contact: Mono Bugs
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2006-08-31 19:26 UTC by Atsushi Enomoto
Modified: 2007-09-15 21:24 UTC (History)
0 users

See Also:
Found By: ---
Services Priority:
Business Priority:
Blocker: ---
Marketing QA Status: ---
IT Deployment: ---


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Thomas Wiest 2007-09-15 20:08:13 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".