[Issue 24211] Const nested function can mutate context
    d-bugmail at puremagic.com 
    d-bugmail at puremagic.com
       
    Thu Nov  2 00:53:31 UTC 2023
    
    
  
https://issues.dlang.org/show_bug.cgi?id=24211
Paul Backus <snarwin+bugzilla at gmail.com> changed:
           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |safe
--- Comment #3 from Paul Backus <snarwin+bugzilla at gmail.com> ---
This bug creates a hole in @safe when combined with "Inferred scope parameters
in pure functions" [1].
---
void main() @safe
{
    const(int)* escaped;
    @safe pure nothrow
    void fun(const(int)* p) const
    {
        escaped = p;
    }
    int n;
    fun(&n);
}
---
Because fun's context is const, the compiler can assume that "None of the other
parameters [aside from p] have mutable indirections," and allow the use of a
scope pointer as an argument. If not for this bug, that assumption would be
correct.
[1] https://dlang.org/spec/function.html#pure-scope-inference
--
    
    
More information about the Digitalmars-d-bugs
mailing list