[Mono-bugs] [Bug 462592] New: gmcs creates faulty code for slightly complex generics/ lambda sample

bugzilla_noreply at novell.com bugzilla_noreply at novell.com
Fri Dec 26 12:40:26 EST 2008


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


           Summary: gmcs creates faulty code for slightly complex
                    generics/lambda sample
           Product: Mono: Compilers
           Version: SVN
          Platform: x86-64
        OS/Version: Linux
            Status: NEW
          Severity: Major
          Priority: P5 - None
         Component: C#
        AssignedTo: mono-bugs at lists.ximian.com
        ReportedBy: mono at e-tobi.net
         QAContact: mono-bugs at lists.ximian.com
          Found By: ---


The following code, if compiled with MS csc.exe, runs fine under Mono. Compiled
with Mono gmcs, it causes a runtime exception (on Mono as well as on MS .Net).
Therefore I assume, this is a compiler bug.

using System;

namespace testcase
{
    public interface IInitializationExpression
    {
        void AddRegistry<T>();
    }

    public class ConfigurationExpression
    {
        public void AddRegistry<T>()
        {
        }
    }

    public class InitializationExpression : ConfigurationExpression,
IInitializationExpression
    {
    }

    public class Program
    {
        private static void Main()
        {
            Action<IInitializationExpression> action = x =>
x.AddRegistry<string>();
            var expression = new InitializationExpression();
            action(expression);
        }
    }
}

One thing to note: If I derive  ConfigurationExpression from
IInitializitationExpression, then it works fine.

The error output:

[mono-trunk] /tmp/testcase/testcase @ gmcs -debug test.cs
[mono-trunk] /tmp/testcase/testcase @ mono --debug test.exe
**
** ERROR:(method-to-ir.c:5902):mono_method_to_ir: assertion failed:
(!mono_method_check_context_used (cmethod))
Stacktrace:

  at (wrapper managed-to-native) object.__icall_wrapper_compile_generic_method
(object,intptr,intptr) <0x0004b>
  at (wrapper managed-to-native) object.__icall_wrapper_compile_generic_method
(object,intptr,intptr) <0xffffffff>
  at testcase.Program.<Main>m__0 (testcase.IInitializationExpression) [0x00000]
in /tmp/testcase/testcase/test.cs:25
  at testcase.Program.Main () [0x00024] in /tmp/testcase/testcase/test.cs:27
  at (wrapper runtime-invoke) object.runtime_invoke_void
(object,intptr,intptr,intptr) <0xffffffff>

Native stacktrace:

        mono [0x47dc60]
        /lib/libpthread.so.0 [0x7fc588aaaa80]
        /lib/libc.so.6(gsignal+0x35) [0x7fc5884f7ed5]
        /lib/libc.so.6(abort+0x183) [0x7fc5884f93f3]
        /usr/lib/libglib-2.0.so.0(g_assertion_message+0x104) [0x7fc589123fe4]
        /usr/lib/libglib-2.0.so.0 [0x7fc589124482]
        mono [0x441939]
        mono [0x41d589]
        mono [0x41eda1]
        mono [0x459c1f]
        [0x40fef60b]

Debug info from gdb:

[Thread debugging using libthread_db enabled]
[New Thread 0x7fc589783720 (LWP 21161)]
[New Thread 0x41ca6950 (LWP 21163)]
[New Thread 0x40ef4950 (LWP 21162)]
0x00007fc588592269 in syscall () from /lib/libc.so.6
  3 Thread 0x40ef4950 (LWP 21162)  0x00007fc588aaa0e1 in nanosleep () from
/lib/libpthread.so.0
  2 Thread 0x41ca6950 (LWP 21163)  0x00007fc588aa8bd1 in sem_wait () from
/lib/libpthread.so.0
  1 Thread 0x7fc589783720 (LWP 21161)  0x00007fc588592269 in syscall () from
/lib/libc.so.6

Thread 3 (Thread 0x40ef4950 (LWP 21162)):
#0  0x00007fc588aaa0e1 in nanosleep () from /lib/libpthread.so.0
#1  0x0000000000556992 in collection_thread (unused=<value optimized out>) at
collection.c:34
#2  0x00007fc588aa2fc7 in start_thread () from /lib/libpthread.so.0
#3  0x00007fc5885955ad in clone () from /lib/libc.so.6
#4  0x0000000000000000 in ?? ()

Thread 2 (Thread 0x41ca6950 (LWP 21163)):
#0  0x00007fc588aa8bd1 in sem_wait () from /lib/libpthread.so.0
#1  0x000000000052734a in finalizer_thread (unused=<value optimized out>) at
gc.c:928
#2  0x00000000005108d3 in start_wrapper (data=<value optimized out>) at
threads.c:620
#3  0x0000000000558acb in thread_start_routine (args=0x23572f8) at
threads.c:279
#4  0x000000000056eca2 in GC_start_routine (arg=0x7fc58962ee70) at
pthread_support.c:1382
#5  0x00007fc588aa2fc7 in start_thread () from /lib/libpthread.so.0
#6  0x00007fc5885955ad in clone () from /lib/libc.so.6
#7  0x0000000000000000 in ?? ()

Thread 1 (Thread 0x7fc589783720 (LWP 21161)):
#0  0x00007fc588592269 in syscall () from /lib/libc.so.6
#1  0x000000000047dd62 in mono_handle_native_sigsegv (signal=11, ctx=<value
optimized out>) at mini-exceptions.c:1406
#2  <signal handler called>
#3  0x00007fc5884f7ed5 in raise () from /lib/libc.so.6
#4  0x00007fc5884f93f3 in abort () from /lib/libc.so.6
#5  0x00007fc589123fe4 in g_assertion_message () from /usr/lib/libglib-2.0.so.0
#6  0x00007fc589124482 in g_assertion_message_expr () from
/usr/lib/libglib-2.0.so.0
#7  0x0000000000441939 in mono_method_to_ir (cfg=0x23a1840, method=0x23a3f70,
start_bblock=0x239f528, end_bblock=0x239f628, return_var=0x0,
dont_inline=0x239bb20, inline_args=0x0, 
    inline_offset=0, is_virtual_call=0) at method-to-ir.c:5902
#8  0x000000000041d589 in mini_method_compile (method=0x23a3f70, opts=55667199,
domain=0x7fc58962de00, run_cctors=<value optimized out>, compile_aot=<value
optimized out>, parts=0)
    at mini.c:3173
#9  0x000000000041eda1 in mono_jit_compile_method (method=0x23a3f70) at
mini.c:3826
#10 0x0000000000459c1f in mono_helper_compile_generic_method
(obj=0x7fc5895d9ff0, method=<value optimized out>, this_arg=0x7fff917a66f0) at
jit-icalls.c:914
#11 0x0000000040fef60b in ?? ()
#12 0x0000000002319610 in ?? ()
#13 0x00000000023209a0 in ?? ()
#14 0x0000000000000000 in ?? ()
#0  0x00007fc588592269 in syscall () from /lib/libc.so.6

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


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