- 
                Notifications
    You must be signed in to change notification settings 
- Fork 5.2k
Closed
Closed
Copy link
Labels
area-CodeGen-coreclrCLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMICLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI
Description
Description
From #120688 (comment)
Failures are related to Inline Opt, CSE opt and RedundantBranch Opt. Is it known issue? And I just tested by giving mutatesHeaps property to INITCLASS helper. It seems work. I don't know why INITCLASS helper has isPure and doesn't have mutatesHeaps property?
Reproduction Steps
class Test
{
    public static int preciseInitCctorsRun = 0;
    class MyPreciseInitClass<T>
    {
        static MyPreciseInitClass()
        {
            preciseInitCctorsRun++;
        }
        public static void TriggerCctorClass()
        {
        }
        public static void TriggerCctorMethod<U>()
        { }
    }
    class MyClass<T>
    {
        static Type staticVarType = typeof(MyClass<T>);
        public Type GetTypeOf()
        {
            return typeof(MyClass<T>);
        }
        public static Type GetTypeOfStatic()
        {
            return typeof(MyClass<T>);
        }
        public static Type GetTypeThroughStaticVar()
        {
            return staticVarType;
        }
    }
    public static bool TestPreciseInitCctors()
    {
        if (preciseInitCctorsRun != 0)
        {
            Console.WriteLine("preciseInitCctorsRun should be 0, but is {0}", preciseInitCctorsRun);
            return false;
        }
        MyPreciseInitClass<int>.TriggerCctorClass();
        if (preciseInitCctorsRun != 1)
        {
            Console.WriteLine("preciseInitCctorsRun should be 1, but is {0}", preciseInitCctorsRun);
            return false;
        }
        MyPreciseInitClass<short>.TriggerCctorMethod<int>();
        if (preciseInitCctorsRun != 2)
        {
            Console.WriteLine("TriggerCctorClass should return 2, but is {0}", preciseInitCctorsRun);
            return false;
        }
        object o = new MyPreciseInitClass<double>();
        if (preciseInitCctorsRun != 3)
        {
            Console.WriteLine("TriggerCctorClass should return 3, but is {0}", preciseInitCctorsRun);
            return false;
        }
        MyPreciseInitClass<object>.TriggerCctorClass();
        if (preciseInitCctorsRun != 4)
        {
            Console.WriteLine("preciseInitCctorsRun should be 4 but is {0}", preciseInitCctorsRun);
            return false;
        }
        MyPreciseInitClass<string>.TriggerCctorMethod<object>();
        if (preciseInitCctorsRun != 5)
        {
            Console.WriteLine("TriggerCctorClass should return 5, but is {0}", preciseInitCctorsRun);
            return false;
        }
        o = new MyPreciseInitClass<Type>();
        if (preciseInitCctorsRun != 6)
        {
            Console.WriteLine("TriggerCctorClass should return 6,  but is {0}", preciseInitCctorsRun);
            return false;
        }
        return true;
    }
    static void Main()
    {
        Console.WriteLine(TestPreciseInitCctors());
    }
}
Expected behavior
True
Actual behavior
C:\repro\bin\release\net10.0>set DOTNET_TieredCompilation=0
C:\repro\bin\release\net10.0>repro.exe
preciseInitCctorsRun should be 1, but is 0
False
Regression?
No response
Known Workarounds
No response
Configuration
No response
Other information
No response
Metadata
Metadata
Assignees
Labels
area-CodeGen-coreclrCLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMICLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI