Does anyone have any idea why DMD would assert with the following assert on this code while building the druntime during DI generation?

Generating This DI file...
// D import file generated from 'src\core\bitop.d'
module core.bitop;
nothrow
{
        pure int bsf(size_t v);

        pure int bsr(size_t v);

        pure int bt(in size_t* p, size_t bitnum);

        int btc(size_t* p, size_t bitnum);
        int btr(size_t* p, size_t bitnum);
        int bts(size_t* p, size_t bitnum);
        pure uint bswap(uint v);

        ubyte inp(uint port_address);
        ushort inpw(uint port_address);
        uint inpl(uint port_address);
        ubyte outp(uint port_address, ubyte value);
        ushort outpw(uint port_address, ushort value);
        uint outpl(uint port_address, uint value);
        int popcnt(uint x);
        debug (UnitTest)
        {
        }
        uint bitswap(uint x);
        debug (UnitTest)
        {
        }
}

produces this assert in DMD: assert cast.c(2082) t1->ty == t2->ty
which appears to be the typeMerge function in cast.c

It doesn't do this on all DI files and I am at a loss as to any rhyme or reason for when it does assert. Perhaps someone with knowledge of the compiler internals could be of help...

Any ideas would be very helpful!

--
Adam Wilson
Project Coordinator
The Horizon Project
http://www.thehorizonproject.org/

Reply via email to