Thread overview
[Issue 3198] New: wrong initializer for structs arrays
Jul 21, 2009
nfxjfg@gmail.com
Dec 30, 2009
Don
Dec 30, 2009
Don
Jan 07, 2011
nfxjfg@gmail.com
Jan 07, 2011
Brad Roberts
Jan 21, 2011
Don
Feb 06, 2011
Don
July 21, 2009
http://d.puremagic.com/issues/show_bug.cgi?id=3198

           Summary: wrong initializer for structs arrays
           Product: D
           Version: 1.046
          Platform: x86
        OS/Version: All
            Status: NEW
          Keywords: wrong-code
          Severity: major
          Priority: P2
         Component: DMD
        AssignedTo: nobody@puremagic.com
        ReportedBy: nfxjfg@gmail.com


The following example compiles, but the output is wrong. It seems the initializer for a struct array is ignored; instead, the default initializer of the struct is used for the array.

import std.stdio;
import std.string;

struct T {
   int g = 1;
   string toString() {
      return format("%s", g);
   }
}

class Foo {
   int[5] x = 4;
   //this doesn't work
   //basically, the "=T(4)" part is ignored
   T[5] y = T(4);
}

void main() {
   auto f = new Foo();
   //both lines should output the same
   //but it shows f.y is [1,1,1,1,1]
   writefln("f.x = %s", f.x);
   writefln("f.y = %s", f.y);
}

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
December 30, 2009
http://d.puremagic.com/issues/show_bug.cgi?id=3198


Don <clugdbug@yahoo.com.au> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |patch
                 CC|                            |clugdbug@yahoo.com.au


--- Comment #1 from Don <clugdbug@yahoo.com.au> 2009-12-30 14:35:46 PST ---
The bug clearly lies in todt.c, inside dt_t **TypeSArray::toDtElem(dt_t **pdt, Expression *e).

If it's an array of structs, (ie, tbn->ty == Tstruct), then the 'e' value is completely ignored!! This is certainly wrong.


Changing the two places where the check is:
    if (tbn->ty == Tstruct)
into:
    if (tbn != e->type && tbn->ty == Tstruct)

allows the test case to pass.
But that may not be the correct criterion to use.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
December 30, 2009
http://d.puremagic.com/issues/show_bug.cgi?id=3198



--- Comment #2 from Don <clugdbug@yahoo.com.au> 2009-12-30 14:56:32 PST ---
Or else, create a new version of TypeStruct::toDtElem, which doesn't have the
special-case for structs members, and call it from
StructDeclaration::toDt() and ClassDeclaration::toDt2()

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
January 07, 2011
http://d.puremagic.com/issues/show_bug.cgi?id=3198


nfxjfg@gmail.com changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
         Resolution|                            |WONTFIX


-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
January 07, 2011
http://d.puremagic.com/issues/show_bug.cgi?id=3198


Brad Roberts <braddr@puremagic.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|RESOLVED                    |REOPENED
                 CC|                            |braddr@puremagic.com
         Resolution|WONTFIX                     |


-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
January 21, 2011
http://d.puremagic.com/issues/show_bug.cgi?id=3198



--- Comment #3 from Don <clugdbug@yahoo.com.au> 2011-01-21 13:42:39 PST ---
The patch for bug 1914 fixes this.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
February 06, 2011
http://d.puremagic.com/issues/show_bug.cgi?id=3198


Don <clugdbug@yahoo.com.au> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|REOPENED                    |RESOLVED
         Resolution|                            |FIXED


--- Comment #4 from Don <clugdbug@yahoo.com.au> 2011-02-06 13:48:37 PST ---
Fixed https://github.com/D-Programming-Language/dmd/commit/0c7bd71609735814f5bb410f903e454643ac260f

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