HomePhabricator

Reapply "ADT: Fix reference invalidation in SmallVector::push_back and single…

Authored by dexonsmith on Jan 13 2021, 7:08 PM.

Description

Reapply "ADT: Fix reference invalidation in SmallVector::push_back and single-element insert"

This reverts commit 56d1ffb927d03958a7a31442596df749264a7792, reapplying
9abac60309006db00eca0af406c2e16bef26807c, removing insert_one_maybe_copy
and using a helper called forward_value_param instead. This avoids use
of std::is_same (or any SFINAE), so I'm hoping it's more portable and
MSVC will be happier.

Original commit message follows:

For small enough, trivially copyable T, take the argument by value in
SmallVector::push_back and copy it when forwarding to
SmallVector::insert_one_impl. Otherwise, when growing, update the
argument appropriately.

Differential Revision: https://reviews.llvm.org/D93779