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. ***