[Issue 13750] New: @nogc decreasing array lenghts with decrementing operator --
via Digitalmars-d-bugs
digitalmars-d-bugs at puremagic.com
Wed Nov 19 02:27:39 PST 2014
https://issues.dlang.org/show_bug.cgi?id=13750
Issue ID: 13750
Summary: @nogc decreasing array lenghts with decrementing
operator --
Product: D
Version: D2
Hardware: x86
OS: Windows
Status: NEW
Keywords: rejects-valid
Severity: enhancement
Priority: P1
Component: druntime
Assignee: nobody at puremagic.com
Reporter: bearophile_hugs at eml.cc
I think (with the current dynamic array design) decreasing array lenghts should
be @nogc:
void main() @nogc {
int[3] a = [1, 2, 3];
auto b = a[];
b = b[0 .. $ - 1]; // OK
assert(b.length == 2);
b.length--; // Error, rejects-valid
}
dmd 2.067alpha gives:
test2.d(6,13): Error: setting 'length' in @nogc function main may cause GC
allocation
In theory this too should be @nogc, but I think this can be done only with some
weak form of dependent typing and only if the increase/decrease values are
compile-time constants:
void main() @nogc {
int[3] a = [1, 2, 3];
auto b = a[];
b.length -= 1;
assert(b.length == 2);
b.length += -1;
assert(b.length == 1);
}
--
More information about the Digitalmars-d-bugs
mailing list