January 15, 2006
Stop me if I've got the wrong end of the stick but:

DMD seems to incorrectly set bits in arrays of bit arrays. The following test program:

import std.stdio;

int main( char[][] args )
{
    bit[][] foo;

    foo.length = 5;
    for( int i = 0; i < foo.length; ++i )
        foo[i].length = 5;

    foo[0][1] = true;
    foo[1][0] = true;

    foo[0][4] = true;
    foo[4][0] = true;

    foo[2][3] = true;
    foo[3][2] = true;

    for( int j = 0; j < 5; ++j )
        writefln( foo[j] );

    return 0;
}

gives output:

[false,false,false,false,false]
[true,false,false,false,false]
[false,false,false,false,false]
[false,false,false,false,false]
[true,false,false,false,false]

Obviously there should be more 'trues' - looks like only the first bit in each array is set. If I change 'bit[][]' to 'byte[]][]' all the 1s are in the right places:

[0,1,0,0,1]
[1,0,0,0,0]
[0,0,0,1,0]
[0,0,1,0,0]
[1,0,0,0,0]

Happens using DMD v0.143 under winXP and linux