Bug 10943 – Nested lambda alias in template arguments has no code generated
Status
RESOLVED
Resolution
WORKSFORME
Severity
normal
Priority
P3
Component
dmd
Product
D
Version
D2
Platform
x86_64
OS
Linux
Creation time
2013-09-01T14:41:11Z
Last change time
2023-02-11T07:44:46Z
Assigned to
No Owner
Creator
kirsybuu
Comments
Comment #0 by kirsybuu — 2013-09-01T14:41:11Z
struct LambWrap(alias f) {
alias F = f;
}
struct LinkBug(S) {
int method() { return S.F(); }
}
void main() {
LinkBug!( LambWrap!( () => 4 ) ) w;
}
//////////////////////////////////////////////////////////
Breaks in dmd version 2.063.2 (and in current v2.064-devel):
$ uname -r -s -v
Linux 3.5.0-28-generic #48-Ubuntu SMP Tue Apr 23 23:03:38 UTC 2013
$ dmd -v lambdalink.d
binary dmd
version v2.063
config /etc/dmd.conf
parse lambdalink
importall lambdalink
import object (/usr/include/dmd/druntime/import/object.di)
semantic lambdalink
entry main lambdalink.d
semantic2 lambdalink
semantic3 lambdalink
code lambdalink
function D main
function lambdalink.LinkBug!(LambWrap!(function int()
{
return 4;
}
)).LinkBug.method
gcc lambdalink.o -o lambdalink -m64 -L/usr/lib/x86_64-linux-gnu -L/usr/lib/i386-linux-gnu -Xlinker --no-warn-search-mismatch -Xlinker --export-dynamic -l:libphobos2.a -lpthread -lm -lrt
lambdalink.o: In function `_D10lambdalink94__T7LinkBugTS10lambdalink57__T8LambWrapS41_D10lambdalink4mainFZv9__lambda1FNaNbNfZiZ8LambWrapZ7LinkBug6methodMFNaNbNfZi':
lambdalink.d:(.text._D10lambdalink94__T7LinkBugTS10lambdalink57__T8LambWrapS41_D10lambdalink4mainFZv9__lambda1FNaNbNfZiZ8LambWrapZ7LinkBug6methodMFNaNbNfZi+0x49): undefined reference to `_D10lambdalink4mainFZv9__lambda1FNaNbNfZi'
collect2: error: ld returned 1 exit status
--- errorlevel 1
Comment #1 by justin — 2015-04-16T22:34:02Z
This bug is still present in 2.067.0 and is blocking some useful code from being developed. Here's another repro:
-----
template Job(alias w){ alias work = w; }
template doAll(Jobs...)
{
import std.typetuple;
alias jobs = staticMap!(Job, Jobs);
void doAll()
{
foreach (job; jobs)
job.work();
}
}
import std.stdio;
void main(string[] args)
{
doAll!({ writeln("1"); });
}
-----
$ dmd bug_10943.d
bug_10943.o: In function `_D9bug_1094351__T5doAllS38_D9bug_109434mainFAAyaZ9__lambda2FNfZvZ5doAllFNfZv':
bug_10943.d:(.text._D9bug_1094351__T5doAllS38_D9bug_109434mainFAAyaZ9__lambda2FNfZvZ5doAllFNfZv+0x5): undefined reference to `_D9bug_109434mainFAAyaZ9__lambda2FNfZv'
collect2: error: ld returned 1 exit status
--- errorlevel 1
$ nm bug_10943.o | grep lambda
U _D9bug_109434mainFAAyaZ9__lambda2FNfZv
0000000000000000 W _D9bug_1094351__T5doAllS38_D9bug_109434mainFAAyaZ9__lambda2FNfZvZ5doAllFNfZv