diff --git a/llvm/lib/SYCLLowerIR/ESIMD/LowerESIMD.cpp b/llvm/lib/SYCLLowerIR/ESIMD/LowerESIMD.cpp index 7ab30118bb398..9ea5f54989cb0 100644 --- a/llvm/lib/SYCLLowerIR/ESIMD/LowerESIMD.cpp +++ b/llvm/lib/SYCLLowerIR/ESIMD/LowerESIMD.cpp @@ -41,6 +41,7 @@ #include "llvm/Transforms/IPO/AlwaysInliner.h" #include +#include #include #include @@ -1981,12 +1982,16 @@ bool SYCLLowerESIMDPass::prepareForAlwaysInliner(Module &M) { if (NameNode->getKind() == id::Node::KLocalName) return false; + // OutputBuffer does not own its buffer - it must be freed by the caller. id::OutputBuffer NameBuf; NameNode->print(NameBuf); StringRef Name(NameBuf.getBuffer(), NameBuf.getCurrentPosition()); - return Name.starts_with("sycl::_V1::ext::intel::esimd::") || - Name.starts_with("sycl::_V1::ext::intel::experimental::esimd::"); + bool IsESIMDFunction = + Name.starts_with("sycl::_V1::ext::intel::esimd::") || + Name.starts_with("sycl::_V1::ext::intel::experimental::esimd::"); + std::free(NameBuf.getBuffer()); + return IsESIMDFunction; }; bool NeedInline = false; for (auto &F : M) {