[llvm] 3570b0c - [Attributor][FIX] Remove memory leak
Johannes Doerfert via llvm-commits
llvm-commits at lists.llvm.org
Fri Mar 11 07:52:56 PST 2022
Author: Johannes Doerfert
Date: 2022-03-11T09:52:44-06:00
New Revision: 3570b0c5c748d677606b9474ef661217e0e547c1
URL: https://github.com/llvm/llvm-project/commit/3570b0c5c748d677606b9474ef661217e0e547c1
DIFF: https://github.com/llvm/llvm-project/commit/3570b0c5c748d677606b9474ef661217e0e547c1.diff
LOG: [Attributor][FIX] Remove memory leak
The leak was introduced when we made things deterministic. It was
reported by the sanitizer buildbot:
https://lab.llvm.org/buildbot/#/builders/168
Added:
Modified:
llvm/lib/Transforms/IPO/AttributorAttributes.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Transforms/IPO/AttributorAttributes.cpp b/llvm/lib/Transforms/IPO/AttributorAttributes.cpp
index 37103a93969cc..f712dc912edd0 100644
--- a/llvm/lib/Transforms/IPO/AttributorAttributes.cpp
+++ b/llvm/lib/Transforms/IPO/AttributorAttributes.cpp
@@ -38,8 +38,8 @@
#include "llvm/IR/Instruction.h"
#include "llvm/IR/Instructions.h"
#include "llvm/IR/IntrinsicInst.h"
-#include "llvm/IR/Value.h"
#include "llvm/IR/NoFolder.h"
+#include "llvm/IR/Value.h"
#include "llvm/Support/Alignment.h"
#include "llvm/Support/Casting.h"
#include "llvm/Support/CommandLine.h"
@@ -867,6 +867,12 @@ struct AccessAsInstructionInfo : DenseMapInfo<Instruction *> {
/// A type to track pointer/struct usage and accesses for AAPointerInfo.
struct AA::PointerInfo::State : public AbstractState {
+ ~State() {
+ // We do not delete the Accesses objects but need to destroy them still.
+ for (auto &It : AccessBins)
+ It.second->~Accesses();
+ }
+
/// Return the best possible representable state.
static State getBestState(const State &SIS) { return State(); }
@@ -6423,8 +6429,10 @@ ChangeStatus AAHeapToStackFunction::updateImpl(Attributor &A) {
Changed = ChangeStatus::CHANGED;
continue;
} else {
- if (APAlign->ugt(llvm::Value::MaximumAlignment) || !APAlign->isPowerOf2()) {
- LLVM_DEBUG(dbgs() << "[H2S] Invalid allocation alignment: " << APAlign << "\n");
+ if (APAlign->ugt(llvm::Value::MaximumAlignment) ||
+ !APAlign->isPowerOf2()) {
+ LLVM_DEBUG(dbgs() << "[H2S] Invalid allocation alignment: " << APAlign
+ << "\n");
AI.Status = AllocationInfo::INVALID;
Changed = ChangeStatus::CHANGED;
continue;
More information about the llvm-commits
mailing list