[Issue 20149] [DIP1000] Local data escapes `opSlice` if not annotated with `return`
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Wed Sep 4 13:15:29 UTC 2019
https://issues.dlang.org/show_bug.cgi?id=20149
--- Comment #5 from Mike Franklin <slavo5150 at yahoo.com> ---
A more reduced test case:
---
import std.stdio;
@safe:
struct ScopeBuffer
{
this(char[4] init)
{
this.buf = init;
}
// The bug is that `inout` implies `return` on `this`.
// See
https://github.com/dlang/dmd/blob/2dc5b15d1949148d460e8c809dd878e6dec8dfa3/src/dmd/func.d#L511-L513
inout(char)[] opSlice(size_t lower, size_t upper) inout
do
{
return buf[lower .. upper]; //BUG: compiler error should be emitted
here
}
char[4] buf;
}
char[] fun()
{
char[4] buf = "abcd";
auto sb = ScopeBuffer(buf);
return sb[0..2];
}
void main()
{
auto s = fun();
writeln(s);
}
---
https://run.dlang.io/is/Pu1125
The problem is that the compiler is inferring `return` on `this` when decorated
with `inout`.
This was discussed in issue 17927.
--
More information about the Digitalmars-d-bugs
mailing list