www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 17218] New: foreach on tupleof inside switch returns ref to

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

          Issue ID: 17218
           Summary: foreach on tupleof inside switch returns ref to
                    undefined address
           Product: D
           Version: D2
          Hardware: x86
                OS: Mac OS X
            Status: NEW
          Severity: minor
          Priority: P1
         Component: dmd
          Assignee: nobody puremagic.com
          Reporter: alex.goltman gmail.com

```
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`.

--
Feb 23 2017