@@ -89,6 +89,19 @@ static const char *LegalSYCLFunctionsInStatelessMode[] = {
8989
9090namespace {
9191
92+ class BuffDeleter {
93+ public:
94+ BuffDeleter (char *Buffer) : Buff(Buffer) {};
95+ ~BuffDeleter () { std::free (Buff); };
96+
97+ BuffDeleter () = delete ;
98+ BuffDeleter (const BuffDeleter &) = delete ;
99+ BuffDeleter (BuffDeleter &&) = delete ;
100+
101+ private:
102+ char *Buff;
103+ };
104+
92105class ESIMDVerifierImpl {
93106 const Module &M;
94107 bool MayNeedForceStatelessMemModeAPI;
@@ -149,6 +162,7 @@ class ESIMDVerifierImpl {
149162 continue ;
150163
151164 id::OutputBuffer NameBuf;
165+ BuffDeleter NameBufDeleter (NameBuf.getBuffer ());
152166 NameNode->print (NameBuf);
153167 StringRef Name (NameBuf.getBuffer (), NameBuf.getCurrentPosition ());
154168
@@ -160,7 +174,6 @@ class ESIMDVerifierImpl {
160174 Name.starts_with (
161175 " sycl::_V1::ext::intel::experimental::esimd::" ) ||
162176 Name.starts_with (" sycl::_V1::ext::oneapi::this_work_item::" )) {
163- std::free (NameBuf.getBuffer ());
164177 continue ;
165178 }
166179
@@ -178,11 +191,9 @@ class ESIMDVerifierImpl {
178191 // reported at compilation time.
179192 (MayNeedForceStatelessMemModeAPI &&
180193 any_of (LegalSYCLFunctionsInStatelessMode, checkLegalFunc))) {
181- std::free (NameBuf.getBuffer ());
182194 continue ;
183195 }
184196
185- std::free (NameBuf.getBuffer ());
186197 // If not, report an error.
187198 std::string ErrorMsg = std::string (" function '" ) +
188199 demangle (MangledName.str ()) +
0 commit comments