[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