[Issue 24577] New: Struct with constructor returned from C++ wrong
    d-bugmail at puremagic.com 
    d-bugmail at puremagic.com
       
    Sat Jun  1 13:59:21 UTC 2024
    
    
  
https://issues.dlang.org/show_bug.cgi?id=24577
          Issue ID: 24577
           Summary: Struct with constructor returned from C++ wrong
           Product: D
           Version: D2
          Hardware: x86_64
                OS: Windows
            Status: NEW
          Severity: normal
          Priority: P1
         Component: dmd
          Assignee: nobody at puremagic.com
          Reporter: tim.dlang at t-online.de
//////////////// testcpp.cpp //////////////
struct S
{
    int i;
    S();
    S(int i);
};
S::S() : i(0)
{
}
S::S(int i) : i(i)
{
}
S f()
{
    S r;
    r.i = 5;
    return r;
}
//////////////// test.d ////////////////////
import std.stdio;
extern(C++) struct S
{
    int i;
    this(int i);
}
extern(C++) S f();
void main()
{
    S s = f();
    writeln("test ", s);
    stdout.flush();
    assert(s.i == 5);
}
////////////////////////////////////////////
The above example can be compiled on Windows with:
cl /c testcpp.cpp
dmd -g -w -m64 test.d testcpp.obj
When running it will print a wrong random number:
test S(-246417088)
It only fails for DMD on Windows with -m64. It works correctly with -m32mscoff
or on Linux or OSX.
--
    
    
More information about the Digitalmars-d-bugs
mailing list