[Issue 14074] non-separate compilation fails, but separate compilation works

via Digitalmars-d-bugs digitalmars-d-bugs at puremagic.com
Sat Jan 31 19:53:49 PST 2015


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

sinkuupump at gmail.com changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |link-failure
                 CC|                            |sinkuupump at gmail.com

--- Comment #1 from sinkuupump at gmail.com ---
This is introduced by pull:
https://github.com/D-Programming-Language/dmd/pull/3948

I reduced into small source files:

//////// cbor.d
void encodeCbor(R, E)(R sink, E value)
{
    encodeCborInt(sink);
    encodeCborArray(sink, value);

    static assert(false);
}

void encodeLongType(R)(R sink)
{
    import primitives;
    put(sink);
}

void encodeCborInt(R)(R sink)
{
    encodeLongType(sink);
}

void encodeCborArrayHead(R)(R sink, ulong arrayLength)
{
    encodeLongType(sink);
}

void encodeCborArray(R, A)(R sink, A)
{
    encodeCborArrayHead(sink,
        __traits(compiles, { encodeCbor(cast(ubyte[])null, A.tupleof[0].init);
}));
}


//////// primitives.d
void put(R)(R)
{
}


//////// test.d
import primitives; // necessary
import cbor;

struct Inner {
}

struct Test {
    Inner inner;
}


void main () {
    ubyte[] buffer;
    Test test ;

    encodeCborArray(buffer, test);
}


$ ls
cbor.d  primitives.d  test.d
$ dmd test.d cbor.d
test.o: In function `pure nothrow @nogc @safe void
cbor.encodeLongType!(ubyte[]).encodeLongType(ubyte[])':
cbor.d:(.text.pure nothrow @nogc @safe void
cbor.encodeLongType!(ubyte[]).encodeLongType(ubyte[])+0x1c): undefined
reference to `pure nothrow @nogc @safe void
primitives.put!(ubyte[]).put(ubyte[])'
collect2: error: ld returned 1 exit status
--- errorlevel 1
$ dmd -allinst test.d cbor.d && echo OK
OK
$ dmd -c cbor.d
$ dmd test.d cbor.o && echo OK
OK

--


More information about the Digitalmars-d-bugs mailing list