[Issue 17920] New: Missing postblit for `T lhs = cast(T) <const(T) rhsLValue>`

d-bugmail at puremagic.com d-bugmail at puremagic.com
Fri Oct 20 21:03:35 UTC 2017


https://issues.dlang.org/show_bug.cgi?id=17920

          Issue ID: 17920
           Summary: Missing postblit for `T lhs = cast(T) <const(T)
                    rhsLValue>`
           Product: D
           Version: D2
          Hardware: All
                OS: All
            Status: NEW
          Severity: major
          Priority: P1
         Component: dmd
          Assignee: nobody at puremagic.com
          Reporter: kinke at gmx.net

Casting away the constness from a right-hand-side lvalue skips the required
postblit call:

```
import core.stdc.stdio;

int postblit = 0, dtor = 0;

struct S
{
  uint val;
  this(this) { ++postblit; ++val; }
  ~this() { ++dtor; }
}

void foo(S s)
{
  const fromMutable = cast(S) s;
  printf("fromMutable.val: %d\n", fromMutable.val);
}

void fooConst(const S s)
{
  const fromConst = cast(S) s;
  printf("fromConst.val: %d\n", fromConst.val);
}

void main()
{
  const x = S(100);
  foo(x);
  printf("postblit: %d, dtor: %d\n", postblit, dtor);
  fooConst(x);
  printf("postblit: %d, dtor: %d\n", postblit, dtor);
}
```

DMD 2.076.1 yields:
```
fromMutable.val: 102
postblit: 2, dtor: 2
fromConst.val: 101
postblit: 3, dtor: 4
```

--


More information about the Digitalmars-d-bugs mailing list