(root)/
gcc-13.2.0/
gcc/
testsuite/
gdc.test/
runnable/
test21403.d
// https://issues.dlang.org/show_bug.cgi?id=21403

/***********************************************/

int[] cat11ret3(ref int[] s)
{
    s ~= 11;
    return [3];
}

int[] doit1(int[] val)
{
    (val ~= cat11ret3(val)) ~= 7;
    return val;
}

void test1()
{
    static assert(doit1([2]) == [2, 11, 3, 7]);
    assert(doit1([2]) == [2, 11, 3, 7]);
}

/***********************************************/

char catbretc(ref char[] s)
{
    s ~= 'b';
    return 'c';
}

char[] doit2(char[] val)
{
    (val ~= catbretc(val)) ~= 'd';
    return val;
}

void test2()
{
    static assert(doit2(['a']) == ['a', 'b', 'c', 'd']);
    assert(doit2(['a']) == ['a', 'b', 'c', 'd']);
}

/***********************************************/

int cat2ret3(ref int[] s)
{
    s ~= 2;
    return 3;
}

int[] doit2(int[] val)
{
    (val ~= cat2ret3(val)) ~= 4;
    return val;
}

void test3()
{
    static assert(doit2([1]) == [1, 2, 3, 4]);
    assert(doit2([1]) == [1, 2, 3, 4]);
}

/***********************************************/

int main()
{
    test1();
    test2();
    test3();

    return 0;
}