Bug 10423 – built-in arrays being overwritten

Status
RESOLVED
Resolution
DUPLICATE
Severity
normal
Priority
P2
Component
dmd
Product
D
Version
D2
Platform
All
OS
All
Creation time
2013-06-20T05:50:00Z
Last change time
2015-06-09T01:31:19Z
Assigned to
nobody
Creator
iteronvexor

Comments

Comment #0 by iteronvexor — 2013-06-20T05:50:00Z
// GNU/Linux 64-bit // DMD 2.063 This is as far as I could narrow it down. ------------8<------------8<------------ import std.stdio; struct S(size_t M, size_t N) { double[] _data = new double[M*N]; alias _data this; this(double[M*N] data...) pure nothrow { _data[] = data[]; } } unittest { auto m1 = S!(4,4)(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1); auto m2 = S!(2,2)(1,1,1,1); auto m3 = S!(2,3)(1,1,1,1,1,1); auto m4 = S!(3,2)(1,1,1,1,1,1); auto m6 = S!(3,3)(1,1,1,1,1,1,1,1,1); auto m9 = S!(4,4)(4,0,0,0,0,0,2,0,0,1,2,0,1,0,0,1); assert(S!(2,2)(1,1,1,1)._data == [1,1,1,1]); writeln(m1); } void main() { } ------------>8------------>8------------ Expected: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ,1 ,1 ,1 ,1] I get: [4, 0, 0, 0, 0, 0, 2, 0, 0, 1, 2, 0, 1, 0, 0, 1]
Comment #1 by nilsbossung — 2013-06-20T07:39:13Z
Reduction shows that it's a duplicate of issue 2947: struct S { double[] _data = new double[1]; this(int ignored) {} } void main() { assert(S()._data !is S()._data); // passes assert(S(0)._data !is S(0)._data); // fails assert((new S)._data !is (new S)._data); // fails } *** This issue has been marked as a duplicate of issue 2947 ***