www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 20376] New: disable this(ref return scope Foo rhs) enables

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

          Issue ID: 20376
           Summary:  disable this(ref return scope Foo rhs) enables broken
                    binaries (out-of-bounds access)
           Product: D
           Version: D2
          Hardware: x86_64
                OS: Linux
            Status: NEW
          Severity: regression
          Priority: P1
         Component: dmd
          Assignee: nobody puremagic.com
          Reporter: asumface gmail.com

Consider this example:

struct Foo
{
     disable this(ref return scope Foo rhs);
}

uint[2000] fun()  safe
{
    return Foo();
}

void main()  safe
{
    import std;
    writeln(fun);
}

This will compile and print garbage data, (although a segfault is probably
possible as well), despite there being an obvious type mismatch.


If the function signature is changed to a non-array type, e. g.

float fun()  safe

LDC will raise:
Invalid bitcast
  %4 = bitcast %onlineapp.Foo* %1 to float, !dbg !1241
in function _D9onlineapp3funFNfZf
LLVM ERROR: Broken function found, compilation aborted!

DMD will not complain and complete the compilation as before.

run.dlang.org suggests that this happens since release 2.086.

--
Nov 09 2019