Thread overview
[Issue 22215] returning expired stack pointers in @system code allowed by spec, not by implementation
Aug 16
Dennis
Aug 25
Dennis
August 16
https://issues.dlang.org/show_bug.cgi?id=22215

Dennis <dkorpel@live.nl> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |dkorpel@live.nl
           Hardware|x86                         |All
            Summary|[dip1000] scope analysis    |returning expired stack
                   |does not respect @system or |pointers in @system code
                   |@trusted                    |allowed by spec, not by
                   |                            |implementation
           Severity|major                       |normal

--- Comment #1 from Dennis <dkorpel@live.nl> ---
It doesn't compile without -dip1000 either, the error predates it.

> this workaround should not be required.

Intentionally returning an expired stack pointer should be a very rare occurrence, I think a workaround is warranted. However, the spec says:

> @system functions may perform any operation legal from the perspective of the language including inherently memory unsafe operations like returning pointers to expired stackframes

https://dlang.org/spec/memory-safe-d.html

So at least one has to change: the implementation, or the spec.

--
August 25
https://issues.dlang.org/show_bug.cgi?id=22215

--- Comment #2 from Ate Eskola <Ajieskola@gmail.com> ---
There appears to be two bugs, one in vanilla DMD and one with -dip1000.

As Dennis said, my initial example fails to compile regardless of the compiler switches used. But there is a watered-down version of my workaround:

```d
int* f()
{ int x = 42;
  auto wannaBePointer = &x;
  return wannaBePointer;
}
```

This one compiles with vanilla DMD, but the -dip1000 bug prevents compiling it with the said flag.

The full workaround in the initial example still compiles with the flag too.

--
August 25
https://issues.dlang.org/show_bug.cgi?id=22215

--- Comment #3 from Dennis <dkorpel@live.nl> ---
(In reply to Ate Eskola from comment #2)
> There appears to be two bugs, one in vanilla DMD and one with -dip1000.

That's right, the latter one is https://issues.dlang.org/show_bug.cgi?id=19873

--