[Issue 20376] New: @disable this(ref return scope Foo rhs) enables broken binaries (out-of-bounds access)
    d-bugmail at puremagic.com 
    d-bugmail at puremagic.com
       
    Sun Nov 10 03:16:03 UTC 2019
    
    
  
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 at puremagic.com
          Reporter: asumface at 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.
--
    
    
More information about the Digitalmars-d-bugs
mailing list