On Sun, 24 May 2009 23:47:19 -0400, davidl <[email protected]> wrote:

import std.stdio;

string func()
{
        string s="abc";
        return s;
}

void func1()
{
        writefln("func1");
        string v = func();
        writefln("call func");
        writefln(func2());
}

byte[] func2()
{
        writefln("hello!");
        byte[16] v= [65,65,65,65,
                     65,65,65,65,
                     65,65,65,65,
                     65,65,65,65];
        writefln(v[0..16]);
        return v[0..16];
}

void main(string[] args)
{
        func1();
}

The culprit is the on stack array.

Should the compiler warn on slicing on a fixed length array? or even give an error? I find this use case can easily go wrong! You may even think this code is correct at the very first glance.

This can't be detected at compile time without full escape analysis.

It is an issue that has been in D forever. And they are hard to find, so it would be nice if it were flagged by the compiler, but I don't think it's going to happen anytime soon.

-Steve

Reply via email to