I fought and lost a massive argument spanning years about this. There are very limited cases where the backend is able to do this successfully.
On 26 October 2014 20:37, via D.gnu <d.gnu@puremagic.com> wrote: > Bug ID 162 <http://bugzilla.gdcproject.org/show_bug.cgi?id=162> Summary GDC > unable to de-virtualise method calls Product GDC Version development > Hardware All OS All Status NEW Severity enhancement Priority Normal > Component gdc Assignee ibuc...@gdcproject.org Reporter > ibuc...@gdcproject.org > > Currently we emit method calls as the following: > > *(c->__vptr + 40) (c, 1, 2, 3); > > Which translate directly into the following trees: > > indirect_ref(pointer_plus(component_ref(c, __vptr), 40)) > > > GCC provides a more simplistic tree code called obj_type_ref, which represents > a virtual method lookup, and given the binfo structure we already pass to the > backed, this would give a chance for the optimiser passes to statically > determine the dynamic type of the object and devirtualise the call. > > obj_type_ref(component_ref(c, __vptr), c, 40) > > ------------------------------ > You are receiving this mail because: > > - You are watching all bug changes. > >