www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 17931] New: [scope] `return` == `return scope` breaks for

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

          Issue ID: 17931
           Summary: [scope] `return` == `return scope` breaks for struct
                    methods
           Product: D
           Version: D2
          Hardware: All
                OS: All
            Status: NEW
          Keywords: safe
          Severity: normal
          Priority: P3
         Component: dmd
          Assignee: bugzilla digitalmars.com
          Reporter: code dawg.eu

cat > bug.d << CODE
struct S
{
   safe S foo() return /* scope */
  {
    return this;
  }

  int* p; // so it has an indirection
}

void test(scope S s)  safe
{
  s.foo;
}
CODE

dmd -c -dip1000 bug.d
----
bug.d(13): Error: scope variable s assigned to non-scope parameter this calling
bug.S.foo
----

Introduced with https://github.com/dlang/dmd/pull/5909.

The above code can be compiled by using `return scope` instead, but in that
case the `return scope` is still reduced to `return` in the mangling.

Maybe it's a problem with struct methods being implicity ref for the this
parameter?
Hopefully we can consistently use `return` as abbreviation for `return scope`,
if it depends on the context, then it might not be worth the confusion.

--
Oct 23 2017