[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