http://bugzilla.gdcproject.org/show_bug.cgi?id=72
Bug #: 72 Summary: Wrong code generated (segmentation fault) when class (in one file) inherits from class (in another file) with interface Classification: Unclassified Product: GDC Version: 4.7.x Platform: All OS/Version: All Status: NEW Severity: normal Priority: Normal Component: gdc AssignedTo: ibuc...@gdcproject.org ReportedBy: po...@pobox.sk Reduced example: ---------------- File screen3d.d: ---------------- module screen3d; public interface ScreenI { public void initSDL(); public void clear(); } public class Screen3D: ScreenI { public: static int width = 640; static int height = 480; public void initSDL() { resized(width, height); // segfault here } public void resized(int width, int height) { this.width = width; this.height = height; } public void clear() { } } ---------------- File main.d: ---------------- module main; private import screen3d; public class Screen: Screen3D { public override void resized(int width, int height) { super.resized(width, height); } public override void clear() { } } private: Screen screen1; public int main(string[] args) { screen1 = new Screen; ScreenI screen2 = screen1; screen2.initSDL(); return 0; } ---------------- When the example is compiled as two sepparate files, it segfaults. When the example is merged into one file, it works. In disassembly the difference between working and segfaulting version is following: In working version, the method initSDL in the interface of the class Screen is a reference to a thunk function which subtracts 8 (in 32-bit code) from first parameter and then calls the initSDL method in class Screen3D. In segfaulting version, the method initSDL in the interface of the class Screen is a reference to the initSDL method in class Screen3D. I tested it on GDC crosscompiler for ARM linux (running on x64 linux) - gcc version 4.7.3 with gdc commit e63f8a7a5657684c0f2c3d2fd1a9c33eec0208c0 (last commit in gdc-4.7 branch before merging D 2.063). I also tried GCC-4.8-MinGW-GDC-.7z and gcc-4.6.1-tdm-1-gdc-9841510e8ba6-20120109.7z (both from https://bitbucket.org/goshawk/gdc/downloads) - I didn't manage to create an executable, but the assembly/disassembly shows the same wrong code. I tried the latest DMD (2.063.2) and it generates correct code. -- Configure bugmail: http://bugzilla.gdcproject.org/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are watching all bug changes.