<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=http://email.email.llvm.org/c/eJzNVkuTozYQ_jX40oULhDHm4IPHziZ7mtQ8ao8ugSRbWZAoJGbs_Pp0A2Y8r93K5hKXjFE_P7Va-lxYcV7fSc-1kQL8uZEO_JF74K2ExmrjZYsSC7xXDrqSGygkyFp7j17cXbSd0ehpRO9trIdWKtlKU6KVNugsYfsIwpqAZR6MJGdw32UlvTWk2n39LWBbKDpM0rXo6asz2sNBerBGzoNoF0Sb4XnfVJhNtbYGoV3ZOacxCI5dHKcJS0HZFv68S-Nolb1y9LyleKfVcr9chJ35buyzCSttulN4MB10TpsDlBXHZ9HpCpfkIV2kq2W6YiKRMQRsFWf-CDtZAotYHLD8OkGwjMYxTNkCS-bBS-fnZdMMUufbrvRwC0F2A-Pkvp9g0eEUJDc42cF5fMGfwY-0CgE8WS0QyKbB5OQ2aAFL7rvWYETudbkvufNBsr0Nkg2Oe7QPEizxirxCfD1NcSnH9RoINJUgYDc4JvAQlhAexDNvVZhCqIQsukPYN07oZOlpD0ILIULaQlU91WFvK7oaXXvNGD_ZOqMbQnOZP1ALPVIL0c4NkEdtdIrGD0phMqRJJc0BtyJIdnCxYktqIgxSY9VJsfu2ufuSMJI-YT8Txsk-JSk17r5v4cF8__jQT0nHi6LdW6Wc9FdZeo0Q7d7pv-VFviKp4fUgwCa_xS_JKBZaHgzHzbmY50qlSZLGcbFY4Qlhk-GbZCyhhjPy5McD5l9Wyl9a72cFvf_1giby_1LQ-x8VNCuSpYqjXK7STLAh5IcFLT8t6IL9qKBbWze6mkr1rpqJogICrfdh8_t-vD-HhY_H8_UHDTdjYaIcMU0w6Gizl1PL3twwk93iVcLhGsGC_DSlkHi4W07HdciMnnJK8rHPVO4L1vcN_DFIMYD8VzB_DeinUN-3xme7_Obu7p9IS4Ciq21eRqDdpxQ3h601rquJO93RdpUgvuQFtg5SKXGKQF8Tdk62oZDqinwRrZwf5siLY_eQx7VdOByjHJwFreB54OFXDEynnYD0kpD4Ga2QRXt8CFueeN1UpOrlV2w8MjTRMNIOhiov4O1A9iORzsQ6EXmS8xnv_NG269vtH2deu1nXVuuj942j1mVfcBy0P3bFvLQ1TogQxp-wae1fSBg41c510uFLyrIsnR3Xizwqi5Qrpjj2ViKSOC-KNE0X-WK1LMpkVvFCVm4dpMhNrKcgbZSlc5LuZv8dgV4Tq8cszuI0SuJ4nudxpkSkokwtM2ykYBHJmutqTnHmtj3M2nUfEpE4VFbaefei5I4aUsoeMCL02lf9pL9HUQJfjVRKlxob6QzPCJh4fPhTNvVB3x_072raaTfrga971P8AuJvkmA>52775</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [DWARF] Inefficiency with retained pointer types and type units
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            debuginfo
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          OCHyams
      </td>
    </tr>
</table>

<pre>
    Retained types that are pointers to a type that can be emitted as a type unit and are not referenced in the CU don't need a skeleton CU DIE, but currently do get one.

Split from discussion on D115325 for PR51087.

target x86_64-unknown-linux-gnu using clang built at 54586582d3e1 (17th Dec 2021)

