Bug 1471 – Linker error on template function. Error 42: Symbol Undefined ...

Status
RESOLVED
Resolution
FIXED
Severity
normal
Priority
P2
Component
dmd
Product
D
Version
D2
Platform
x86
OS
Windows
Creation time
2007-09-04T01:02:00Z
Last change time
2015-06-09T05:11:57Z
Keywords
link-failure, patch
Assigned to
nobody
Creator
gamerChad

Comments

Comment #0 by gamerChad — 2007-09-04T01:02:34Z
void explode(char[] foo)() { int gremlins; char[] bar = foo[gremlins..$]; } void main(){ explode!("BOOM"); } The above program prints the following when compiled: C:\dmd\bin\..\..\dm\bin\link.exe main,,,user32+kernel32/noi; OPTLINK (R) for Win32 Release 7.50B1 Copyright (C) Digital Mars 1989 - 2001 All Rights Reserved main.obj(main) Error 42: Symbol Undefined _D4main27__T7explodeVG4aa4_424f4f4dZ7explodeFZv8__do llark --- errorlevel 1 This was tested with DMD 1.020 on Windows XP.
Comment #1 by kennytm — 2011-05-08T01:09:21Z
Still not fixed in D2.052 :) ------------------------------------- void explode(string foo)() { int gremlins = 0; string bar = foo[gremlins .. $]; } void main(){ explode!("BOOM")(); } ------------------------------------- Undefined symbols: "_D1x27__T7explodeVAyaa4_424f4f4dZ7explodeFZv8__dollark", referenced from: _D1x27__T7explodeVAyaa4_424f4f4dZ7explodeFZv8__dollark$non_lazy_ptr in x.o (maybe you meant: _D1x27__T7explodeVAyaa4_424f4f4dZ7explodeFZv8__dollark$non_lazy_ptr) ld: symbol(s) not found collect2: ld returned 1 exit status --- errorlevel 1 ------------------------------------- '_D1x27__T7explodeVAyaa4_424f4f4dZ7explodeFZv8__dollark' means 'void x.explode!("BOOM").explode().uint __dollar'.
Comment #2 by kennytm — 2011-06-30T10:25:34Z
Reduced test case for 1.068: ----------------------------------- void main(){ const string s = "BOOM"; int gremlins = 0; string bar = s[gremlins .. $]; } ----------------------------------- Undefined symbols: "_D1y4mainFZv8__dollark", referenced from: _D1y4mainFZv8__dollark$non_lazy_ptr in y.o (maybe you meant: _D1y4mainFZv8__dollark$non_lazy_ptr) ld: symbol(s) not found collect2: ld returned 1 exit status --- errorlevel 1 ----------------------------------- The equivalent for 2.054: ----------------------------------- void main(){ enum string s = "BOOM"; int gremlins = 0; string bar = s[gremlins .. $]; } -----------------------------------
Comment #3 by kennytm — 2011-06-30T10:25:49Z
*** Issue 5062 has been marked as a duplicate of this issue. ***
Comment #4 by k.hara.pg — 2011-07-14T04:24:28Z
Comment #5 by bugzilla — 2011-07-20T15:44:48Z
Comment #6 by bugzilla — 2011-07-20T15:48:06Z