Bug 12721 – Unresolved Symbols when Linking

Status
RESOLVED
Resolution
WORKSFORME
Severity
normal
Priority
P1
Component
dmd
Product
D
Version
D2
Platform
x86_64
OS
Linux
Creation time
2014-05-09T09:57:42Z
Last change time
2020-03-21T03:56:34Z
Assigned to
No Owner
Creator
Puneet Goel

Comments

Comment #0 by puneet — 2014-05-09T09:57:42Z
Compiles and runs when the modules are compiled and linked in one go: $ dmd bar.d foo.d; But if the modules are compiled separately, I get missing symbols: $ dmd -c bar.d $ dmd -c foo.d $ dmd -ofbar bar.o foo.o bar.o: In function `_D3foo34__T3FooS19_D3foo4Wrap3fooMFZvViN1Z3Foo31__T4elabTC3foo4WrapTC3foo4WrapZ4elabFNaNbNfC3foo4WrapC3foo4WrapZv': bar.d:(.text._D3foo34__T3FooS19_D3foo4Wrap3fooMFZvViN1Z3Foo31__T4elabTC3foo4WrapTC3foo4WrapZ4elabFNaNbNfC3foo4WrapC3foo4WrapZv+0xe): undefined reference to `_D3foo3Bar42__T4FooTTC3foo4WrapS19_D3foo4Wrap3fooMFZvZ4FooT7__ClassZ' bar.d:(.text._D3foo34__T3FooS19_D3foo4Wrap3fooMFZvViN1Z3Foo31__T4elabTC3foo4WrapTC3foo4WrapZ4elabFNaNbNfC3foo4WrapC3foo4WrapZv+0x2a): undefined reference to `_D3foo3Bar42__T4FooTTC3foo4WrapS19_D3foo4Wrap3fooMFZvZ4FooT6__ctorMFNaNbNiNfC3foo4WrapZC3foo3Bar42__T4FooTTC3foo4WrapS19_D3foo4Wrap3fooMFZvZ4FooT' collect2: error: ld returned 1 exit status --- errorlevel 1 // module bar.d import foo; class Frop: Wrap{} void main() { Frop frop = new Frop; frop.bar(); } // module foo.d class Foo(alias F, size_t S=0) { static elab(T, L)(T t, L l) { t.new t.FooT!(T, F)(t); } } auto reDelegate(alias F, T)(T e) { final getFuncName() { return "e." ~ __traits(identifier, F); } typeof(& mixin(getFuncName)) dg; return dg; } void bar(T)(T t) { static if(t.tupleof.length) { t.tupleof[0].elab(t, t); } static if(is(T B == super) && is(B[0] : Bar)) { B[] b ; bar(b); } } class Bar { class FooT(T, alias F): Foo!(F) { this(T t) { auto dg = reDelegate!F(t); } } } class Wrap: Bar { void foo() {} Foo!(foo, -1) foo_; }
Comment #1 by jonfandrew — 2016-06-01T21:47:52Z
Ran example code w/ DMD v2.071.0 on OSX 64-bit and was not able to duplicate the bug.
Comment #2 by b2.temp — 2019-11-03T21:06:32Z
confirmed to work on linux x86_64