Thread overview | |||||
---|---|---|---|---|---|
|
August 29, 2012 [Issue 8599] New: Link time error when class's method are defined without body and nothing is abstract | ||||
---|---|---|---|---|
| ||||
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 [Issue 8599] Link time error when class's method are defined without body and nothing is abstract | ||||
---|---|---|---|---|
| ||||
Posted in reply to deadalnix | 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 [Issue 8599] Link time error when class's method are defined without body and nothing is abstract | ||||
---|---|---|---|---|
| ||||
Posted in reply to deadalnix | 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: ------- |
Copyright © 1999-2021 by the D Language Foundation