It turns out that the debug info describing the Sema class is an
appreciable percentage of the total object file size of objects in Sema.
By adding a key function, clang is able to optimize the debug info size
by emitting a forward declaration in TUs that do not define the key
function.
On Windows, with clang-cl, these are the total object file sizes before
and after this change when compiling with optimizations and debug info:
before: 335,012 KB after: 278,116 KB delta: -56,896 KB percent: -17.0%
The effect on link time was negligible, despite having ~56MB less input.
On Linux, with clang, these are the same sizes using DWARF -g and
optimizations:
before: 603,756 KB after: 515,340 KB delta: -88,416 KB percent: -14.6%
I didn't use type units, DWARF-5, fission, or any other special flags.
I worry that this is going to look obscure to most readers passing through. Maybe it could be expanded to more explicitly spell out that it reduces the size of the debug info?