| /* |
| REQUIRED_ARGS: -preview=dip1000 |
| TEST_OUTPUT: |
| --- |
| fail_compilation/test17450.d(17): Error: returning `&s.bar` escapes a reference to parameter `s` |
| fail_compilation/test17450.d(16): perhaps annotate the parameter with `return` |
| fail_compilation/test17450.d(20): Error: returning `&this.bar` escapes a reference to parameter `this` |
| fail_compilation/test17450.d(19): perhaps annotate the function with `return` |
| --- |
| */ |
| // https://issues.dlang.org/show_bug.cgi?id=17450 |
| |
| alias dg_t = void delegate(); |
| |
| struct S { |
| @safe dg_t foo1(ref S s) { |
| return &s.bar; |
| } |
| @safe dg_t foo2() { |
| return &bar; |
| } |
| |
| @safe dg_t foo3(return ref S s) { |
| return &s.bar; |
| } |
| @safe dg_t foo4() return { |
| return &bar; |
| } |
| |
| @safe void bar(); |
| } |
| |
| /* |
| TEST_OUTPUT: |
| --- |
| fail_compilation/test17450.d(103): Error: scope parameter `c` may not be returned |
| fail_compilation/test17450.d(106): Error: scope parameter `this` may not be returned |
| --- |
| */ |
| // https://issues.dlang.org/show_bug.cgi?id=17450 |
| |
| #line 100 |
| |
| class C { |
| @safe dg_t foo1(scope C c) { |
| return &c.bar; |
| } |
| @safe dg_t foo2() scope { |
| return &bar; |
| } |
| |
| @safe dg_t foo3(return scope C c) { |
| return &c.bar; |
| } |
| @safe dg_t foo4() return scope { |
| return &bar; |
| } |
| |
| @safe void bar(); |
| } |