```
$ cat test.cpp
struct O { struct S { int x; } y; };
int f(void *p) {
  return static_cast<O::S*>(p)->x;
}

$ clang++ test.cpp -c -gdwarf-5 -fdebug-types-section -o - | llvm-dwarfdump - -o -
<snip>
<Type Unit for O:>
0x00000000: Type Unit: length = 0x00000026, format = DWARF32, version = 0x0005, unit_type = DW_UT_type, abbr_offset = 0x0000, addr_size = 0x08, name = 'O', type_signature = 0x9ff533511b48ced2, type_offset = 0x0023 (next unit at 0x0000002a)
<snip>
<Type Unit for S:>
0x00000000: Type Unit: length = 0x0000003e, format = DWARF32, version = 0x0005, unit_type = DW_UT_type, abbr_offset = 0x0000, addr_size = 0x08, name = 'S', type_signature = 0x7b36f109e857d200, type_offset = 0x002c (next unit at 0x00000042)
<snip>
<Compile Unit:>
0x0000003f:   DW_TAG_pointer_type
                DW_AT_type      (0x0000004d "O::S")

0x00000044:   DW_TAG_structure_type
                DW_AT_declaration       (true)
                DW_AT_signature (0x9ff533511b48ced2)

0x0000004d:     DW_TAG_structure_type
                  DW_AT_declaration     (true)
                  DW_AT_signature       (0x7b36f109e857d200)
<snip>
```

DIE `0x0000003f` is not referenced in the CU. Consumers should be able to build non-user-defined types (e.g. a pointer to user-defined-type) so if we emit a type unit for the type - as we do in this example - we don't need the CU DIE; it could be omitted.

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzNVkuTmzgQ_jX40oULBBg4-OCxN7s5zdY8ao8ugYStBCQKiRl7f_12A2Y8r6Q2p7hkjPqlT61ufS6MOK_vpONKSwHu3EoL7sgd8E5Ca5R2skOJAT4oR13JNRQSZKOcQy9uL9peK_TUYvDWxkEnK9lJXaKV0ugsYfsIwmiPpQ60JGew32UtndGk2n39w2NbKHpcpO_Q09VntIeDdGC0XHrBzgs24_O-rXG1qjMNCGXL3lqFQXDswjCJWAKV6eDvuyQMsvSVo-MdxTtlq_0q9nv9XZtn7ddK9yf_oHvordIHKGuOz6JXNW7JQRIn2SrJmIhkCB7LwtQdYSdLYAELPZZfL-CtgmmMUxZjyhw4ad2ybNtRal3Xlw5uwUtvYJrcDxNMOpy86AYnOzhPL_gz-pG2QgBPRgkEsmlxcXIbtYApd32nMSJ3qtyX3Dov2t560QbHPdp7EaY4Iy8fX09zXFrjeg8EmlLgsRscM3jwS_AP4pl3lZ-AXwlZ9Ad_KBzfytLRGfgGfIS0hbp-avzBVvQNug6aKX60tVq1hOYyf6ASeqQSopMbIU_a4BRMH5TCbEiTWuoDHoUX7eBixVZURBikwayTYvfP5u5LxEj6hPVMGGf7hKRUuPuhhEfz_ePDMCUdL4pub6rKSne1yqARottb9a-8yDOSat6MAizyW_ySjGKh5UFzPJyLeV5VSRQlYVjEGXYImw3fLMYiKjgtT25qMPeyU_5Sej9L6P2vJzSSv0tC73-U0LSIVlUY5DJLUsHGkB8mtPw0oTH7UUK3pmlVPafqXTajihIItN-HzZ_76f4cNz615-sPGm6mxAQ5YpphUGuzl65lb26Y2S5-teB4jWBCfrqkkNjcHad2HVdGTzkv8rHPnO4L1vcF_DFIMYL8XzB_DeinUN-Xxmen_ObuHp5IS4Ciq2NeBaDspxS3hK3Rtm-IO-3R9LUgvuQFlg5SKXGKQF_t91Z2vpDVFfkiWrk8LJEXp-ohj2s7f2yjHKwBVcHzyMOvGJi6nYAMEp_4Ga2QRQd8CFueeNPWpBrkV2w8MTTRMNIOhiov4M1I9hORLsQ6EnmU84VTrpZrL7kZrgQv2cFXLatKlQpzcoZnhVdJd_l_MW9p2Cr9UZhB20Xf1eujc62lqmdfcBzQuS-WpWlwQlwy_fhtZ74h1-BUWdtLiy8JS9NkcVyXRcyykpd5GmeFyLOyEKuwknEZMlnmsVjUvJC1JcTYVgN7KV0ZarFkt1BrovOQhWmYBFEYLvM8TCsRVEFarVKsIC8OZMNVvSQcS9MdFt16gIRxLCprZZ19UXJLlSiHBFF83ruj6da327_OvLGLAf16gP4f0OzP7g">