From 9ddb1a49ac08d8cd66771de56d5c3227d586b579 Mon Sep 17 00:00:00 2001 From: Johannes Doerfert Date: Fri, 11 Mar 2022 10:08:34 -0600 Subject: [PATCH] [Attributor][FIX] Avoid double free (and useless state copy) In an attempt to remove the memory leak we introduced a double free. The problem was that we allowed a plain copy of the state and it was actually used. The use was useless, so it is gone now. The copy constructor is gone as well. The move constructor ensures the Accesses pointers are owned by a single state, I hope. Reported by: https://lab.llvm.org/buildbot/#/builders/16/builds/25820 --- llvm/lib/Transforms/IPO/AttributorAttributes.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/llvm/lib/Transforms/IPO/AttributorAttributes.cpp b/llvm/lib/Transforms/IPO/AttributorAttributes.cpp index f712dc9..dae0642 100644 --- a/llvm/lib/Transforms/IPO/AttributorAttributes.cpp +++ b/llvm/lib/Transforms/IPO/AttributorAttributes.cpp @@ -884,8 +884,9 @@ struct AA::PointerInfo::State : public AbstractState { } State() = default; - State(const State &SIS) : AccessBins(SIS.AccessBins) {} - State(State &&SIS) : AccessBins(std::move(SIS.AccessBins)) {} + State(State &&SIS) : AccessBins(std::move(SIS.AccessBins)) { + SIS.AccessBins.clear(); + } const State &getAssumed() const { return *this; } @@ -1336,7 +1337,6 @@ struct AAPointerInfoFloating : public AAPointerInfoImpl { /// See AbstractAttribute::updateImpl(...). ChangeStatus updateImpl(Attributor &A) override { using namespace AA::PointerInfo; - State S = getState(); ChangeStatus Changed = ChangeStatus::UNCHANGED; Value &AssociatedValue = getAssociatedValue(); -- 2.7.4