June 14, 2021 [Issue 22023] New: adding `return` to escaped argument of a variadic defeats @safe | ||||
---|---|---|---|---|
| ||||
https://issues.dlang.org/show_bug.cgi?id=22023 Issue ID: 22023 Summary: adding `return` to escaped argument of a variadic defeats @safe Product: D Version: D2 Hardware: All OS: All Status: NEW Severity: major Priority: P1 Component: dmd Assignee: nobody@puremagic.com Reporter: iamthewilsonator@hotmail.com Given ``` Foo createFoo() @safe { return Foo(1, 2, 3); } void main() @safe { import std.stdio : writeln; auto foo = createFoo(); foreach (f; foo.e) writeln(f, " "); } ``` Defining Foo as: ``` struct Foo { this(int[] e...) @safe { this.e = e; } int[] e; } ``` correctly errors as "Error: scope variable `e` assigned to `this` with longer lifetime" Adding return to the variadic argument ``` struct Foo { this(return int[] e...) @safe { this.e = e; } int[] e; } ``` Compiles and prints garbage: e.g. 1 0 2003568368 -- |
Copyright © 1999-2021 by the D Language Foundation