D.gnu - [Bug 248] New: Regression: Call result not properly saved when
- via D.gnu (58/58) Dec 10 2016 http://bugzilla.gdcproject.org/show_bug.cgi?id=248
http://bugzilla.gdcproject.org/show_bug.cgi?id=248 Bug ID: 248 Summary: Regression: Call result not properly saved when calling a vtbl function Product: GDC Version: development Hardware: All OS: All Status: NEW Severity: normal Priority: Normal Component: gdc Assignee: ibuclaw gdcproject.org Reporter: johannespfau gmail.com Reduced from a DDMD build regression: We've got a function getMemtype which has side effects and returns a class object Bar which has a virtual function isintegral. The function is called in this way: getMemtype().isintegral(). In this call the return value of getMemtype, the reference to a Bar object, is needed twice: Once to get the vtbl entry for isintegral and once to pass the object reference as the this pointer for isintegral. I guess the result of the getMemtype call is not saved properly. We can certainly see that the getMemType function executes twice. Iain I'll assign this to you as you are more familiar with this code. --------------------------------------------------- import std.stdio; class Bar { bool isintegral() { return false; } } class Symbol { Bar getMemtype() { writeln("foo"); return new Bar(); } } class Enum { Symbol sym; bool isintegral() { return sym.getMemtype().isintegral(); } } void main() { Enum e = new Enum(); e.sym = new Symbol(); e.isintegral(); } --------------------------------------------------- -- You are receiving this mail because: You are watching all bug changes.
Dec 10 2016