[Issue 21031] New: Undefined behaviour: associative array literals with side effects.

d-bugmail at puremagic.com d-bugmail at puremagic.com
Thu Jul 9 09:19:26 UTC 2020


https://issues.dlang.org/show_bug.cgi?id=21031

          Issue ID: 21031
           Summary: Undefined behaviour: associative array literals with
                    side effects.
           Product: D
           Version: D2
          Hardware: All
                OS: All
            Status: NEW
          Severity: normal
          Priority: P1
         Component: dmd
          Assignee: nobody at puremagic.com
          Reporter: ibuclaw at gdcproject.org

Example:
---
int a()
{
    static int b;
    return ++b;
}
void main()
{
    import core.stdc.stdio;
    auto aa = [a:a, a:a, a:a, a:a];
    foreach (k, v; aa)
        printf("%d: %d\n", k, v);
}
---

DMD outputs:
4: 8
3: 7
2: 6
1: 5

GDC outputs:
6: 2
7: 3
5: 1
8: 4

LDC outputs:
7: 8
5: 6
3: 4
1: 2

Each answer makes perfect logical sense when you consider how the literal
expression is lowered, but not all can be the correct, intuitive answer.

(NB: GDC output is when running on x86, every other target, e.g: ARM, would
evaluate in the same order as DMD x86).

--


More information about the Digitalmars-d-bugs mailing list