This patch makes virtual bases to be added in the correct order to the bases list. It is important because VTableContext (MicrosoftVTableContext in our case) uses then the order of virtual bases in the list to restore the virtual table indexes. These indexes are used then to resolve the layout of the virtual bases.
We haven't enough information about offsets of virtual bases regarding to the object (moreover, in a common case we can't rely on such information, see the example here: https://reviews.llvm.org/D53506#1272306 ), but there should be enough information to restore the layout of the virtual bases from the indexes in runtime. After D53506 this information is used whenever possible, so there should be no problems with virtual bases' fields reading.
I have some problems with the test, I'll describe them exactly in the test's text below. Do you have them too or is this a specific problem with my setup?
Clang gives me an error about char16_t, char32_t etc., but if I use MSVC here, then the test compiles ok.