[Mono-bugs] [Bug 408361] New: [GMCS] Produces bad IL when compiling a combination of generics and yield return statements .

bugzilla_noreply at novell.com bugzilla_noreply at novell.com
Fri Jul 11 09:33:49 EDT 2008


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


           Summary: [GMCS] Produces bad IL when compiling a combination of
                    generics and yield return statements.
           Product: Mono: Compilers
           Version: SVN
          Platform: All
        OS/Version: All
            Status: NEW
          Severity: Normal
          Priority: P5 - None
         Component: C#
        AssignedTo: mono-bugs at lists.ximian.com
        ReportedBy: Vernish13 at gmail.com
         QAContact: mono-bugs at lists.ximian.com
          Found By: ---


gmcs produces bad IL when compiling a combination of generic classes and yield
return statements.

The following example compiles and runs successfully when using csc to compile. 

To reproduce compile and run the following:

using System;
using System.Collections.Generic;

public class Test
{
    public static void Main(string[] args)
    {
        Foo<int> nav = new Foo<int>();
        IEnumerable<int> t = TestRoutine<int>(new int[] { 1 }, nav);
        new List<int>(t);
    }
    public static IEnumerable<T> TestRoutine<T>(IEnumerable<T> a, Foo<T> f)
    {
        f.CreateItem<int>();
        foreach (T n in a)
        {
            yield return n;
        }
    }

}
public class Foo<T>
{
    public void CreateItem<G>()
    {
    }
}

Expected Error Output:

** ERROR **: file mini.c: line 5754 (mono_method_to_ir): assertion failed:
(!mono_method_check_context_used (cmethod))
aborting...
Stacktrace:

  at System.Collections.Generic.List`1.AddEnumerable
(System.Collections.Generic.IEnumerable`1) <0xffffffff>
  at System.Collections.Generic.List`1.AddEnumerable
(System.Collections.Generic.IEnumerable`1) <0x00073>
  at System.Collections.Generic.List`1..ctor
(System.Collections.Generic.IEnumerable`1) <0x000cf>
  at Test.Main (string[]) <0x0008f>
  at (wrapper runtime-invoke) Test.runtime_invoke_void_string[]
(object,intptr,intptr,intptr) <0xffffffff>

Native stacktrace:

        mono [0x429d85]
        mono [0x5c9ff6]
        /lib64/tls/libpthread.so.0 [0x355080c4f0]
        /lib64/tls/libc.so.6(gsignal+0x3d) [0x354ff2e21d]
        /lib64/tls/libc.so.6(abort+0xfe) [0x354ff2fa1e]
        /usr/lib64/libglib-2.0.so.0 [0x355222ed28]
        /usr/lib64/libglib-2.0.so.0(g_log+0x83) [0x355222edb3]
        mono [0x5a5151]
        mono [0x5c747b]
        mono [0x5c8e5e]
        mono [0x5c96a0]
        mono [0x5c97ab]
        mono(mono_compile_method+0x46) [0x4d1cf9]
        mono [0x42ad9a]
        [0x40000165]

Debug info from gdb:

thread apply all bt: No such file or directory.

=================================================================
Got a SIGABRT while executing native code. This usually indicates
a fatal error in the mono runtime or one of the native libraries 
used by your application.
=================================================================

Expected Correct Output:
Nothing.


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