Thread overview
[Issue 8599] New: Link time error when class's method are defined without body and nothing is abstract
Aug 29, 2012
deadalnix
Aug 29, 2012
Jonathan M Davis
Sep 02, 2012
deadalnix
August 29, 2012
http://d.puremagic.com/issues/show_bug.cgi?id=8599

           Summary: Link time error  when class's method are defined
                    without body and nothing is abstract
           Product: D
           Version: D2
          Platform: All
        OS/Version: All
            Status: NEW
          Severity: normal
          Priority: P2
         Component: DMD
        AssignedTo: nobody@puremagic.com
        ReportedBy: deadalnix@gmail.com


--- Comment #0 from deadalnix <deadalnix@gmail.com> 2012-08-29 12:52:57 PDT ---
The sample code is the simplest ever :

class A {
    void foo();
}

This will cause the error :
classfail.o:(.rodata+0x50): undefined reference to `_D9classfail1A3fooMFZv'

when compiling with dmd 2.060

declaring A or foo as abstract fix the problem. abstract should be deducted from code or compilation should fail before linking stage.

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


Jonathan M Davis <jmdavisProg@gmx.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
                 CC|                            |jmdavisProg@gmx.com
         Resolution|                            |INVALID


--- Comment #1 from Jonathan M Davis <jmdavisProg@gmx.com> 2012-08-29 14:00:34 PDT ---
abstract is never inferred. Why would it be inferred? Functions are only abstract if marked abstract.

And if a function is not abstract, then it needs a body/definition, so obviousy it's going to fail at link time when the linker doesn't find a definition for it. It's perfectly legal to declare a function without giving its body as long as the linker has the body. That's how .di files work. It's also useful with stuff like version(D_Ddoc) where there is no definition and shouldn't be one.

This isn't a bug.

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



--- Comment #2 from deadalnix <deadalnix@gmail.com> 2012-09-02 12:55:53 PDT ---
(In reply to comment #1)
> abstract is never inferred. Why would it be inferred? Functions are only abstract if marked abstract.
> 
> And if a function is not abstract, then it needs a body/definition, so obviousy it's going to fail at link time when the linker doesn't find a definition for it. It's perfectly legal to declare a function without giving its body as long as the linker has the body. That's how .di files work. It's also useful with stuff like version(D_Ddoc) where there is no definition and shouldn't be one.
> 
> This isn't a bug.

You are right. I'm so dumb sometime.

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