[llvm] TRY:Reapply "[llvm-mt] Use XmlDeleter to free xmlFreeDoc" (PR #128575)
Vitaly Buka via llvm-commits
llvm-commits at lists.llvm.org
Mon Feb 24 12:59:02 PST 2025
https://github.com/vitalybuka updated https://github.com/llvm/llvm-project/pull/128575
>From 505621faa4f61f4dbc83724911aad950884efff0 Mon Sep 17 00:00:00 2001
From: Vitaly Buka <vitalybuka at google.com>
Date: Mon, 24 Feb 2025 12:57:00 -0800
Subject: [PATCH 1/2] =?UTF-8?q?[=F0=9D=98=80=F0=9D=97=BD=F0=9D=97=BF]=20ch?=
=?UTF-8?q?anges=20to=20main=20this=20commit=20is=20based=20on?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Created using spr 1.3.4
[skip ci]
---
.../WindowsManifest/WindowsManifestMerger.cpp | 21 +++++++++++++------
1 file changed, 15 insertions(+), 6 deletions(-)
diff --git a/llvm/lib/WindowsManifest/WindowsManifestMerger.cpp b/llvm/lib/WindowsManifest/WindowsManifestMerger.cpp
index cdd63686d4711..b9e9d0768a96d 100644
--- a/llvm/lib/WindowsManifest/WindowsManifestMerger.cpp
+++ b/llvm/lib/WindowsManifest/WindowsManifestMerger.cpp
@@ -32,6 +32,7 @@ void WindowsManifestError::log(raw_ostream &OS) const { OS << Msg; }
class WindowsManifestMerger::WindowsManifestMergerImpl {
public:
+ ~WindowsManifestMergerImpl();
Error merge(MemoryBufferRef Manifest);
std::unique_ptr<MemoryBuffer> getMergedManifest();
@@ -43,8 +44,11 @@ class WindowsManifestMerger::WindowsManifestMergerImpl {
void operator()(xmlChar *Ptr) { xmlFree(Ptr); }
void operator()(xmlDoc *Ptr) { xmlFreeDoc(Ptr); }
};
+
+
+
xmlDocPtr CombinedDoc = nullptr;
- std::vector<std::unique_ptr<xmlDoc, XmlDeleter>> MergedDocs;
+ std::vector<xmlDocPtr> MergedDocs;
bool Merged = false;
int BufferSize = 0;
std::unique_ptr<xmlChar, XmlDeleter> Buffer;
@@ -610,6 +614,11 @@ static void checkAndStripPrefixes(xmlNodePtr Node,
}
}
+WindowsManifestMerger::WindowsManifestMergerImpl::~WindowsManifestMergerImpl() {
+ for (auto &Doc : MergedDocs)
+ xmlFreeDoc(Doc);
+}
+
Error WindowsManifestMerger::WindowsManifestMergerImpl::merge(
MemoryBufferRef Manifest) {
if (Merged)
@@ -620,17 +629,17 @@ Error WindowsManifestMerger::WindowsManifestMergerImpl::merge(
"attempted to merge empty manifest");
xmlSetGenericErrorFunc((void *)this,
WindowsManifestMergerImpl::errorCallback);
- std::unique_ptr<xmlDoc, XmlDeleter> ManifestXML(xmlReadMemory(
+ xmlDocPtr ManifestXML = xmlReadMemory(
Manifest.getBufferStart(), Manifest.getBufferSize(), "manifest.xml",
- nullptr, XML_PARSE_NOBLANKS | XML_PARSE_NODICT));
+ nullptr, XML_PARSE_NOBLANKS | XML_PARSE_NODICT);
xmlSetGenericErrorFunc(nullptr, nullptr);
if (auto E = getParseError())
return E;
- xmlNodePtr AdditionalRoot = xmlDocGetRootElement(ManifestXML.get());
+ xmlNodePtr AdditionalRoot = xmlDocGetRootElement(ManifestXML);
stripComments(AdditionalRoot);
setAttributeNamespaces(AdditionalRoot);
if (CombinedDoc == nullptr) {
- CombinedDoc = ManifestXML.get();
+ CombinedDoc = ManifestXML;
} else {
xmlNodePtr CombinedRoot = xmlDocGetRootElement(CombinedDoc);
if (!xmlStringsEqual(CombinedRoot->name, AdditionalRoot->name) ||
@@ -642,7 +651,7 @@ Error WindowsManifestMerger::WindowsManifestMergerImpl::merge(
return E;
}
}
- MergedDocs.push_back(std::move(ManifestXML));
+ MergedDocs.push_back(ManifestXML);
return Error::success();
}
>From 0c15e85a214f62e76a2014e1173039c1c1a84d6d Mon Sep 17 00:00:00 2001
From: Vitaly Buka <vitalybuka at google.com>
Date: Mon, 24 Feb 2025 12:58:50 -0800
Subject: [PATCH 2/2] =?UTF-8?q?[=F0=9D=98=80=F0=9D=97=BD=F0=9D=97=BF]=20ch?=
=?UTF-8?q?anges=20introduced=20through=20rebase?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Created using spr 1.3.4
[skip ci]
---
.../WindowsManifest/WindowsManifestMerger.cpp | 21 +++++++++++++------
1 file changed, 15 insertions(+), 6 deletions(-)
diff --git a/llvm/lib/WindowsManifest/WindowsManifestMerger.cpp b/llvm/lib/WindowsManifest/WindowsManifestMerger.cpp
index cdd63686d4711..b9e9d0768a96d 100644
--- a/llvm/lib/WindowsManifest/WindowsManifestMerger.cpp
+++ b/llvm/lib/WindowsManifest/WindowsManifestMerger.cpp
@@ -32,6 +32,7 @@ void WindowsManifestError::log(raw_ostream &OS) const { OS << Msg; }
class WindowsManifestMerger::WindowsManifestMergerImpl {
public:
+ ~WindowsManifestMergerImpl();
Error merge(MemoryBufferRef Manifest);
std::unique_ptr<MemoryBuffer> getMergedManifest();
@@ -43,8 +44,11 @@ class WindowsManifestMerger::WindowsManifestMergerImpl {
void operator()(xmlChar *Ptr) { xmlFree(Ptr); }
void operator()(xmlDoc *Ptr) { xmlFreeDoc(Ptr); }
};
+
+
+
xmlDocPtr CombinedDoc = nullptr;
- std::vector<std::unique_ptr<xmlDoc, XmlDeleter>> MergedDocs;
+ std::vector<xmlDocPtr> MergedDocs;
bool Merged = false;
int BufferSize = 0;
std::unique_ptr<xmlChar, XmlDeleter> Buffer;
@@ -610,6 +614,11 @@ static void checkAndStripPrefixes(xmlNodePtr Node,
}
}
+WindowsManifestMerger::WindowsManifestMergerImpl::~WindowsManifestMergerImpl() {
+ for (auto &Doc : MergedDocs)
+ xmlFreeDoc(Doc);
+}
+
Error WindowsManifestMerger::WindowsManifestMergerImpl::merge(
MemoryBufferRef Manifest) {
if (Merged)
@@ -620,17 +629,17 @@ Error WindowsManifestMerger::WindowsManifestMergerImpl::merge(
"attempted to merge empty manifest");
xmlSetGenericErrorFunc((void *)this,
WindowsManifestMergerImpl::errorCallback);
- std::unique_ptr<xmlDoc, XmlDeleter> ManifestXML(xmlReadMemory(
+ xmlDocPtr ManifestXML = xmlReadMemory(
Manifest.getBufferStart(), Manifest.getBufferSize(), "manifest.xml",
- nullptr, XML_PARSE_NOBLANKS | XML_PARSE_NODICT));
+ nullptr, XML_PARSE_NOBLANKS | XML_PARSE_NODICT);
xmlSetGenericErrorFunc(nullptr, nullptr);
if (auto E = getParseError())
return E;
- xmlNodePtr AdditionalRoot = xmlDocGetRootElement(ManifestXML.get());
+ xmlNodePtr AdditionalRoot = xmlDocGetRootElement(ManifestXML);
stripComments(AdditionalRoot);
setAttributeNamespaces(AdditionalRoot);
if (CombinedDoc == nullptr) {
- CombinedDoc = ManifestXML.get();
+ CombinedDoc = ManifestXML;
} else {
xmlNodePtr CombinedRoot = xmlDocGetRootElement(CombinedDoc);
if (!xmlStringsEqual(CombinedRoot->name, AdditionalRoot->name) ||
@@ -642,7 +651,7 @@ Error WindowsManifestMerger::WindowsManifestMergerImpl::merge(
return E;
}
}
- MergedDocs.push_back(std::move(ManifestXML));
+ MergedDocs.push_back(ManifestXML);
return Error::success();
}
More information about the llvm-commits
mailing list