Bug 11647 – Different D sequence point rules

Status
NEW
Severity
enhancement
Priority
P4
Component
dmd
Product
D
Version
D2
Platform
All
OS
All
Creation time
2013-11-30T04:11:14Z
Last change time
2024-12-13T18:14:45Z
Keywords
spec
Assigned to
No Owner
Creator
bearophile_hugs
Moved to GitHub: dmd#18729 →

Comments

Comment #0 by bearophile_hugs — 2013-11-30T04:11:14Z
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
Comment #1 by robert.schadek — 2024-12-13T18:14:45Z
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