www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 10423] New: built-in arrays being overwritten

reply d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=10423

           Summary: built-in arrays being overwritten
           Product: D
           Version: unspecified
          Platform: All
        OS/Version: All
            Status: NEW
          Severity: normal
          Priority: P2
         Component: DMD
        AssignedTo: nobody puremagic.com
        ReportedBy: iteronvexor gmail.com



// 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]

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Jun 20 2013
parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=10423


Nils <nilsbossung googlemail.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
                 CC|                            |nilsbossung googlemail.com
         Resolution|                            |DUPLICATE



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

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Jun 20 2013