digitalmars.D.bugs - [Issue 4511] New: Contravariance problem
- d-bugmail puremagic.com (48/48) Jul 26 2010 http://d.puremagic.com/issues/show_bug.cgi?id=4511
- d-bugmail puremagic.com (30/30) Dec 09 2010 http://d.puremagic.com/issues/show_bug.cgi?id=4511
- d-bugmail puremagic.com (18/22) Dec 09 2010 http://d.puremagic.com/issues/show_bug.cgi?id=4511
- d-bugmail puremagic.com (11/13) Dec 09 2010 http://d.puremagic.com/issues/show_bug.cgi?id=4511
- d-bugmail puremagic.com (13/13) Jun 17 2011 http://d.puremagic.com/issues/show_bug.cgi?id=4511
- d-bugmail puremagic.com (13/13) Nov 08 2011 http://d.puremagic.com/issues/show_bug.cgi?id=4511
http://d.puremagic.com/issues/show_bug.cgi?id=4511 Summary: Contravariance problem Product: D Version: D2 Platform: x86 OS/Version: Windows Status: NEW Keywords: accepts-invalid Severity: normal Priority: P2 Component: DMD AssignedTo: nobody puremagic.com ReportedBy: bearophile_hugs eml.cc A problem found by Jesse Phillips. This is Java program: class Base {} class Derived extends Base {} abstract class Abstract { abstract Base foo(); } class Concrete extends Abstract { Override Derived foo() { return new Base(); } } class Test {} The javac compiler prints: Test.java:11: incompatible types return new Base(); ^ required: Derived found: Base 1 error But dmd 2.047 compiles this D2 program with no errors: class Base {} class Derived : Base {} abstract class Abstract { abstract Base foo(); } class Concrete : Abstract { override Derived foo() { return new Base; } } void main() {} -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Jul 26 2010
http://d.puremagic.com/issues/show_bug.cgi?id=4511 Michal Minich <michal.minich gmail.com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |michal.minich gmail.com PST --- Slightly extended example shows that the returned instance is of type derived!, but constructor is not called. class Base {} class Derived : Base { this () { x = 1; } int x; } abstract class Abstract { abstract Base foo(); } class Concrete : Abstract { override Derived foo() { return new Base; } } void main() { auto c = new Concrete; auto x = c.foo(); writeln (typeof(x).stringof); // prints Derived (even it is result of 'new Base') writeln (x.x); // prints 0 (wich means Derived's constructor is not called) x.x = 2; writeln (x.x); // prints 2 } -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Dec 09 2010
http://d.puremagic.com/issues/show_bug.cgi?id=4511 Sobirari Muhomori <dfj1esp02 sneakemail.com> changed: What |Removed |Added ---------------------------------------------------------------------------- Blocks| |2573 11:27:03 PST ---auto c = new Concrete; auto x = c.foo(); writeln (typeof(x).stringof); // prints Derived (even it is result of 'new Base')You're doing it wrong. typeof(x) is evaluated at compile time and always gives the declared type even if x==null The correct code is --- auto c = new Concrete; auto x = c.foo(); writeln(x.classinfo.name); // Base --- -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Dec 09 2010
http://d.puremagic.com/issues/show_bug.cgi?id=4511 Sobirari Muhomori <dfj1esp02 sneakemail.com> changed: What |Removed |Added ---------------------------------------------------------------------------- Severity|normal |critical 11:31:30 PST ---x.x = 2; writeln (x.x); // prints 2This just writes to the memory after the allocated Base object, probably corrupting heap. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Dec 09 2010
http://d.puremagic.com/issues/show_bug.cgi?id=4511 yebblies <yebblies gmail.com> changed: What |Removed |Added ---------------------------------------------------------------------------- Keywords| |patch CC| |yebblies gmail.com Platform|x86 |All OS/Version|Windows |All https://github.com/D-Programming-Language/dmd/pull/137 -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Jun 17 2011
http://d.puremagic.com/issues/show_bug.cgi?id=4511 Walter Bright <bugzilla digitalmars.com> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED CC| |bugzilla digitalmars.com Resolution| |FIXED 02:20:51 PST --- https://github.com/D-Programming-Language/dmd/commit/b3bbae5302ed7b68d98134d389dfc8d3cc735119 https://github.com/D-Programming-Language/dmd/commit/1209914a3cca53bd2026bedccbae6118026b666c -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Nov 08 2011