[Mono-bugs] [Bug 403033] New: "return" in methods with anon methods -> invalid IL

bugzilla_noreply at novell.com bugzilla_noreply at novell.com
Mon Jun 23 19:54:39 EDT 2008


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


           Summary: "return" in methods with anon methods -> invalid IL
           Product: Mono: Compilers
           Version: 1.9.0
          Platform: x86-64
        OS/Version: Linux
            Status: NEW
          Severity: Critical
          Priority: P5 - None
         Component: C#
        AssignedTo: mono-bugs at lists.ximian.com
        ReportedBy: Dax at daxxfiles.net
         QAContact: mono-bugs at lists.ximian.com
          Found By: ---


Summary:
Using "return" in methods using anonymous methods accessing variables in the
methods scope (instead of in it's (anon meth) scope) confuses mcs really badly.


Description:
Whenever one places a "return" in a method hosting anonymous methods which in
turn access variables inside the hosting method, mcs places IL ret only at the
places it finds a "return". That particular instruction is surrounded by the
construction of multiple compiler generated classes and assignments. After
those assignments, the method body stops abruptly, even without a closing IL
ret.
In conclusion, using "return" and anonymous method accessing variables of less
limited scope sends mcs completely out of the window.


How to reproduce:
compile and run: 
using System; 
class Program { 
  static void Main() { 
    return;
    double pi = 1.0;
    Converter<int, double> c = delegate(int a) { return a * pi; };
  }
}

Actual result:
Runtime throws InvalidProgramException.
C# disassembly:
private static void Main()
{
   <>c__CompilerGenerated0 generated = new <>c__CompilerGenerated0();
   return;
   <>c__CompilerGenerated2 generated2 = new <>c__CompilerGenerated2();
   generated2.<3:scope1> = generated;
}

Expected result:
No exception, no output.
C# disassembly:
private static void Main()
{
}

Additional info:
Seems to be fixed in SVN.


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