[Issue 12993] New: DMD keeps references to symbols removed
via Digitalmars-d-bugs
digitalmars-d-bugs at puremagic.com
Wed Jun 25 21:28:43 PDT 2014
https://issues.dlang.org/show_bug.cgi?id=12993
Issue ID: 12993
Summary: DMD keeps references to symbols removed
Product: D
Version: D2
Hardware: x86_64
OS: Linux
Status: NEW
Severity: enhancement
Priority: P1
Component: DMD
Assignee: nobody at puremagic.com
Reporter: Jesse.K.Phillips+D at gmail.com
CC: Jesse.K.Phillips+D at gmail.com
The following code causes DMD to keep a reference to a symbol it does not
output to the object file. At least that is the best explanation I have. A
number of modifications will cause it to compile and link and where marked with
numbered comments.
DMD 2.065 and 2.066-devel-a6a2682
------------
template wrap(Targets...)
{
template wrap(Source)
{
auto wrap(Source src) {
return new Impl(src); // 5: remove (Not solution for dmd 2.065)
}
// 3: Structural is not a template
class Impl : Structural!Source, Targets // 4: remove Targets
{
this(Source s){ }
public:
override int quack() { return 3; } // 4: remove
}
}
}
interface Structural(T) {} // 3: don't use template
unittest
{
interface Quack
{
int quack();
}
class Human
{
}
Human h1 = new Human();
interface Refleshable{}
enum a = __traits(compiles, h1.wrap!Refleshable); // 1: remove
h1.wrap!Quack; // 2: remove
}
-------------
$ dmd -unittest -main type2.d
type2.o:(.data._D5type243__T4wrapTC5type215__unittestL17_1FZv5QuackZ43__T4wrapTC5type215__unittestL17_1FZv5HumanZ4Impl7__ClassZ+0x98):
undefined reference to
`_D5type250__T10StructuralTC5type215__unittestL17_1FZv5HumanZ10Structural11__InterfaceZ'
--
More information about the Digitalmars-d-bugs
mailing list