June 01 [Issue 24577] New: Struct with constructor returned from C++ wrong | ||||
---|---|---|---|---|
| ||||
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@puremagic.com Reporter: tim.dlang@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. -- |
Copyright © 1999-2021 by the D Language Foundation