digitalmars.D.bugs - [Issue 12993] New: DMD keeps references to symbols removed
- via Digitalmars-d-bugs (57/57) Jun 25 2014 https://issues.dlang.org/show_bug.cgi?id=12993
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 puremagic.com Reporter: Jesse.K.Phillips+D gmail.com CC: Jesse.K.Phillips+D 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' --
Jun 25 2014