[Issue 9335] Dtors are not called for dynamic arrays initialized by literals

d-bugmail at puremagic.com d-bugmail at puremagic.com
Thu Jan 17 10:07:56 PST 2013


http://d.puremagic.com/issues/show_bug.cgi?id=9335



--- Comment #2 from Maxim Fomin <maxim at maxim-fomin.ru> 2013-01-17 10:07:54 PST ---
(In reply to comment #1)
> Same answer as in http://d.puremagic.com/issues/show_bug.cgi?id=9334.
> 
> The array is allocated dynamically, and makes no promises it will release at
> the end of the scope, or of the program.
> 
> I'm not sure what you mean by "array literals", but you'll get the same
> behavior with:
> S[] arr = new S[](5);

Well, situation here is different than in issue 9334

import core.stdc.stdio : printf;

struct S
{
    int i;
    this(this) { printf("%X postbit\n", i); i = 0;}
    ~this() { printf("%X dtor\n", i); }
}

void main()
{
    S[] arr = [S()];
}

Dump of assembler code for function _Dmain:
   0x0000000000418894 <+0>:    push   %rbp
   0x0000000000418895 <+1>:    mov    %rsp,%rbp
   0x0000000000418898 <+4>:    sub    $0x10,%rsp
   0x000000000041889c <+8>:    movabs $0x1,%rsi
   0x00000000004188a6 <+18>:    movabs $0x6362a0,%rdi
   0x00000000004188b0 <+28>:    callq  0x41a610 <_d_arrayliteralTX>
   0x00000000004188b5 <+33>:    xor    %ecx,%ecx
   0x00000000004188b7 <+35>:    mov    %ecx,-0x8(%rbp)
   0x00000000004188ba <+38>:    lea    -0x8(%rbp),%rsi
   0x00000000004188be <+42>:    mov    %rax,%rdi
   0x00000000004188c1 <+45>:    movsb  %ds:(%rsi),%es:(%rdi)
   0x00000000004188c2 <+46>:    movsb  %ds:(%rsi),%es:(%rdi)
   0x00000000004188c3 <+47>:    movsb  %ds:(%rsi),%es:(%rdi)
   0x00000000004188c4 <+48>:    movsb  %ds:(%rsi),%es:(%rdi)
   0x00000000004188c5 <+49>:    mov    %rax,%rdx
   0x00000000004188c8 <+52>:    movabs $0x1,%rax
   0x00000000004188d2 <+62>:    mov    %rcx,%rax
   0x00000000004188d5 <+65>:    leaveq 
   0x00000000004188d6 <+66>:    retq   
End of assembler dump.

Array literal is allocated by _d_arrayliteralTX, yet is initialized by a stack
temporary S(). Where a dtor call on it? The behavior is in contrast to issue
9334 when a dtor in similar situation is called.

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


More information about the Digitalmars-d-bugs mailing list