Skip to content

JIT: Assertion failed '!(block->bbFlags & BBF_FINALLY_TARGET)' during 'Global local var liveness' #94680

@jakobbotsch

Description

@jakobbotsch
// Generated by Fuzzlyn v1.6 on 2023-11-12 01:56:05
// Run on Arm Linux
// Seed: 15322237346947874736
// Reduced from 37.4 KiB to 7.0 KiB in 00:05:48
// Hits JIT assert in Release:
// Assertion failed '!(block->bbFlags & BBF_FINALLY_TARGET)' in 'Program:M0()' during 'Global local var liveness' (IL size 1536; hash 0xaf50ff37; FullOpts)
// 
//     File: /__w/1/s/src/coreclr/jit/fgbasic.cpp Line: 5209
// 
using System.Runtime.CompilerServices;

public interface I0
{
}

public class C0 : I0
{
    public int F0;
    public int F1;
    public C0(int f0, int f1)
    {
        F0 = f0;
        F1 = f1;
    }
}

public class C1
{
    public sbyte F0;
    public int F1;
    public C0 F2;
    public C1(sbyte f0, int f1, C0 f2)
    {
        F1 = f1;
        F2 = f2;
    }
}

public struct S0 : I0
{
    public sbyte F0;
    public C0 F1;
    public uint F2;
    public byte F3;
    public int F4;
    public S0(sbyte f0, C0 f1, uint f2, byte f3, int f4, byte f5): this()
    {
    }
}

public class Program
{
    public static IRuntime s_rt;
    public static byte[] s_1;
    public static byte s_2;
    public static ushort s_3;
    public static bool s_5;
    public static ulong s_7;
    public static bool s_8;
    public static I0[] s_9;
    public static C0[] s_14;
    public static C1 s_15;
    public static uint s_16;
    public static S0 s_17;
    public static S0 s_18;
    public static S0 s_21;
    public static C1 s_23;
    public static long s_26;
    public static byte[, ] s_31;
    public static void Main()
    {
        CollectibleALC alc = new CollectibleALC();
        System.Reflection.Assembly asm = alc.LoadFromAssemblyPath(System.Reflection.Assembly.GetExecutingAssembly().Location);
        System.Reflection.MethodInfo mi = asm.GetType(typeof(Program).FullName).GetMethod(nameof(MainInner));
        System.Type runtimeTy = asm.GetType(typeof(Runtime).FullName);
        mi.Invoke(null, new object[]{System.Activator.CreateInstance(runtimeTy)});
    }

    public static void MainInner(IRuntime rt)
    {
        M0();
    }

