This is a wrong D2 program, because the lengths of the arrays don't match: // Program #1 void main() { int[2] a1; int[3] a2; int[6] result; result[] = a1 ~ a2; } It compiles with no errors, because a1~a2 produces a dynamic array, despite its length is determined at compile-time. I'd like the compile to catch this bug at compile-time. The situation in Program #1 is not so common, but a little more refined implementation of the same kind of tests may catch at compile-time more common cases, like: // Program #2 void main() { int[] a1 = new int[2]; int[] a2 = new int[3]; int[6] result; result[] = a1 ~ a2; // Error a1 ~= 0; result[] = a1 ~ a2; } // Program #3 void main() { int[] a1 = new int[2]; int[] a2 = new int[3]; int[] result = new int[6]; result[] = a1 ~ a2; // Error }
https://github.com/D-Programming-Language/dmd/pull/4741 It will make the Program #1 case error. Program #2 and #3 case are not in range, because they needs data flow analysis.
THIS ISSUE HAS BEEN MOVED TO GITHUB https://github.com/dlang/dmd/issues/18302 DO NOT COMMENT HERE ANYMORE, NOBODY WILL SEE IT, THIS ISSUE HAS BEEN MOVED TO GITHUB