July 04, 2013
Hello guys !
I'm found strange error when compiling following code:

http://dpaste.1azy.net/b40ce9a4

The error is:
src\phobos\std\stdio.d(1872): Error: variable _param_1 used before set

Problem exists only when using following options: -inline -O
I'm using DMD 2.063.2 on Windows.

Can anybody help with it ? Also i can't minimize the test-case.
July 04, 2013
On Thursday, 4 July 2013 at 08:34:24 UTC, Temtaime wrote:
> Hello guys !
> I'm found strange error when compiling following code:
>
> http://dpaste.1azy.net/b40ce9a4
>
> The error is:
> src\phobos\std\stdio.d(1872): Error: variable _param_1 used before set
>
> Problem exists only when using following options: -inline -O
> I'm using DMD 2.063.2 on Windows.
>
> Can anybody help with it ? Also i can't minimize the test-case.

Looks like a bug related with size 0 matrices: It makes you declare an empty static array, which then does some conflicts, since the code to "initialize" it is optimized out. Reduced test case:

--------
struct S
{
    int[0] a;

    void do_it()
    {
        foo(a);
    }
}

void foo(Args...)(Args args)
{
    foreach(arg; args)
        if (arg.ptr == null)
            return;

    bar(args);
}

void bar(Args...)(Args args)
{
    baz(args);
}

void baz(Args...)(Args args)
{
    foreach(arg; args)
        if (arg.ptr == null)
            return;
}

void main()
{}
--------

I've filed it:
http://d.puremagic.com/issues/show_bug.cgi?id=10540

To workaround it, I'd suggest writing your code in such a way that you stop the recursion a "1", and not "0".