Skip to content

Invalid order of evaluation for compound assignment involving expanded param array form #79436

@AlekseyTs

Description

@AlekseyTs
public struct S1
{
    public int this[int i, params int[] j]
    {
        get
        {
            System.Console.Write("get_Item ");
            System.Console.Write(i);
            System.Console.Write(j[0]);
            System.Console.Write(" ");
            return 0;
        }
        set
        {
            System.Console.Write("set_Item ");
            System.Console.Write(i);
            System.Console.Write(j[0]);
            System.Console.Write(value);
        }
    }
}

class Program
{
    static void Main()
    {
        Test1(default);
        System.Console.WriteLine();
        Test2(default);
    }

    static void Test1(S1 s)
    {
        s[Get1(), Get2()] += Get3(); 
    }

    static void Test2(S1 s)
    {
        s[Get1(), [Get2()]] += Get3(); 
    }
    
    public static int Get1()
    {
        System.Console.Write("Get1 ");
        return 1;
    }

    public static int Get2()
    {
        System.Console.Write("Get2 ");
        return 2;
    }

    public static int Get3()
    {
        System.Console.Write("Get3 ");
        return 3;
    }
}

Observed:

Get2 Get1 get_Item 12 Get3 set_Item 123
Get1 Get2 get_Item 12 Get3 set_Item 123

Expected:

Get1 Get2 get_Item 12 Get3 set_Item 123
Get1 Get2 get_Item 12 Get3 set_Item 123

Metadata

Metadata

Assignees

Type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions