Uploaded image for project: 'HPCC'
  1. HPCC
  2. HPCC-19722

Remove default implementation of interface methods


    • Type: Improvement
    • Status: Unresourced
    • Priority: Minor
    • Resolution: Unresolved
    • Affects Version/s: None
    • Fix Version/s: None
    • Component/s: eclrtl
    • Labels:


      gcc implements speculative devirtualisation of virtual functions (https://stackoverflow.com/questions/37888728/inlining-of-virtual-functions-clang-vs-gcc).  The aim is to avoid an indirect virtual call if it can spot that it is the base implementation.


      There are a couple of problems with this though:

      • If the object is defined in a different dll/so from the call then it will almost certainly fail.  (Since the inline function will be regenerated rather than exported from the dll).
      • It adds ~ 16bytes and a few cycles to each function call that doesn't match the default.
      • It is very confusing looking at the generated assembler!


      My conclusion is that if you have an interface that is called between dll/so you should not include a default inline implementation (unless there is a really good reason.)  The helper classes in eclhelper are good examples which should be fixed.  Should also look at some of the other key interfaces (e.g., IFileDescriptor + others)



          Issue Links



              • Assignee:
                ghalliday Gavin Halliday
              • Votes:
                0 Vote for this issue
                1 Start watching this issue


                • Created: