From 8d2eebd644e384d7d6ed8fffc817d1334ff36bb4 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Mon, 11 Jan 2021 08:47:45 -0800 Subject: [PATCH] Fixes a memory leak in IRValidation --- .../Source/Interface/IR/Passes/IRValidation.cpp | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/External/FEXCore/Source/Interface/IR/Passes/IRValidation.cpp b/External/FEXCore/Source/Interface/IR/Passes/IRValidation.cpp index 64c4cf8c6..13fb0b608 100644 --- a/External/FEXCore/Source/Interface/IR/Passes/IRValidation.cpp +++ b/External/FEXCore/Source/Interface/IR/Passes/IRValidation.cpp @@ -19,9 +19,18 @@ namespace FEXCore::IR::Validation { class IRValidation final : public FEXCore::IR::Pass { public: + ~IRValidation(); bool Run(IREmitter *IREmit) override; + +private: + BitSet NodeIsLive; + size_t MaxNodes{}; }; +IRValidation::~IRValidation() { + NodeIsLive.Free(); +} + bool IRValidation::Run(IREmitter *IREmit) { bool HadError = false; bool HadWarning = false; @@ -32,8 +41,9 @@ bool IRValidation::Run(IREmitter *IREmit) { std::ostringstream Errors; std::ostringstream Warnings; - BitSet NodeIsLive; - NodeIsLive.Allocate(CurrentIR.GetSSACount()); + if (CurrentIR.GetSSACount() > MaxNodes) { + NodeIsLive.Realloc(CurrentIR.GetSSACount()); + } std::vector Uses(CurrentIR.GetSSACount(), 0);