[libc++] Fix dangling reference in the associative container benchmarks (#213139)

Two insert benchmarks were registered with lambdas capturing insert_iter_iter_bench
by reference, unlike every other registration in this file, which captures by value.

RegisterBenchmark() stores the lambda by value and only invokes it from
RunSpecifiedBenchmarks(), which happens long after associative_container_benchmarks()
has returned, creating a dangling reference.
This commit is contained in:
Louis Dionne 2026-07-31 13:21:21 -04:00 committed by GitHub
parent 69685bb9ce
commit dac66ca477
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -498,9 +498,9 @@ void associative_container_benchmarks(std::string container) {
st.ResumeTiming();
}
};
bench("insert(iterator, iterator) (all new keys, end)", [&](auto& state) { insert_iter_iter_bench(true, state); });
bench("insert(iterator, iterator) (all new keys, end)", [=](auto& state) { insert_iter_iter_bench(true, state); });
bench("insert(iterator, iterator) (all new keys, middle)",
[&](auto& state) { insert_iter_iter_bench(false, state); });
[=](auto& state) { insert_iter_iter_bench(false, state); });
bench("insert(iterator, iterator) (half new keys)", [=](auto& st) {
const std::size_t size = st.range(0);