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 ***