mirror of
https://github.com/dlang/dmd.git
synced 2025-04-26 13:10:12 +03:00

* Fix issue 22306 - scope array variable should be stack allocated * Update changelog/scope-array-on-stack.dd Co-authored-by: Max Haughton <maxhaton@gmail.com> Co-authored-by: Max Haughton <maxhaton@gmail.com>
43 lines
945 B
D
43 lines
945 B
D
/*
|
|
REQUIRED_ARGS: -betterC -preview=dip1000
|
|
*/
|
|
|
|
__gshared int numDtor;
|
|
|
|
struct S
|
|
{
|
|
int a;
|
|
~this() nothrow @nogc @trusted { ++numDtor; }
|
|
}
|
|
|
|
void takeScopeSlice(const scope S[] slice) nothrow @nogc @safe {}
|
|
|
|
extern(C) int main() nothrow @nogc @safe
|
|
{
|
|
takeScopeSlice([ S(1), S(2) ]); // @nogc => no GC allocation
|
|
(() @trusted { assert(numDtor == 2); })(); // stack-allocated array literal properly destructed
|
|
assert23100([]);
|
|
|
|
// https://issues.dlang.org/show_bug.cgi?id=22306
|
|
// scope array variable should be stack allocated
|
|
scope int[] sa = [10, 20];
|
|
assert(sa[0] == 10);
|
|
assert(sa[1] == 20);
|
|
assert(sa.length == 2);
|
|
|
|
return 0;
|
|
}
|
|
|
|
// https://issues.dlang.org/show_bug.cgi?id=23098
|
|
void f23098(scope inout(int)[] d) @safe {}
|
|
|
|
void test23098() @safe
|
|
{
|
|
f23098([10, 20]);
|
|
}
|
|
|
|
// https://issues.dlang.org/show_bug.cgi?id=23100
|
|
void assert23100(scope int[] d) @safe nothrow @nogc
|
|
{
|
|
assert(!d);
|
|
}
|