    public static void M0()
    {
        byte var0 = default(byte);
        ushort[][] var1 = default(ushort[][]);
        byte var9 = default(byte);
        short[][] var10 = default(short[][]);
        bool var12 = default(bool);
        C1 var16 = default(C1);
        ulong var24 = default(ulong);
        short var34 = default(short);
        var12 = s_8;
        var9 = s_1[0];
        var vr6 = new C1(1, 1, new C0(-1966899163, 1));
        M2();
        var10[0][0] = var10[0][0]--;
        if (var12)
        {
            int var13 = s_14[0].F1;
            s_15 = new C1(0, 0, new C0(-1, 2147483646));
        }

        s_9 = new I0[]{new S0(-127, new C0(1744994298, -813863043), 3332730256U, 1, 2147483646, 50), new C0(1, 1), new C0(271388024, 1), new S0(0, new C0(691366226, 5322955), 1420714811U, 0, 2147483647, 0), new S0(0, new C0(-495037097, 1644462694), 0, 91, 1713738859, 1)};
        ushort[] var15 = var1[0];
        var16 = new C1(-40, 0, new C0(-957554893, 1040057853));
        for (int var17 = 0; var17 < 1; var17++)
        {
            var16.F0 = s_15.F0--;
            s_rt.WriteLine("c_25", var17);
            return;
        }

        if (s_8)
        {
            short var19 = 30153;
            s_rt.WriteLine("c_27", var19);
        }
        else
        {
            var15[0] = var1[0][0];
            s_3 = var15[0];
            var vr0 = s_14[0];
            M1();
            S0 var21 = new S0(1, new C0(1, 59206748), 698097259U, 0, -635727362, 1);
            s_rt.WriteLine("c_28", var21.F0);
            s_rt.WriteLine("c_29", var21.F1.F0);
            s_rt.WriteLine("c_31", var21.F2);
        }

        try
        {
            var12 ^= !var12;
        }
        finally
        {
            short var22 = var10[0][0]--;
        }

        if (var12)
        {
            s_15.F1 = var10[0][0] % (var10[0][0] | 1);
        }

        int var23 = s_15.F1--;
        s_rt.WriteLine("c_36", var15[0]);
        s_rt.WriteLine("c_37", var16.F0);
        s_rt.WriteLine("c_39", var16.F2.F0);
        s_rt.WriteLine("c_40", var16.F2.F1);
        s_rt.WriteLine("c_41", var23);
        s_rt.WriteLine("c_42", var24);
        var vr7 = s_16--;
        M3(vr7);
        s_14[0].F1 = s_17.F4;
        var1[0] = new ushort[]{0, 0, 1, 1, 0, 0, 1};
        try
        {
            var10[0][0] = var10[0][0];
        }
        finally
        {
            var vr5 = s_17.F1;
            M1();
        }

        s_17.F3 = var0;
        var10[0] = new short[]{1, 1, 0, 1};
        uint[] var28 = new uint[]{0, 1, 1, 0, 0, 0, 1, 0};
        s_rt.WriteLine("c_44", var28[0]);
        s_18 = s_17;
        s_17.F1.F0 = ~s_17.F4;
        var vr8 = new C1(126, 0, new C0(1907285129, -1));
        C0 var30 = M2();
        var30.F0 = s_17.F1.F1;
        try
        {
            var34 = var10[0][0];
            for (int var35 = 0; var35 < 0; var35++)
            {
            }

            s_rt.WriteLine("c_55", var34);
        }
        finally
        {
            var vr3 = s_17.F2;
            M3(vr3);
            var vr4 = new C0(-2147483647, 0);
            M1();
        }

        for (int var36 = 0; var36 < 0; var36++)
        {
            try
            {
                s_21.F1 = var30;
            }
            finally
            {
                s_23 = s_23;
                var10 = var10;
            }

            ushort var38 = var1[0][0];
            s_rt.WriteLine("c_57", var36);
        }

        if (var12)
        {
            try
            {
                s_17.F3 = var9;
            }
            finally
            {
                s_23.F2.F0 = s_23.F2.F0--;
                s_17.F2 = 0;
            }
        }

        if (var12)
        {
            var12 = (var10[0][0] & 7421442600330393152L) != (ushort)s_7++;
        }

        s_17.F0 = s_17.F0;
        bool[] var41 = new bool[]{false, false, false, true, true, false};
        s_2 = s_17.F3;
        if (s_5)
        {
            var vr2 = new C1(-128, -2147483648, new C0(-1, 10));
            var vr1 = M2();
            M1();
        }
        else
        {
            try
            {
                if (var12)
                {
                    s_26 &= 0;
                }
            }
            finally
            {
                M4();
                var1 = new ushort[][]{new ushort[]{12029}, new ushort[]{0, 21775, 65534}, new ushort[]{1, 27311}, new ushort[]{23045, 0, 0, 1, 0}};
                C0 var48 = s_21.F1;
                s_rt.WriteLine("c_70", var48.F1);
            }
        }

        var vr10 = s_17.F2;
        var vr9 = M3(vr10);
        M3(vr9);
        byte[, ] var52 = s_31;
    }

    public static byte M3(uint arg0)
    {
        return default(byte);
    }

    public static void M4()
    {
    }

    public static C0 M1()
    {
        return default(C0);
    }

    public static C0 M2()
    {
        return default(C0);
    }
}

public interface IRuntime
{
    void WriteLine<T>(string site, T value);
}

public class Runtime : IRuntime
{
    public void WriteLine<T>(string site, T value) => System.Console.WriteLine(value);
}

public class CollectibleALC : System.Runtime.Loader.AssemblyLoadContext
{
    public CollectibleALC(): base(true)
    {
    }
}

Repros with altjit. Bisected to #93428, cc @BruceForstall

Metadata

Metadata

Assignees

Labels

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

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions