Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Different D sequence point rules #18729

Open
dlangBugzillaToGithub opened this issue Nov 30, 2013 · 0 comments
Open

Different D sequence point rules #18729

dlangBugzillaToGithub opened this issue Nov 30, 2013 · 0 comments

Comments

@dlangBugzillaToGithub
Copy link

bearophile_hugs reported this on 2013-11-30T04:11:14Z

Transferred from https://issues.dlang.org/show_bug.cgi?id=11647

CC List

Description

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
", 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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant