Thread overview
[Issue 21443] scope (failure) with a return breaks safety
Jun 20, 2022
Susan
Jul 05, 2022
Dlang Bot
Jul 07, 2022
Dlang Bot
Jul 09, 2022
Dlang Bot
June 08, 2022
https://issues.dlang.org/show_bug.cgi?id=21443

Steven Schveighoffer <schveiguy@gmail.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |safe, spec
                 CC|                            |schveiguy@gmail.com
           Severity|major                       |critical

--- Comment #1 from Steven Schveighoffer <schveiguy@gmail.com> ---
I concur. Recently came up on the forums in response to a blog post I made: https://forum.dlang.org/post/tylpiqohdfqsiiqupfta@forum.dlang.org

Since an Error does not necessarily properly unwind the stack, just returning a normal error code doesn't reflect the gravity of the situation -- you should not be allowed to swallow Errors and continue.

My suggestion would be to rewrite the scope(failure) code as:

```d
try {
  ...
} catch(Error err) {
  // return 10; // not allowed
  abort("Cannot return from thrown Error");
} catch(Throwable) {
  return 10;
}
```

Which would allow code to still compile, but not allow Undefined Behavior.

I would suggest this still happen even inside @system code. If you want to circumvent, write out the try/catch yourself.

I'd also be OK with Andrej's suggestion (no return inside scope(failure), or
anything like it, such as a goto outside the block).

I should note, the spec specifically allows this, as it forbids returns inside
scope(exit) and scope(success), but purposefully leaves out scope(failure).

--
June 20, 2022
https://issues.dlang.org/show_bug.cgi?id=21443

Susan <su+dlangissues@angel-island.zone> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |su+dlangissues@angel-island
                   |                            |.zone

--
July 05, 2022
https://issues.dlang.org/show_bug.cgi?id=21443

Dlang Bot <dlang-bot@dlang.rocks> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |pull

--- Comment #2 from Dlang Bot <dlang-bot@dlang.rocks> ---
@RazvanN7 created dlang/dmd pull request #14269 "Fix Issue 21443 - scope (failure) with a return breaks safety" fixing this issue:

- Fix Issue 21443 - scope (failure) with a return breaks safety

https://github.com/dlang/dmd/pull/14269

--
July 07, 2022
https://issues.dlang.org/show_bug.cgi?id=21443

Dlang Bot <dlang-bot@dlang.rocks> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
         Resolution|---                         |FIXED

--- Comment #3 from Dlang Bot <dlang-bot@dlang.rocks> ---
dlang/dmd pull request #14269 "Fix Issue 21443 - scope (failure) with a return breaks safety" was merged into stable:

- 8ea4610d83d9c4b7aebc2ea52514885c02ef193d by RazvanN7:
  Fix Issue 21443 - scope (failure) with a return breaks safety

https://github.com/dlang/dmd/pull/14269

--
July 09, 2022
https://issues.dlang.org/show_bug.cgi?id=21443

--- Comment #4 from Dlang Bot <dlang-bot@dlang.rocks> ---
dlang/dmd pull request #14280 "merge stable" was merged into master:

- 2c336dfa825c481f0a32f495ce26232e45d820a4 by RazvanN7:
  Fix Issue 21443 - scope (failure) with a return breaks safety

https://github.com/dlang/dmd/pull/14280

--
March 27
https://issues.dlang.org/show_bug.cgi?id=21443

elpenguino+D@gmail.com changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           See Also|                            |https://issues.dlang.org/sh
                   |                            |ow_bug.cgi?id=24460

--