Bug 5239 – optimizer misreports an used before set error

Status
RESOLVED
Resolution
FIXED
Severity
normal
Priority
P2
Component
dmd
Product
D
Version
D2
Platform
Other
OS
All
Creation time
2010-11-18T22:34:00Z
Last change time
2011-08-03T17:13:21Z
Keywords
rejects-valid
Assigned to
nobody
Creator
braddr

Comments

Comment #0 by braddr — 2010-11-18T22:34:20Z
(an excerpt from runnable/interpret.d) struct S { int x; } template Compileable(int z) { bool OK=true;} int goodfoo3() { S[4] w = void; // uninitialized array of structs w[$-2].x = 217; // initialize one member return w[2].x; // line 8 } $ dmd -c -O f.d f.d(8): Error: variable w used before set note: filed as d2, but might well exist on d1 as well.. untested
Comment #1 by braddr — 2011-08-03T00:06:43Z
Part of the test case for bug 6293 triggers this bug when built with -O. See runnable/xtet46.d, test6293(). The buggy part is hidden behind version(none). class C6293 { C6293 token; } void f6293(in C6293[] a) pure { auto x0 = a[0].token; assert(x0 is a[0].token.token.token); assert(x0 is (&x0).token); version(none) { auto p1 = &x0 + 1; assert(x0 is (p1 - 1).token); } int c = 0; assert(x0 is a[c].token); } void test6293() { auto x = new C6293; x.token = x; f6293([x]); } See also: https://github.com/D-Programming-Language/dmd/pull/243
Comment #2 by bugzilla — 2011-08-03T17:13:21Z