[Issue 20347] New: Initialization of globals not checked for @safe, round 2

d-bugmail at puremagic.com d-bugmail at puremagic.com
Sat Nov 2 09:39:39 UTC 2019


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

          Issue ID: 20347
           Summary: Initialization of globals not checked for @safe, round
                    2
           Product: D
           Version: D2
          Hardware: All
                OS: All
            Status: NEW
          Keywords: safe
          Severity: normal
          Priority: P1
         Component: dmd
          Assignee: nobody at puremagic.com
          Reporter: ag0aep6g at gmail.com

This was found by dkorpel while working on a DIP:
https://github.com/dlang/DIPs/blob/7b109744db7fd0cfea9904354613a50e7dbdad08/DIPs/DIP1NNN-DK.md#existing-holes-in-safe

The fix for issue 19646 outlaws this code:

----
@safe:
const x = 42;
int* y = cast(int*) &x; /* Error: cast from const(int)* to int* not allowed in
safe code */
void main() { *y = 7; }
----

But the following two slight variations still pass.

1) Applying `@safe` individually:
----
@safe const x = 42;
@safe int* y = cast(int*) &x; /* Should be rejected. */
@safe void main() { *y = 7; }
----

2) Calling an @system function in the initializer:
----
@system int* f() { return cast(int*) &x; }
@safe:
const x = 42;
int* y = f(); /* Should be rejected. */
void main() { *y = 7; }
----

--


More information about the Digitalmars-d-bugs mailing list