Skip to content

[RuntimeAsync] Possible issue with async GVMs #118714

@VSadov

Description

@VSadov

It may be similar to #117266, but I think it is a separate issue.

The repro (need to run with RT async enabled):

    interface I2
    {
        Task<string> M0<T>();
        Task<string> M1<T>(object a0, object a1, object a2, object a3, object a4, object a5, object a6, object a7, object a8);
    }

    class Class2 : I2
    {
        public async Task<string> M0<T>()
        {
            await Task.Yield();
            return typeof(T).ToString();
        }

        public async Task<string> M1<T>(object a0, object a1, object a2, object a3, object a4, object a5, object a6, object a7, object a8)
        {
            await Task.Yield();
            return typeof(T).ToString();
        }
    }

    static I2 o2;
    static async Task<string> CallClass2M0()
    {
        o2 = new Class2();
        return await o2.M0<string>();
    }

    static async Task<string> CallClass2M1()
    {
        o2 = new Class2();
        return await o2.M1<string>(default, default, default, default, default, default, default, default, default);
    }

    [Fact]
    public static void NoArgGVM()
    {
        Assert.Equal("System.String", CallClass2M0().Result);
    }

    [Fact]
    public static void ManyArgGVM()
    {
        Assert.Equal("System.String", CallClass2M1().Result);
    }

The repro results in AVs/NullRef exceptions. Even though there is an instantiating stub involved, I think the continuation is trashed earlier - by the managed GVM cache lookup helper.

Although there is a possibility that it is indirectly a problem with the stub.

Metadata

Metadata

Assignees

Labels

area-CodeGen-coreclrCLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMIruntime-async

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions