1 // https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97889
2 // { dg-additional-options "-fmain -funittest" }
3 // { dg-do run }
4 // { dg-skip-if "needs gcc/config.d" { ! d_runtime } }
5 
cat11ret3(T)6 auto cat11ret3(T)(ref T s)
7 {
8     s ~= 11;
9     return [3];
10 }
11 
12 unittest
13 {
test1(int[]val)14     static auto test1(int[] val) { val ~= cat11ret3(val); return val; }
15     assert(test1([1]) == [1, 11, 3]);
16     static assert(test1([1]) == [1, 11, 3]);
17 
test2(int[]val)18     static auto test2(int[] val) { val = val ~ cat11ret3(val); return val; }
19     // FIXME: assert(test2([1]) == [1, 3]);
20     static assert(test2([1]) == [1, 3]);
21 
test3(int[]val)22     static auto test3(int[] val) { (val ~= 7) ~= cat11ret3(val); return val; }
23     assert(test3([2]) == [2, 7, 11, 3]);
24     static assert(test3([2]) == [2, 7, 11, 3]);
25 
test4(int[]val)26     static auto test4(int[] val) { (val ~= cat11ret3(val)) ~= 7; return val; }
27     assert(test4([2]) == [2, 11, 3, 7]);
28     static assert(test4([2]) == [2, 11, 3, 7]);
29 }
30