https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104547
--- Comment #1 from Jonathan Wakely <redi at gcc dot gnu.org> ---
If we have two versions of the function in the same TU:
#include <vector>
void shrink(std::vector<int>& v, unsigned n) {
v.resize(v.size() - n);
}
void shrink_min(std::vector<int>& v, unsigned n) {
v.resize(std::min<std::size_t>(v.size(), n));
}
Then the .s file contains an instantiation of vector::_M_default_append even
though neither of the functions calls it. Why isn't that eliminated as dead
code? We shouldn't need to keep an implicit instantiation of a non-inline
function template if it's not called.