From 153a265d0182bcfe072496663c320689fd21d392 Mon Sep 17 00:00:00 2001 From: "Duncan P. N. Exon Smith" Date: Tue, 22 Apr 2014 03:31:34 +0000 Subject: [PATCH] blockfreq: Implement clear() explicitly This was implicitly with copy assignment before, which fails to actually clear `std::vector<>`'s heap storage. Move assignment would work, but since MSVC can't imply those anyway, explicitly `clear()`-ing members makes more sense. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@206856 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Analysis/BlockFrequencyInfoImpl.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/lib/Analysis/BlockFrequencyInfoImpl.cpp b/lib/Analysis/BlockFrequencyInfoImpl.cpp index c2337bebe3b..bc3722eb9d4 100644 --- a/lib/Analysis/BlockFrequencyInfoImpl.cpp +++ b/lib/Analysis/BlockFrequencyInfoImpl.cpp @@ -598,7 +598,11 @@ void Distribution::normalize() { } void BlockFrequencyInfoImplBase::clear() { - *this = BlockFrequencyInfoImplBase(); + // Swap with a default-constructed std::vector, since std::vector<>::clear() + // does not actually clear heap storage. + std::vector().swap(Freqs); + std::vector().swap(Working); + std::vector().swap(PackagedLoops); } /// \brief Clear all memory not needed downstream. -- 2.34.1