Bug 17218 – foreach on tupleof inside switch returns ref to undefined address
Status
RESOLVED
Resolution
DUPLICATE
Severity
major
Priority
P1
Component
dmd
Product
D
Version
D2
Platform
All
OS
All
Creation time
2017-02-23T13:36:00Z
Last change time
2017-04-23T13:38:34Z
Keywords
wrong-code
Assigned to
nobody
Creator
alex.goltman
Comments
Comment #0 by alex.goltman — 2017-02-23T13:36:08Z
```
import std.stdio;
struct S {
int x;
}
S s;
void main() {
foreach (i, ref m; s.tupleof) {
writefln("%s %s, %s", &s.tupleof[i], &m, m);
}
switch (0) {
foreach (i, ref m; s.tupleof) {
case i:
writefln("%s %s, %s", &s.tupleof[i], &m, m);
}
default:
}
}
```
Output:
```
7FAEC3D00260 7FAEC3D00260, 0
7FAEC3D00260 10DBF58F7, 15760771
```
Sometimes it crashes on segmentation fault since it doesn't really copy `m` where it thinks it is.
Same happens when `s` is `__gshared S s;`.
Reproduces both on `dmd v2.071.0 on OSX` and `ldc2 1.1.0git-3139c87 on linux`.
Comment #1 by schveiguy — 2017-04-23T13:38:34Z
*** This issue has been marked as a duplicate of issue 16521 ***