www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 18870] New: Link failure only with -allinst for code in

https://issues.dlang.org/show_bug.cgi?id=18870

          Issue ID: 18870
           Summary: Link failure only with -allinst for code in
                    isExpression
           Product: D
           Version: D2
          Hardware: x86_64
                OS: Linux
            Status: NEW
          Severity: normal
          Priority: P1
         Component: dmd
          Assignee: nobody puremagic.com
          Reporter: sarn theartofmachinery.com

Hi, I'm using version 2.080.  Here's a reduced version of some code I had a
problem with:

import std.datetime.date;
import std.stdio;
void main()
{
        writef("%s", TimeOfDay());
}

It compiles and runs fine for me with no flags to dmd, but here's what happens
with -allinst:

$ dmd -allinst broken.d 
broken.o: In function
`_D3std5range10primitives__T5doPutTSQBh6format__T11hasToStringTSQCj8datetime4date9TimeOfDayTaZ9__lambda2MFZ1STaZQDgFNaNbNiNfKQDmKaZv':
broken.d:(.text._D3std5range10primitives__T5doPutTSQBh6format__T11hasToStringTSQCj8datetime4date9TimeOfDayTaZ9__lambda2MFZ1STaZQDgFNaNbNiNfKQDmKaZv[_D3std5range10primitives__T5doPutTSQBh6format__T11hasToStringTSQCj8datetime4date9TimeOfDayTaZ9__lambda2MFZ1STaZQDgFNaNbNiNfKQDmKaZv]+0x14):
undefined reference to
`_D3std6format__T11hasToStringTSQBd8datetime4date9TimeOfDayTaZ9__lambda2MFZ1S3putMFNaNbNiNfaZv'
broken.o: In function
`_D3std5range10primitives__T5doPutTSQBh6format__T11hasToStringTSQCj8datetime4date9TimeOfDayTaZ9__lambda2MFZ1STaZQDgFNaNbNiNfKQDmaZv':
broken.d:(.text._D3std5range10primitives__T5doPutTSQBh6format__T11hasToStringTSQCj8datetime4date9TimeOfDayTaZ9__lambda2MFZ1STaZQDgFNaNbNiNfKQDmaZv[_D3std5range10primitives__T5doPutTSQBh6format__T11hasToStringTSQCj8datetime4date9TimeOfDayTaZ9__lambda2MFZ1STaZQDgFNaNbNiNfKQDmaZv]+0x14):
undefined reference to
`_D3std6format__T11hasToStringTSQBd8datetime4date9TimeOfDayTaZ9__lambda2MFZ1S3putMFNaNbNiNfaZv'
broken.o: In function
`_D3std5range10primitives__T5doPutTSQBh6format__T11hasToStringTSQCj8datetime4date9TimeOfDayTaZ9__lambda2MFZ1STxaZQDhFNaNbNiNfKQDnKxaZv':
broken.d:(.text._D3std5range10primitives__T5doPutTSQBh6format__T11hasToStringTSQCj8datetime4date9TimeOfDayTaZ9__lambda2MFZ1STxaZQDhFNaNbNiNfKQDnKxaZv[_D3std5range10primitives__T5doPutTSQBh6format__T11hasToStringTSQCj8datetime4date9TimeOfDayTaZ9__lambda2MFZ1STxaZQDhFNaNbNiNfKQDnKxaZv]+0x14):
undefined reference to
`_D3std6format__T11hasToStringTSQBd8datetime4date9TimeOfDayTaZ9__lambda2MFZ1S3putMFNaNbNiNfaZv'
collect2: error: ld returned 1 exit status
Error: linker exited with status 1

The missing symbol demangles to this:

pure nothrow  nogc  safe void
std.format.hasToString!(const(std.datetime.date.TimeOfDay),
char).__lambda2().S.put(char)

(That __lambda2 is from an isExpression, so it makes sense for it to be missing
from the object file.)

--
May 17 2018