[Issue 24754] cannot take address of a member array in a ref foreach

d-bugmail at puremagic.com d-bugmail at puremagic.com
Fri Sep 13 10:21:16 UTC 2024


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

--- Comment #11 from Dennis <dkorpel at live.nl> ---
> the same way this should compile

> I'm glad if this is considered a design-flaw that should be fixed.

Without `-preview=dip1000` taking the address of local, stack allocated
variables is not @safe. This is not going to be fixed, we're not going to add
special cases to allow a halfway, in between form of safe stack pointers. It's
all or nothing.

The question here is whether a `ref` variable counts as a local variable. `ref`
parameters freely bind to any lvalue in @safe code, including local variables,
so the answer there is yes.

A ref loop variable in foreach is a bit more difficult, as it depends on the
type of the thing you're iterating over.

In theory, in the absence of -preview=dip1000, it can't be a stack pointer when
you're iterating over a dynamic array, so this issue's test case can be made
`@safe` on the basis of that.

On the other hand, there's still the gaping hole that local static arrays can
be sliced in `@safe` code without `-preview=dip1000`, and get an unrestricted
lifetime. So fixing this issue facilitates more exploitation of that hole
(issue 24750).

So perhaps we need to make that a deprecation first and then consider adding a
special for this, but whether that's worth it depends on the future direction
of dip1000 vs Robert's Simple Safe D.

--


More information about the Digitalmars-d-bugs mailing list