www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 1038] New: explicit class cast breakage in 1.007

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

           Summary: explicit class cast breakage in 1.007
           Product: D
           Version: 1.007
          Platform: PC
        OS/Version: All
            Status: NEW
          Severity: critical
          Priority: P2
         Component: DMD
        AssignedTo: bugzilla digitalmars.com
        ReportedBy: default_357-line yahoo.de


Consider the following code:
import std.stdio;

class A { }
class B : A { }

void main() {
  A test=new B;
  writefln("Test is ", test.toString);
  A test_2=cast(A)(new B);
  writefln("Test 2 is ", test_2.toString);
}

What we would expect to see is "test7.B" twice.
However, what we see is "test7.B" and "test7.A", which of course completely
breaks polymorphism.

The error doesn't appear on 1.005, so it was introduced either in '006 or '007.
Greetings --downs


-- 
Mar 08 2007
next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=1038


fvbommel wxs.nl changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |wrong-code





Judging by the disassembled code, it appears "cast(A)(new B)"is compiled as if
it was "new A", it passes the ClassInfo for A instead of that for B to
_d_newclass...

By the way, the same thing happens in GDC[1], so it's most likely an error in
the front-end.


[1]: (gdc 0.23, using dmd 1.007), the x86-64 Linux binary from sourceforge.


-- 
Mar 08 2007
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=1038






Added to DStress as
http://dstress.kuehne.cn/run/c/cast_34_A.d
http://dstress.kuehne.cn/run/c/cast_34_B.d


-- 
Mar 11 2007
prev sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=1038


thomas-dloop kuehne.cn changed:

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





Fixed in DMD-1.009


-- 
Mar 11 2007