Don wrote:
strtr wrote:
strtr Wrote:

dmd(1.048/55/56) crashed on me:
AppName: dmd.exe     AppVer: 0.0.0.0     ModName: unknown
ModVer: 0.0.0.0     Offset: 00000002
There is a lot of crash data but I do not know where to start looking.
I've also tried finding which part of the code is responsible, but I haven't found it yet.

Everything is working again and I have found this piece of code which chokes the compiler.

module main;

//Digital Mars D Compiler v1.056
//bud_win_3.04.exe -full -cleanup

enum ENUM
{
N0 = 1, //N0 = x; crashes for some values of x, ie. 1 and 10. and not for others ie. 3.
    N1,
    N2,
    N3,
    N4,
    N5,
    N6,
    N7,
    N8,
    N9,
    N10,
    N11,
    N12,
    N13,
    N14,     N15,     N16,
    N17,
    N18
}

const char[][ ENUM.max + 1 ] ENUM_NAME =     [
        ENUM.N0 : "N0",
    ];

void main()
{
    char[] text = `Hi`;
switch(text)
    {
        //case `N0`:                //this works
        case ENUM_NAME[ENUM.N0]:    //this doesn't
            //return ENUM.N0;
        default:
            break;
    }
}

I will post it together with my previous reported enum incomprehensibility bug if it can't be further minimized.

Excellent! I can reproduce it.
The D2 version of this code (char[] text = `Hi`.dup;) segfaults in Expression::arraySyntaxCopy() in expression.c, with evidence of memory corruption. The D1 version does *not* segfault there. In fact the code compiles with the debug version of DMD1!
I think the array literal isn't getting initialized properly.

And it's a regression, introduced in DMD1.046. It worked in 1.045.

Reply via email to