@safe D requires which DIP switches?

Dukc ajieskola at gmail.com
Sat Jan 8 00:13:38 UTC 2022


On Wednesday, 5 January 2022 at 10:47:50 UTC, Dennis wrote:
> On Wednesday, 5 January 2022 at 10:05:02 UTC, Atila Neves wrote:
>> I talked to Walter about this and I don't think it's the 
>> correct fix. I've been looking at how to do it otherwise.
>
> Why not? Given a signature like:
> ```D
> int fun(string s) pure nothrow;
> ```
> You can assume `s` is `scope`, because there's no channel to 
> escape it: return value has no pointers, global variables are 
> not accessible in a pure function, there are no other 
> parameters to assign it to.

There is one problem with this. The string could still be 
assigned to a non-`Exception` `Throwable` and thrown. If the 
function implementation is also `@safe`, the compiler is going to 
wrongly prevent throwing the exception due to the automatically 
added `scope`.

When you think of it, it means that `assert`s using `s` as the 
message would be forbidden. Or worse, they would be allowed but 
the assert failure printer would then try to access expired 
memory after such an assert has gone boom.


More information about the Digitalmars-d mailing list