You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
When the return value is modified inside a scope(exit/success) block, the spec does not say what the semantics are.
A test program that demonstrates that the implementation exhibits different semantics depending on function call ABI (returned large structs are passed by ref):
```import std.stdio;struct Big { ulong a; ulong[4] b;}struct Small { ulong a; ulong b;}auto quirk(T)() { T result; scope(success) { result.a = 10; } return result;}void main() { auto small = quirk!Small(); writeln(small); auto big = quirk!Big(); writeln(big);}```
The issue is further complicated if the return expression also modifies the return value; i.e. we also need semantics for this testcase:
```import std.stdio;struct Big { ulong a; ulong[4] b;}struct Small { ulong a; ulong b;}auto ref addOne(T)(ref T t){ t.a += 1; return t;}auto quirk(T)() { T result; scope(exit) { result.a = 10; } return addOne(result);}void main() { auto small = quirk!Small(); writeln(small); auto big = quirk!Big(); writeln(big);}```
The text was updated successfully, but these errors were encountered:
johanengelen reported this on 2018-04-23T20:22:39Z
Transferred from https://issues.dlang.org/show_bug.cgi?id=18793
CC List
Description
The text was updated successfully, but these errors were encountered: