D - A bug?
When dmd for Windows NT is used to compile the following code, dmd crashes and
generates an exception.
import c.stdio;
template TCopy(T) {
void copy(out T to, T from)
{
to = from;
}
}
template TCopy(char[])
{
void copy(out char[] to, char[] from)
{
printf("Specialization\n");
to = from;
}
}
int main()
{
int i = 0;
float f = 0;
char[] s;
instance TCopy(int) copyint;
instance TCopy(char[]) copystr;
copyint.copy(i, 3);
printf("%d\n", i);
copystr.copy(s, "Here it comes");
printf("%.*s\n", s);
return 0;
}
The dump captured by Dr. Watson is like,
*----> Task List <----*
0 Idle.exe
2 System.exe
20 SMSS.exe
30 CSRSS.exe
34 WINLOGON.exe
40 SERVICES.exe
43 LSASS.exe
69 SPOOLSS.exe
97 mcshield.exe
124 NALNTSRV.exe
156 RPCSS.exe
154 SNABASE.exe
165 SNMP.exe
180 wm.exe
198 Wuser32.exe
220 clisvcl.exe
227 PSTORES.exe
231 mstask.exe
235 WinMgmt.exe
213 nddeagnt.exe
281 EXPLORER.exe
65 systray.exe
292 PELMICED.exe
287 LOADWC.exe
304 dpmw32.exe
307 nwtray.exe
309 launch32.exe
217 shstat.exe
323 mozilla.exe
340 WZQKPICK.exe
342 SMSMon32.exe
215 rundll32.exe
331 CMD.exe
356 bash.exe
375 exceed.exe
386 CMD.exe
393 bash.exe
249 OUTLOOK.exe
417 MAPISP32.exe
346 DDHELP.exe
372 FrameworkServic.exe
408 UpdaterUI.exe
140 vstskmgr.exe
399 SMSAPM32.exe
479 naPrdMgr.exe
105 bash.exe
447 phoenix.exe
349 bash.exe
444 dmd.exe
428 DRWTSN32.exe
0 _Total.exe
(00400000 - 004c4000)
(77f60000 - 77fbf000) dll\ntdll.dbg
(77f00000 - 77f5f000) dll\kernel32.dbg
(77e70000 - 77ec2000) dll\user32.dbg
(77ed0000 - 77efc000) dll\gdi32.dbg
(77dc0000 - 77dff000) dll\advapi32.dbg
(77e10000 - 77e67000) dll\rpcrt4.dbg
(10000000 - 10000000)
State Dump for Thread Id 0x192
eax=008a8248 ebx=00000000 ecx=008c715c edx=008aaa50 esi=008aaa50 edi=008a820c
eip=00404282 esp=0012fee4 ebp=008a8248 iopl=0 nv up ei pl nz na po nc
cs=001b ss=0023 ds=0023 es=0023 fs=0038 gs=0000 efl=00000206
function: <nosymbols>
0040426e 31c0 xor eax,eax
00404270 5e pop esi
00404271 5b pop ebx
00404272 83c408 add esp,0x8
00404275 c20400 ret 0x4
00404278 51 push ecx
00404279 8b442408 mov eax,[esp+0x8] ss:0108e8eb=????????
0040427d 51 push ecx
0040427e 53 push ebx
0040427f 8b5804 mov ebx,[eax+0x4] ds:01806c4e=????????
FAULT ->00404282 8b13 mov edx,[ebx]
ds:00000000=????????
00404284 56 push esi
00404285 89d9 mov ecx,ebx
00404287 ff5214 call dword ptr [edx+0x14] ds:01809456=????????
0040428a 50 push eax
0040428b e830ee0700 call 004830c0
00404290 83c404 add esp,0x4
00404293 8b33 mov esi,[ebx] ds:00000000=????????
00404295 50 push eax
00404296 8bcb mov ecx,ebx
00404298 ff5614 call dword ptr [esi+0x14] ds:01809456=????????
0040429b 50 push eax
*----> Stack Back Trace <----*
008a8248 00000000 00000000 00000000 00000000 00000000 !<nosymbols>
00497994 00403a3c 00481470 00481474 0048148c 00403aa4 !<nosymbols>
00415334 2b74cb89 799403c7 03c70049 004977a4 17ec03c7 !<nosymbols>
*----> Raw Stack Dump <----*
0012fee4 94 ae 85 00 5c 71 8c 00 - 5c 71 8c 00 1d 4d 42 00 ....\q..\q...MB.
0012fef4 48 82 8a 00 98 ad 85 00 - 28 48 85 00 2c 0f 41 00 H.......(H..,.A.
0012ff04 48 82 8a 00 40 ae 85 00 - 64 1c 85 00 98 ad 85 00 H... ...d.......
0012ff14 04 00 00 00 94 ae 85 00 - 00 00 00 00 fb 44 42 00 .............DB.
0012ff24 40 ae 85 00 e4 45 85 00 - 64 1c 85 00 00 00 00 00 ....E..d.......
0012ff34 00 00 00 00 01 00 00 00 - 00 00 00 00 00 00 00 00 ................
0012ff44 e7 2a 40 00 00 00 00 00 - 00 00 00 00 c0 ff 12 00 .* .............
0012ff54 00 f0 fd 7f 04 00 00 00 - 08 db 4a 00 01 00 00 00 ..........J.....
0012ff64 01 00 00 00 dc 03 85 00 - 00 00 00 00 44 45 85 00 ............DE..
0012ff74 08 db 4a 00 01 00 00 00 - 01 00 00 00 dc a2 85 00 ..J.............
0012ff84 2e 2b 48 00 03 00 00 00 - 94 45 85 00 60 04 85 00 .+H......E..`...
0012ff94 00 00 00 00 00 00 00 00 - 00 00 00 00 00 f0 fd 7f ................
0012ffa4 00 00 00 00 98 ff 12 00 - 30 fd 12 00 e0 ff 12 00 ........0.......
0012ffb4 5c 85 48 00 e8 dd 4a 00 - 00 00 00 00 f0 ff 12 00 \.H...J.........
0012ffc4 b5 bb f1 77 00 00 00 00 - 00 00 00 00 00 f0 fd 7f ...w............
0012ffd4 05 00 00 c0 c8 ff 12 00 - 2c fd 12 00 ff ff ff ff ........,.......
0012ffe4 6c b9 f3 77 60 d2 f3 77 - 00 00 00 00 00 00 00 00 l..w`..w........
0012fff4 00 00 00 00 a4 2a 48 00 - 00 00 00 00 b0 00 00 00 .....*H.........
00130004 00 01 00 00 ff ee ff ee - 02 00 01 00 00 00 01 00 ................
00130014 00 fe 00 00 00 00 10 00 - 00 20 00 00 00 02 00 00 ......... ......
The specialization for template TCopy is wrong, but a compiler should ...
Jul 09 2003
Replacing: template TCopy(char[]) with: template TCopy(T:char[]) will resolve the issue. The compiler is fixed now to correctly diagnose the problem. Thanks!
Jul 11 2003








"Walter" <walter digitalmars.com>