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
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 ibuclaw@gdcproject.org
Reporter ibuclaw@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.