Walter Bright:

The @nogc logic is entirely contained in the front end, and is not affected by back end logic.

Thank you for your answer and sorry for me being sometimes too much nervous.
So the problem I was alarmed about doesn't exists.

Some time ago I have filed this ER:
https://issues.dlang.org/show_bug.cgi?id=12642

That shows this rejected code that I thought could be accepted:

__gshared int[1] data1;
int[1] bar() @nogc {
    int x;
    return [x];
}
void main() @nogc {
    int x;
    data1 = [x];
    int[1] data2;
    data2 = [x];
}


So that's an example of what you are talking about. DMD is already performing some stack allocation of array literals that the @nogc is not seeing and rejecting.

Kenji Hara has commented:

If you remove @nogc annotation, all array literals will be
allocated on stack. So this is pure front-end issue,
and may be fixed easily.

So the ER 12642 should be a wontfix, or a front-end rule should be added to be added so all D compilers allocate those cases on the stack.

If I am not missing some more point, what is the best solution?

Bye,
bearophile

Reply via email to