Skip to content

[mono][gshared] generic instance function pointer crash #66337

@lambdageek

Description

@lambdageek
using System;
public unsafe class C {
    public static void GenericMethod<T>() {
        Console.WriteLine ($"T was {typeof(T).FullName}");
    }
    public void M() {
        delegate* <void> fp = &GenericMethod<string>;
        fp ();
    }

    public void N<T>() {
       delegate* <void> fp = &GenericMethod<T>;
       fp ();
    }

    public static void Main() {
        var c = new C();
        c.M();
        c.N<string>();
    }
}

Expected:

T was System.String
T was System.String

Actual: Crash.
Backtrace:

(lldb) monobt
* thread #1
  * frame #0: 0x00007ff81f7313da libsystem_kernel.dylib`__semwait_signal + 10
    frame #1: 0x00007ff81f6468a9 libsystem_c.dylib`nanosleep + 196
    frame #2: 0x000000010c8192b5 libcoreclr.dylib`monoeg_g_usleep(microseconds=1000000) at gdate-unix.c:78:9 [opt]
    frame #3: 0x000000010c776f7a libcoreclr.dylib`mono_handle_native_crash(signal="SIGSEGV", mctx=0x00007ff7b3fe7d08, info=0x00007ff7b3fe8328) at mini-exceptions.c:3003:4 [opt]
    frame #4: 0x000000010c6cf35b libcoreclr.dylib`mono_sigsegv_signal_handler_debug(_dummy=11, _info=0x00007ff7b3fe8328, context=0x00007ff7b3fe8390, debug_fault_addr=0x00000000ffffff18) at mini-runtime.c:3727:3 [opt]
    frame #5: 0x00007ff81f780e2d libsystem_platform.dylib`_sigtramp + 29
    frame #6: 0x10c06ee84<0x10c06ee84 - rgctx_fetch_trampoline_mrgctx_0 trampoline>
    frame #7: 0x000000010c6d2472 libcoreclr.dylib`mono_jit_runtime_invoke(method=<unavailable>, obj=<unavailable>, params=0x00007ff7b3fe85f8, exc=<unavailable>, error=<unavailable>) at mini-runtime.c:3513:12 [opt]
    frame #8: 0x000000010c5f11c8 libcoreclr.dylib`mono_runtime_invoke_checked [inlined] do_runtime_invoke(method=0x00007f9e18f055d8, obj=0x0000000000000000, params=0x00007ff7b3fe85f8, exc=0x0000000000000000, error=0x00007ff7b3fe8638) at object.c:2399:11 [opt]
    frame #9: 0x000000010c5f1192 libcoreclr.dylib`mono_runtime_invoke_checked(method=0x00007f9e18f055d8, obj=0x0000000000000000, params=0x00007ff7b3fe85f8, error=0x00007ff7b3fe8638) at object.c:2567:9 [opt]
    frame #10: 0x000000010c5f915c libcoreclr.dylib`do_exec_main_checked(method=0x00007f9e18f055d8, args=<unavailable>, error=0x00007ff7b3fe8638) at object.c:0 [opt]
    frame #11: 0x000000010c5f80a0 libcoreclr.dylib`mono_runtime_run_main_checked [inlined] mono_runtime_exec_main_checked(method=<unavailable>, args=<unavailable>, error=<unavailable>) at object.c:4513:9 [opt] [artificial]
    frame #12: 0x000000010c731492 libcoreclr.dylib`mono_jit_exec at driver.c:1379:13 [opt]
    frame #13: 0x000000010c731484 libcoreclr.dylib`mono_jit_exec(domain=<unavailable>, assembly=<unavailable>, argc=1, argv=0x00006000010c9930) at driver.c:1324:7 [opt]
    frame #14: 0x000000010c734a66 libcoreclr.dylib`mono_main [inlined] main_thread_handler(user_data=<unavailable>) at driver.c:1456:3 [opt]
    frame #15: 0x000000010c734a2e libcoreclr.dylib`mono_main(argc=<unavailable>, argv=<unavailable>) at driver.c:2683:3 [opt]
    frame #16: 0x000000010c7afb03 libcoreclr.dylib`monovm_execute_assembly(argc=<unavailable>, argv=0x0000000000000000, managedAssemblyPath="/Users/alklig/work/dotnet-runtime/runtime-bugs/artifacts/bin/HelloWorld/x64/Release/osx-x64/publish/HelloWorld.dll", exitCode=0x00007ff7b3fe8910) at monovm.c:268:14 [opt]
    frame #17: 0x000000010c15879d libhostpolicy.dylib`run_app_for_context(hostpolicy_context_t const&, int, char const**) + 1293
    frame #18: 0x000000010c159601 libhostpolicy.dylib`corehost_main + 241
    frame #19: 0x000000010c0e6555 libhostfxr.dylib`fx_muxer_t::handle_exec_host_command(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, host_startup_info_t const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::unordered_map<known_options, std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > >, known_options_hash, std::__1::equal_to<known_options>, std::__1::allocator<std::__1::pair<known_options const, std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > > > > const&, int, char const**, int, host_mode_t, bool, char*, int, int*) + 1621
    frame #20: 0x000000010c0e533d libhostfxr.dylib`fx_muxer_t::execute(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, int, char const**, host_startup_info_t const&, char*, int, int*) + 621
    frame #21: 0x000000010c0e1d38 libhostfxr.dylib`hostfxr_main_startupinfo + 152
    frame #22: 0x000000010bf23795 HelloWorld`exe_start(int, char const**) + 1573
    frame #23: 0x000000010bf239af HelloWorld`main + 143
    frame #24: 0x00000001169e94fe dyld`start + 462

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions