The unique_ptr prettyprinter calls GetValueOfLibCXXCompressedPair,
which looks for a __value_ child. However, when the second value in
the compressed pair is not an empty class, there are two __value_
children because __compressed_pair derives twice from
__compressed_pair_elem, one for each member of the pair. And then the
lookup fails because it's ambiguous.
This patch makes the following changes:
- Rename GetValueOfLibCXXCompressedPair to GetFirstValueOfLibCXXCompressedPair, and add a similar function to get the second value. Put both functions in Plugin/Language/CPlusPlus/LibCxx.cpp because it seems inappropriate to have libcxx-specific helpers separate from all the libcxx-dependent code.
- Read the second value of the __ptr_ pair and display a "deleter" child in the unique_ptr synthetic child provider, when available.
- Add a test case for the non-empty deleter case.
We should check that pair.GetChildAtIndex(0, true) returns a valid value before dereferencing it, so we don't crash if the definition of the comppressed_pair type is missing or something like