With this patch, we now emit a DW_AT_LLVM_preferred_name for
the [[clang::preferred_name]] attribute attached to a class template.
This is useful for consumers in case they want to display the
name in terms of the preferred name, e.g., LLDB's type-summaries.
For now this is behind an LLDB tuning.
E.g., for following code:
template<typename T> struct Foo;
typedef Foo<int> BarInt;
typedef Foo<double> BarDouble;
template<typename T>
struct [[clang::preferred_name(BarInt),
         clang::preferred_name(BarDouble)]] Foo {};...the generated DWARF with this patch looks as follows:
0x0000006b:   DW_TAG_structure_type
                DW_AT_LLVM_preferred_name       (0x00000082)
                DW_AT_name      ("Foo<int>")
0x00000082:   DW_TAG_typedef
               DW_AT_type      (0x0000006b "Foo<int>")
               DW_AT_name      ("BarInt")
0x0000008d:   DW_TAG_structure_type
                DW_AT_LLVM_preferred_name       (0x000000ab)
                DW_AT_name      ("Foo<double>")
0x000000ab:   DW_TAG_typedef
                DW_AT_type      (0x0000008d "Foo<double>")
                DW_AT_name      ("BarDouble")