- User Since
- Jul 13 2018, 3:36 PM (65 w, 2 d)
Fri, Sep 20
This patch fixed a few bugs that can be triggered by some corner cases involved with virtual inheritance.
In this new patch, I added a "level" field to type metadata when vtable interleaving is enabled.
Currently type metadata is a (byte offset, type) pair. However, suppose T1 and T2 are compatible with the same offset of a vtable, the interleaving pass cannot always determine which type is the less derived one because T1 and T2 may have the same number of compatible vtables. An observation is that types that are compatible with the same address point like T1 and T2 form a linear inheritance hierarchy. Based on this, I added a third field to the type metadata representing the level of the type in the linear type hierarchy. all-vtables' level value is 1 and any other type's level is greater than 1. The more derived a type is, the higher the level is.
Apr 15 2019
Fixed some bugs in the previous implementation.
Addressed @rsmith's comments.
Fixed bugs in the previous patch.
Sep 13 2018
Fixed issues pointed out by Peter.
Fixed issues pointed out by Peter and Vlad.
Sep 12 2018
Sep 11 2018
Fixed typos pointed out by pcc.
Sep 10 2018
Fixed some bugs
Sep 6 2018
Sep 5 2018
Aug 27 2018
Aug 23 2018
Fix the issues pointed out by Peter and Vlad.
Aug 21 2018
Addressed issues pointed out by pcc
Aug 14 2018
Aug 7 2018
Fix mistakes and provide more information about the interleaving algorithm
Updated version of the patch
Aug 6 2018
Jul 20 2018
Some tests failed because they did not expect the new layouts caused by the change to the padding cap. I modified those tests so that now they accept the new layouts.
Jul 19 2018
Updated the comment according to Peter's suggestion.
Jul 18 2018
Added more information about the experiments in the comment.
Jul 16 2018
- removed .arcconfig