[Issue 17927] New: [scope] scope input return value can be escaped

d-bugmail at puremagic.com d-bugmail at puremagic.com
Sun Oct 22 17:16:42 UTC 2017


https://issues.dlang.org/show_bug.cgi?id=17927

          Issue ID: 17927
           Summary: [scope] scope input return value can be escaped
           Product: D
           Version: D2
          Hardware: All
                OS: Linux
            Status: NEW
          Keywords: safe
          Severity: normal
          Priority: P4
         Component: dmd
          Assignee: bugzilla at digitalmars.com
          Reporter: code at dawg.eu

cat > bug.d << CODE
struct String
{
pure nothrow @nogc:
    inout(char)[] opSlice() inout scope @trusted
    {
        return ptr[0 .. len];
    }

    char *ptr;
    size_t len;
}

void escape(const char[] s) nothrow @safe @nogc
{
    static const(char)[] cache;
    cache = s;
}

///
nothrow @safe
unittest
{
    auto s = String(&"Hello".dup[0], 5);
    escape(s[]);
}
CODE
dmd -c -unittest -dip1000 bug.d
----

Should error with `scope variable this.ptr may not be returned`.

workaround:
----
    char[] opSlice() scope @trusted
    {
        return ptr[0 .. len];
    }

    const(char)[] opSlice() const scope @trusted
    {
        return ptr[0 .. len];
    }
----

--


More information about the Digitalmars-d-bugs mailing list