digitalmars.D.bugs - [Issue 22225] New: SumType: Some assignments should be able to
- d-bugmail puremagic.com (46/46) Aug 19 2021 https://issues.dlang.org/show_bug.cgi?id=22225
https://issues.dlang.org/show_bug.cgi?id=22225 Issue ID: 22225 Summary: SumType: Some assignments should be able to execute in safe code Product: D Version: D2 Hardware: All OS: All Status: NEW Severity: enhancement Priority: P1 Component: phobos Assignee: nobody puremagic.com Reporter: snarwin+bugzilla gmail.com In general, assigning to a SumType that may contain a pointer or reference must be system, because it could overwrite a pointer or reference that safe code has access to, leading to undefined behavior: --- int n; int example() safe { SumType!(int*, int) x = &n; return x.match!( (int n) => n, (ref int* p) { x = 123456789; // overwrites p (currently system) return *p; // kaboom } ); } --- However, in the special case where only one member of the SumType contains pointers or references, such an assignment could be safe, because (a) overwriting a non-pointer with a pointer is safe, and (b) overwriting a pointer with another pointer of the same type is safe. Example: --- void main() safe { alias SM = SumType!(string, int); auto sm = SM(123); sm = SM("this should be safe"); } --- See also: https://github.com/pbackus/sumtype/issues/67 --
Aug 19 2021