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
Comment #2 by b2.temp — 2023-02-11T07:44:46Z
working since 2.071