Wrong C code: #include <stdio.h> int main(){ int i = 0; int a[] = {10,20,30}; int r = 1 * a[i++] + 2 * a[i++] + 3 * a[i++]; printf("%d\n", r); return 0; } Clang gives on that code: warning: multiple unsequenced modifications to 'i' [-Wunsequenced] GCC 4.8.0 gives on that code: test.c: In function 'main': test.c:5:46: warning: operation on 'i' may be undefined [-Wsequence-point] int r = 1 * a[i++] + 2 * a[i++] + 3 * a[i++]; ^ test.c:5:46: warning: operation on 'i' may be undefined [-Wsequence-point] This similar D code compiles and prints "140": void main() { import std.stdio; int i = 0; auto a = [10, 20, 30]; int r = 1 * a[i++] + 2 * a[i++] + 3 * a[i++]; r.writeln; } I suggest to statically forbid such D code, or to make it defined and deterministic on all D compilers. (From my coding experience, I find that kind of code often confusing for the programmer too, I refactor away that kind of code, so probably I'd like it to be forbidden). More info: http://www.open-std.org/jtc1/sc22/wg14/www/docs/n925.htm http://www.open-std.org/jtc1/sc22/wg14/www/docs/n926.htm http://www.open-std.org/jtc1/sc22/wg14/www/docs/n927.htm
THIS ISSUE HAS BEEN MOVED TO GITHUB https://github.com/dlang/dmd/issues/18729 DO NOT COMMENT HERE ANYMORE, NOBODY WILL SEE IT, THIS ISSUE HAS BEEN MOVED TO GITHUB