DIP 1006 - Preliminary Review Round 1

ag0aep6g anonymous at example.com
Wed Mar 7 14:59:28 UTC 2018


On 03/07/2018 03:01 PM, Paolo Invernizzi wrote:
> Are we asking to statically check things like:
> 
> Assign Expressions [1]
> Undefined Behavior:
>    if the lvalue and rvalue have partially overlapping storage
>    if the lvalue and rvalue's storage overlaps exactly but the types are 
> different
A simple way to get overlapping storage is with a union. Unfortunately, 
DMD accepts this:

----
struct S
{
     union
     {
         int i;
         byte b;
         float f;
         struct
         {
             byte b2;
             align(1) int i2;
         }
     }
}

void main() @safe
{
     S s;
     s.i = s.b; /* Partially overlapping, different types. */
     s.f = s.i; /* Exactly overlapping, different types. */
     s.i = s.i2; /* Partially overlapping, same type. */
}
----

I've filed an issue:
https://issues.dlang.org/show_bug.cgi?id=18568

If you have more examples of UB in @safe functions, don't hesitate to 
file them as bugs.


More information about the Digitalmars-d mailing list