digitalmars.D.bugs - [Issue 11647] New: Different D sequence point rules
- d-bugmail puremagic.com (49/49) Nov 30 2013 https://d.puremagic.com/issues/show_bug.cgi?id=11647
https://d.puremagic.com/issues/show_bug.cgi?id=11647 Summary: Different D sequence point rules Product: D Version: D2 Platform: All OS/Version: All Status: NEW Severity: enhancement Priority: P2 Component: DMD AssignedTo: nobody puremagic.com ReportedBy: bearophile_hugs eml.cc 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 -- Configure issuemail: https://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Nov 30 2013