www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 7375] New: Regression(2.057): Invalid downcast permitted with derived/aliased template classes

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

           Summary: Regression(2.057): Invalid downcast permitted with
                    derived/aliased template classes
           Product: D
           Version: D2
          Platform: All
        OS/Version: All
            Status: NEW
          Keywords: wrong-code
          Severity: regression
          Priority: P2
         Component: DMD
        AssignedTo: nobody puremagic.com
        ReportedBy: cbkbbejeap mailinator.com



00:22:38 PST ---
a.d:
----------------
import b;

void main(string[] args)
{
    auto foo = getEleven();
    //auto dummy = cast(Derived!11)foo;
    assert(cast(Derived!22)foo is null);
}

alias DerivedAlias!22 X;
----------------

b.d:
----------------
module b;

Base getEleven()
{
    Base foo = new MoreDerived!11(null);
    return foo;
}

class Base
{
    Base a;
    this(Base a)
    {
        this.a = a;
    }
}

class Derived(int i) : Base
{
    this(Base a)
    {
        super(a);
    }
}

class MoreDerived(int i) : Derived!i
{
    this(Base a)
    {
        super(a);
    }
}

template DerivedAlias(int i)
{
    alias Derived!i DerivedAlias;
}
----------------

On 2.057, the assert fails. (It's fine on 2.056.)

If you uncomment the "dummy" line, the problem goes away (merely creating an
alias for Derived!11 does not work). However, that's *not* a general workaround
because in order to test what the runtime type is, you have to *already* know
*all* the types it might be and attempt to downcast to each of them.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Jan 27 2012
next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=7375




00:26:47 PST ---
Sorry, I forgot to finish minimizing "b.d". The properly minimized "b.d" is:

--------------------
module b;

Base getEleven()
{
    Base foo = new MoreDerived!11();
    return foo;
}

class Base {}
class Derived(int i) : Base {}
class MoreDerived(int i) : Derived!i {}

template DerivedAlias(int i)
{
    alias Derived!i DerivedAlias;
}
--------------------

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Jan 27 2012
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=7375


Walter Bright <bugzilla digitalmars.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |bugzilla digitalmars.com



22:16:19 PST ---
A one file version:
-------------------
class A {}
class B(int i) : A {}
class C(int i) : B!i {}

template DerivedAlias(int i)
{
    alias B!i DerivedAlias;
}

alias DerivedAlias!22 X;

void main(string[] args)
{
    A foo = new C!11();
    //auto dummy = cast(B!11)foo;
    assert(cast(B!22)foo is null);
}

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Jan 29 2012
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=7375




01:20:02 PST ---
The failure definitely happened between 2.056 and 2.057. Anyone care to run the
git binary diff thing?

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Jan 30 2012
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=7375




02:02:19 PST ---
Auch, I found it. In druntime/src/rt/cast_.d, the addition of a name compare
saying the classes are the same in _d_isbaseof and _d_isbaseof2.

Not sure what the right fix is.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Jan 30 2012
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=7375




02:04:29 PST ---
The culprit:

https://github.com/D-Programming-Language/druntime/commit/5d21d47b5adda97759d15ec0139c0d5fac646971

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Jan 30 2012
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=7375


yebblies <yebblies gmail.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |yebblies gmail.com



I suspected is was that commit. (I remember seeing it when it was committed) 
Sorry I didn't get around to looking into it earlier.

I think the solution is to do a compare on the full mangled name of the class,
but  I can't see anywhere it's exposed in the classinfo so it would need to be
added.

This should probably be delayed until after the release and the commit
reverted.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Jan 30 2012
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=7375


dawg dawgfoto.de changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |dawg dawgfoto.de




https://github.com/D-Programming-Language/druntime/commits/29f33bfdc0d36484e77ae8f369656720319f22e3.

This added classinfo.name comparison while searching base classes.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Jan 30 2012
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=7375




https://github.com/D-Programming-Language/druntime/pull/142

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Jan 30 2012
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=7375




Commits pushed to master at https://github.com/D-Programming-Language/dmd

https://github.com/D-Programming-Language/dmd/commit/3a6c3629f3185c2d65354d1f04c500eb737d49d9
fix Issue 7375 - Regression(2.057): Invalid downcast permitted with
derived/aliased template classes

https://github.com/D-Programming-Language/dmd/commit/667ff95c935bc1cf743517b69d2dc421e43f9a51
fix Issue 7375 - Regression(2.057): Invalid downcast permitted with
derived/aliased template classes

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Jan 30 2012
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=7375




Commit pushed to dmd-1.x at https://github.com/D-Programming-Language/dmd

https://github.com/D-Programming-Language/dmd/commit/06a33d14f9ad137d86309d40180ca0e60f4edb74
fix Issue 7375 - Regression(2.057): Invalid downcast permitted with
derived/aliased template classes

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Jan 30 2012
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=7375


Walter Bright <bugzilla digitalmars.com> changed:

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


-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Jan 30 2012
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=7375




11:17:53 PST ---
I fixed this in the compiler, not the runtime.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Jan 30 2012
prev sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=7375




Commit pushed to master at https://github.com/D-Programming-Language/druntime

https://github.com/D-Programming-Language/druntime/commit/b7bdcdce294729e48b56fa5d8feca5aa9a8cc253


This reverts commit 29f33bfdc0d36484e77ae8f369656720319f22e3, reversing
changes made to f11dd3e56476f75804809ecc14da2e65de3f335e.

fixes Issue 7375

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