Jump to page: 1 2 3
Thread overview
[Issue 6178] New: Struct inside the AA are not init correctly
Jun 19, 2011
Jose Garcia
Jun 19, 2011
Jose Garcia
Jun 19, 2011
Jose Garcia
Jun 19, 2011
Jose Garcia
Jun 19, 2011
kennytm@gmail.com
Jan 19, 2012
Jose Garcia
Dec 13, 2012
Don
Dec 13, 2012
Maxim Fomin
Dec 28, 2012
SomeDude
Jan 15, 2013
Dmitry Olshansky
Jan 16, 2013
Maxim Fomin
Jan 16, 2013
Dmitry Olshansky
Jan 16, 2013
Maxim Fomin
Apr 04, 2013
Kenji Hara
Sep 07, 2013
Kenji Hara
Sep 07, 2013
Kenji Hara
Sep 07, 2013
Kenji Hara
Sep 07, 2013
Kenji Hara
Sep 08, 2013
Kenji Hara
Sep 22, 2013
Kenji Hara
Sep 22, 2013
Kenji Hara
Sep 22, 2013
Walter Bright
June 19, 2011
http://d.puremagic.com/issues/show_bug.cgi?id=6178

           Summary: Struct inside the AA are not init correctly
           Product: D
           Version: D2
          Platform: Other
        OS/Version: Windows
            Status: NEW
          Severity: normal
          Priority: P2
         Component: DMD
        AssignedTo: nobody@puremagic.com
        ReportedBy: jsancio@gmail.com


--- Comment #0 from Jose Garcia <jsancio@gmail.com> 2011-06-19 12:39:02 PDT ---


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



--- Comment #1 from Jose Garcia <jsancio@gmail.com> 2011-06-19 12:45:41 PDT ---
Err -- Hit submit without a description...

I am going to assume that this was not already filed. If so please accept my apologies.

If you create an AA that points to a struct the is not initialized properly. In other word it is not the same as S.init. If this stays that way in can completely confuse the dtor. For example:

import std.stdio;

struct Bug
{
   this(this) { writefln("%s postblit ctor called", var); }
   void opAssign(Bug rhs) { writefln("%s opAssign called", var); }
   ~this() { writefln("%s dtor called", var); }

   int var = 0;
}

void main()
{
   Bug[int] map;
   {
      map[0] = Bug(1);
   }
}

This yields the following output (you need -O or you will hit bug 6177):

dmd -w -O map_test.d && ./map_test
3 opAssign called
1 dtor called
3 dtor called

Where in the world is 3 coming from? You output may be slightly different.

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


Jose Garcia <jsancio@gmail.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Priority|P2                          |P1
          Component|DMD                         |druntime
           Platform|Other                       |x86
         OS/Version|Windows                     |Linux
           Severity|normal                      |blocker


--- Comment #2 from Jose Garcia <jsancio@gmail.com> 2011-06-19 12:47:14 PDT ---
Moving it to druntime since it probably belongs there.

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



--- Comment #3 from Jose Garcia <jsancio@gmail.com> 2011-06-19 13:20:15 PDT ---
I am getting around this issue with:

enum : uint { TOKEN = 987654321 }

struct Bug
{
   ~this()
   {
      if(token == TOKEN) { ...}
   }

   private uint token = TOKEN;
}

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


kennytm@gmail.com changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |kennytm@gmail.com
          Component|druntime                    |DMD


--- Comment #4 from kennytm@gmail.com 2011-06-19 14:56:10 PDT ---
With an opAssign, an assignment to an AA struct will become something like

    Bug __aatmp1234 = void;   // <---
    __aatmp1234.opAssign(1);
    map.set(0, __aatmp1234);
    map[0].___postblit();

the '3' is likely due to the '<---' line. See bug 2451.

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


Andrei Alexandrescu <andrei@metalanguage.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |andrei@metalanguage.com


--- Comment #5 from Andrei Alexandrescu <andrei@metalanguage.com> 2012-01-18 08:40:19 PST ---
Update - with the dmd from the head the example causes

Internal error: backend/cgcs.c 162

If the destructor is commented out, the printed message on my machine is

-2084965984 opAssign called

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



--- Comment #6 from Jose Garcia <jsancio@gmail.com> 2012-01-18 18:22:55 PST ---
Andrei,

Do you still get the compiler internal error with -0? See bug 6177.

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



--- Comment #7 from Andrei Alexandrescu <andrei@metalanguage.com> 2012-01-19 07:11:42 PST ---
(In reply to comment #6)
> Andrei,
> 
> Do you still get the compiler internal error with -0? See bug 6177.

I don't understand the question.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
March 16, 2012
http://d.puremagic.com/issues/show_bug.cgi?id=6178


hsteoh@quickfur.ath.cx changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |hsteoh@quickfur.ath.cx


--- Comment #8 from hsteoh@quickfur.ath.cx 2012-03-16 08:10:42 PDT ---
I think he meant -O, not -0.

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



--- Comment #9 from Don <clugdbug@yahoo.com.au> 2012-12-13 09:35:46 PST ---
On Linux, I see the bug only with 32 bits, it works OK with 64 bits.

With -m64 and -m64 -O, I get

0 opAssign called
1 dtor called
0 dtor called

whereas with -m32 I get

-142997715 opAssign called
1 dtor called
-142997715 dtor called

and with -m32 -O

2 opAssign called
1 dtor called
2 dtor called

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
« First   ‹ Prev
1 2 3