Thread overview
[Issue 1570] New: Wrong return for address operator
Oct 11, 2007
d-bugmail
Nov 08, 2007
d-bugmail
Sep 09, 2008
d-bugmail
Sep 09, 2008
d-bugmail
Jun 28, 2011
Walter Bright
Jun 28, 2011
Stewart Gordon
Jun 28, 2011
Walter Bright
Jun 28, 2011
Walter Bright
Jan 22, 2012
Walter Bright
October 11, 2007
http://d.puremagic.com/issues/show_bug.cgi?id=1570

           Summary: Wrong return for address operator
           Product: D
           Version: 2.005
          Platform: PC
        OS/Version: Windows
            Status: NEW
          Severity: normal
          Priority: P2
         Component: DMD
        AssignedTo: bugzilla@digitalmars.com
        ReportedBy: PetSerAl@gmail.com


import std.stdio;

void main()
{
        b v=new b;
        v.f;
        v.a.f;
        (&v.f)();
        (&v.a.f)();
}

class a
{
        void f()
        {
                writeln("class a");
        }
}

class b:a
{
        void f()
        {
                writeln("class b");
        }
}


This program write:
class b
class a
class b
class b


-- 

November 08, 2007
http://d.puremagic.com/issues/show_bug.cgi?id=1570


smjg@iname.com changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |smjg@iname.com




------- Comment #1 from smjg@iname.com  2007-11-08 08:04 -------
What is v.a and where's it documented?  Should it work?


-- 

September 09, 2008
http://d.puremagic.com/issues/show_bug.cgi?id=1570


smjg@iname.com changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |accepts-invalid, wrong-code




------- Comment #2 from smjg@iname.com  2008-09-09 14:56 -------
Since I can't at the moment find any evidence in the spec that v.a is a valid expression, I'm marking this as accepts-invalid.  If I'm wrong, please show me where it's defined.


-- 

September 09, 2008
http://d.puremagic.com/issues/show_bug.cgi?id=1570





------- Comment #3 from jarrett.billingsley@gmail.com  2008-09-09 15:17 -------
(In reply to comment #2)
> Since I can't at the moment find any evidence in the spec that v.a is a valid expression, I'm marking this as accepts-invalid.  If I'm wrong, please show me where it's defined.
> 

a is the class a, which for some reason is accessible through a reference to class b.  If you capitalize the class names it makes it a lot clearer.

I think it might actually be somehow related to the thing about typeof(this) and non-virtual calls made on the expressions page:

http://www.digitalmars.com/d/1.0/expression.html

In any case it doesn't seem to be explicitly documented, but I wonder if there's a use for it.  It breaks encapsulation by allowing you to manually access a base class's implementation of a method, and with single inheritance there's no need to select the implementation from several base classes.


-- 

June 28, 2011
http://d.puremagic.com/issues/show_bug.cgi?id=1570


Stewart Gordon <smjg@iname.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |accepts-invalid

Walter Bright <bugzilla@digitalmars.com> changed:

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


--- Comment #5 from Stewart Gordon <smjg@iname.com> 2011-06-18 02:59:01 PDT ---
(In reply to comment #4)
> It seems to me that sample code is valid.
> Because dmd frontend has v.a as DotTypeExp explicitly and keeps its
> information,

a is not a member of v.  So the expression is invalid.  Unless you can find something in the spec that states otherwise.

> then resolve overloads of f as A.f.
> Therefore v.a.f should call A.f is right (but not documented) behavior.
> -> Remove 'accepts-invalid' from keywords.

How can a case of the compiler accepting something that the spec doesn't allow be neither accepts-invalid nor a spec issue?

--- Comment #6 from Walter Bright <bugzilla@digitalmars.com> 2011-06-28 12:45:57 PDT ---
v.a is supposed to work, and it means look up the name in the scope of the base class a.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
June 28, 2011
http://d.puremagic.com/issues/show_bug.cgi?id=1570



--- Comment #7 from Stewart Gordon <smjg@iname.com> 2011-06-28 13:00:09 PDT ---
(In reply to comment #6)
> v.a is supposed to work, and it means look up the name in the scope of the base class a.

Nice try.  Now supply a link to the relevant bit of the spec.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
June 28, 2011
http://d.puremagic.com/issues/show_bug.cgi?id=1570



--- Comment #8 from Walter Bright <bugzilla@digitalmars.com> 2011-06-28 13:28:55 PDT ---
(In reply to comment #7)
> (In reply to comment #6)
> > v.a is supposed to work, and it means look up the name in the scope of the base class a.
> Nice try.  Now supply a link to the relevant bit of the spec.

If it's not in the spec, it needs to be. Wanna do a pull request?

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
June 28, 2011
http://d.puremagic.com/issues/show_bug.cgi?id=1570



--- Comment #9 from Walter Bright <bugzilla@digitalmars.com> 2011-06-28 14:15:21 PDT ---
Fix for compiler, not spec yet:

https://github.com/D-Programming-Language/dmd/commit/2d8f2c76d514e56ccef0f8e77e844f0093c7c4ff

https://github.com/D-Programming-Language/dmd/commit/2c491bcd6bdf482a212b8ef28bb73cdfa6b60155

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
January 22, 2012
http://d.puremagic.com/issues/show_bug.cgi?id=1570



--- Comment #10 from github-bugzilla@puremagic.com 2012-01-21 21:08:25 PST ---
Commit pushed to https://github.com/D-Programming-Language/d-programming-language.org

https://github.com/D-Programming-Language/d-programming-language.org/commit/9d331033cfa109d8b44e687803cbbbbfc4f4bfe2 fix Issue 1570 - Wrong return for address operator

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
January 22, 2012
http://d.puremagic.com/issues/show_bug.cgi?id=1570


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: -------