<div dir="ltr">Got it, my fault for forgetting to test in both configurations. Reverted for now, fix incoming.</div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Jul 25, 2017 at 4:14 PM, Rui Ueyama via llvm-commits <span dir="ltr"><<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Eric,<div><br></div><div>Looks like you forgot to add #if to that particular function, so it is failing on bots that doesn't have libxml2.</div></div><div class="HOEnZb"><div class="h5"><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Jul 25, 2017 at 4:07 PM, Sean Callanan via llvm-commits <span dir="ltr"><<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div text="#000000" bgcolor="#FFFFFF">
<p><font face="Helvetica">E<font face="Helvetica">ric,</font></font></p>
<p><font face="Helvetica"><font face="Helvetica"><font face="Helvetica">this <font face="Helvetica">is breaking an
LLDB bot:</font></font></font></font></p>
<p><font face="Helvetica"><font face="Helvetica"><a class="m_9152026732671749167m_4373122615298432468moz-txt-link-freetext" href="http://lab.llvm.org:8011/builders/lldb-amd64-ninja-freebsd11/builds/12647" target="_blank">http://lab.llvm.org:8011/build<wbr>ers/lldb-amd64-ninja-freebsd11<wbr>/builds/12647</a></font></font></p>
<p><font face="Helvetica"><font face="Helvetica"><font face="Helvetica">Could you have a look?</font></font></font></p>
<p><font face="Helvetica"><font face="Helvetica"><font face="Helvetica"><font face="Helvetica">Sean</font></font><br>
</font></font></p><div><div class="m_9152026732671749167h5">
<br>
<div class="m_9152026732671749167m_4373122615298432468moz-cite-prefix">On 7/25/17 3:50 PM, Eric Beckmann via
llvm-commits wrote:<br>
</div>
<blockquote type="cite">
<pre>Author: ecbeckmann
Date: Tue Jul 25 15:50:25 2017
New Revision: 309047
URL: <a class="m_9152026732671749167m_4373122615298432468moz-txt-link-freetext" href="http://llvm.org/viewvc/llvm-project?rev=309047&view=rev" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject?rev=309047&view=rev</a>
Log:
llvm-mt: implement simple merging of manifests, not factoring namespaces.
Summary:
Does a simple merge, where mergeable elements are combined, all others
are appended. Does not apply trickly namespace rules.
Subscribers: llvm-commits, hiraditya
Differential Revision: <a class="m_9152026732671749167m_4373122615298432468moz-txt-link-freetext" href="https://reviews.llvm.org/D35753" target="_blank">https://reviews.llvm.org/D3575<wbr>3</a>
Added:
llvm/trunk/test/tools/llvm-mt/<wbr>Inputs/additional.manifest
llvm/trunk/test/tools/llvm-mt/<wbr>Inputs/conflicting.manifest
llvm/trunk/test/tools/llvm-mt/<wbr>conflicting.test
llvm/trunk/test/tools/llvm-mt/<wbr>simple_merge.test
Modified:
llvm/trunk/include/llvm/Suppor<wbr>t/WindowsManifestMerger.h
llvm/trunk/lib/Support/Windows<wbr>ManifestMerger.cpp
llvm/trunk/test/tools/llvm-mt/<wbr>Inputs/test_manifest.manifest
llvm/trunk/tools/llvm-mt/llvm-<wbr>mt.cpp
Modified: llvm/trunk/include/llvm/Suppor<wbr>t/WindowsManifestMerger.h
URL: <a class="m_9152026732671749167m_4373122615298432468moz-txt-link-freetext" href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/WindowsManifestMerger.h?rev=309047&r1=309046&r2=309047&view=diff" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject/llvm/trunk/include/llvm/<wbr>Support/WindowsManifestMerger.<wbr>h?rev=309047&r1=309046&r2=<wbr>309047&view=diff</a>
==============================<wbr>==============================<wbr>==================
--- llvm/trunk/include/llvm/Suppor<wbr>t/WindowsManifestMerger.h (original)
+++ llvm/trunk/include/llvm/Suppor<wbr>t/WindowsManifestMerger.h Tue Jul 25 15:50:25 2017
@@ -57,6 +57,8 @@ private:
class WindowsManifestMerger {
public:
+ ~WindowsManifestMerger();
+
Error merge(const MemoryBuffer &Manifest);
// Returns vector containing merged xml manifest, or uninitialized vector for
@@ -68,7 +70,8 @@ private:
Error getParseError();
#if LLVM_LIBXML2_ENABLED
- XMLNodeImpl CombinedRoot = nullptr;
+ XMLDocumentImpl CombinedDoc = nullptr;
+ std::vector<XMLDocumentImpl> MergedDocs;
#endif
bool ParseErrorOccurred = false;
};
Modified: llvm/trunk/lib/Support/Windows<wbr>ManifestMerger.cpp
URL: <a class="m_9152026732671749167m_4373122615298432468moz-txt-link-freetext" href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/WindowsManifestMerger.cpp?rev=309047&r1=309046&r2=309047&view=diff" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject/llvm/trunk/lib/Support/<wbr>WindowsManifestMerger.cpp?rev=<wbr>309047&r1=309046&r2=309047&<wbr>view=diff</a>
==============================<wbr>==============================<wbr>==================
--- llvm/trunk/lib/Support/Windows<wbr>ManifestMerger.cpp (original)
+++ llvm/trunk/lib/Support/Windows<wbr>ManifestMerger.cpp Tue Jul 25 15:50:25 2017
@@ -16,6 +16,11 @@
#include <stdarg.h>
+#define TO_XML_CHAR(X) reinterpret_cast<const unsigned char *>(X)
+#define FROM_XML_CHAR(X) reinterpret_cast<const char *>(X)
+
+using namespace llvm;
+
namespace llvm {
char WindowsManifestError::ID = 0;
@@ -24,16 +29,148 @@ WindowsManifestError::WindowsM<wbr>anifestErr
void WindowsManifestError::log(raw_<wbr>ostream &OS) const { OS << Msg; }
+static bool xmlStringsEqual(const unsigned char *A, const unsigned char *B) {
+ return strcmp(FROM_XML_CHAR(A), FROM_XML_CHAR(B)) == 0;
+}
+
+bool isMergeableElement(const unsigned char *ElementName) {
+ for (StringRef S : {"application", "assembly", "assemblyIdentity",
+ "compatibility", "noInherit", "requestedExecutionLevel",
+ "requestedPrivileges", "security", "trustInfo"}) {
+ if (S == FROM_XML_CHAR(ElementName))
+ return true;
+ }
+ return false;
+}
+
+XMLNodeImpl getChildWithName(XMLNodeImpl Parent,
+ const unsigned char *ElementName) {
+#if LLVM_LIBXML2_ENABLED
+ for (XMLNodeImpl Child = Parent->children; Child; Child = Child->next)
+ if (xmlStringsEqual(Child->name, ElementName)) {
+ return Child;
+ }
+#endif
+ return nullptr;
+}
+
+const unsigned char *getAttribute(XMLNodeImpl Node,
+ const unsigned char *AttributeName) {
+#if LLVM_LIBXML2_ENABLED
+ for (xmlAttrPtr Attribute = Node->properties; Attribute != nullptr;
+ Attribute = Attribute->next) {
+ if (xmlStringsEqual(Attribute->na<wbr>me, AttributeName))
+ return Attribute->children->content;
+ }
+#endif
+ return nullptr;
+}
+
+Error mergeAttributes(XMLNodeImpl OriginalNode, XMLNodeImpl AdditionalNode) {
+#if LLVM_LIBXML2_ENABLED
+ for (xmlAttrPtr Attribute = AdditionalNode->properties; Attribute != nullptr;
+ Attribute = Attribute->next) {
+ if (const unsigned char *OriginalValue =
+ getAttribute(OriginalNode, Attribute->name)) {
+ // Attributes of the same name must also have the same value. Otherwise
+ // an error is thrown.
+ if (!xmlStringsEqual(OriginalValu<wbr>e, Attribute->children->content))
+ return make_error<WindowsManifestErro<wbr>r>(
+ Twine("conflicting attributes for ") +
+ FROM_XML_CHAR(OriginalNode->na<wbr>me));
+ } else {
+ char *NameCopy = strdup(FROM_XML_CHAR(Attribute<wbr>->name));
+ char *ContentCopy = strdup(FROM_XML_CHAR(Attribute<wbr>->children->content));
+ xmlNewProp(OriginalNode, TO_XML_CHAR(NameCopy), TO_XML_CHAR(ContentCopy));
+ }
+ }
+#endif
+ return Error::success();
+}
+
+Error treeMerge(XMLNodeImpl OriginalRoot, XMLNodeImpl AdditionalRoot) {
+#if LLVM_LIBXML2_ENABLED
+ XMLNodeImpl AdditionalFirstChild = AdditionalRoot->children;
+ for (XMLNodeImpl Child = AdditionalFirstChild; Child; Child = Child->next) {
+ XMLNodeImpl OriginalChildWithName;
+ if (!isMergeableElement(Child->na<wbr>me) ||
+ !(OriginalChildWithName =
+ getChildWithName(OriginalRoot, Child->name))) {
+ XMLNodeImpl NewChild = xmlCopyNode(Child, 1);
+ if (!NewChild)
+ return make_error<WindowsManifestErro<wbr>r>(Twine("error when copying ") +
+ FROM_XML_CHAR(Child->name));
+ if (NewChild->ns)
+ xmlFreeNs(NewChild->ns); // xmlCopyNode explicitly defines default
+ // namespace, undo this here.
+ if (!xmlAddChild(OriginalRoot, NewChild))
+ return make_error<WindowsManifestErro<wbr>r>(Twine("could not merge ") +
+ FROM_XML_CHAR(NewChild->name))<wbr>;
+ } else if (auto E = treeMerge(OriginalChildWithNam<wbr>e, Child)) {
+ return E;
+ }
+ }
+ if (auto E = mergeAttributes(OriginalRoot, AdditionalRoot))
+ return E;
+#endif
+ return Error::success();
+}
+
+void stripCommentsAndText(XMLNodeIm<wbr>pl Root) {
+ xmlNode StoreNext;
+ for (XMLNodeImpl Child = Root->children; Child; Child = Child->next) {
+ if (!xmlStringsEqual(Child->name, TO_XML_CHAR("text")) &&
+ !xmlStringsEqual(Child->name, TO_XML_CHAR("comment"))) {
+ stripCommentsAndText(Child);
+ } else {
+ StoreNext.next = Child->next;
+ XMLNodeImpl Remove = Child;
+ Child = &StoreNext;
+ xmlUnlinkNode(Remove);
+ xmlFreeNode(Remove);
+ }
+ }
+}
+
+WindowsManifestMerger::~Windo<wbr>wsManifestMerger() {
+#if LLVM_LIBXML2_ENABLED
+ for (auto &Doc : MergedDocs)
+ xmlFreeDoc(Doc);
+#endif
+}
+
Error WindowsManifestMerger::merge(c<wbr>onst MemoryBuffer &Manifest) {
#if LLVM_LIBXML2_ENABLED
+ if (Manifest.getBufferSize() == 0)
+ return make_error<WindowsManifestErro<wbr>r>(
+ "attempted to merge empty manifest");
xmlSetGenericErrorFunc((void *)this, WindowsManifestMerger::errorCa<wbr>llback);
XMLDocumentImpl ManifestXML =
xmlReadMemory(Manifest.getBuff<wbr>erStart(), Manifest.getBufferSize(),
- "manifest.xml", nullptr, 0);
+ "manifest.xml", nullptr, XML_PARSE_NOBLANKS);
xmlSetGenericErrorFunc(nullptr<wbr>, nullptr);
if (auto E = getParseError())
return E;
- CombinedRoot = xmlDocGetRootElement(ManifestX<wbr>ML);
+ XMLNodeImpl AdditionalRoot = xmlDocGetRootElement(ManifestX<wbr>ML);
+ stripCommentsAndText(Additiona<wbr>lRoot);
+ if (CombinedDoc == nullptr) {
+ CombinedDoc = ManifestXML;
+ } else {
+ XMLNodeImpl CombinedRoot = xmlDocGetRootElement(CombinedD<wbr>oc);
+ if (xmlStringsEqual(CombinedRoot-<wbr>>name, AdditionalRoot->name) &&
+ isMergeableElement(AdditionalR<wbr>oot->name)) {
+ if (auto E = treeMerge(CombinedRoot, AdditionalRoot)) {
+ return E;
+ }
+ } else {
+ XMLNodeImpl NewChild = xmlCopyNode(AdditionalRoot, 1);
+ if (!NewChild)
+ return make_error<WindowsManifestErro<wbr>r>("could not copy manifest");
+ if (!xmlAddChild(CombinedRoot, NewChild))
+ return make_error<WindowsManifestErro<wbr>r>("could not append manifest");
+ }
+ }
+ MergedDocs.push_back(ManifestX<wbr>ML);
#endif
return Error::success();
}
@@ -42,15 +179,16 @@ std::unique_ptr<MemoryBuffer> WindowsMan
#if LLVM_LIBXML2_ENABLED
unsigned char *XmlBuff;
int BufferSize = 0;
- if (CombinedRoot) {
+ if (CombinedDoc) {
std::unique_ptr<xmlDoc> OutputDoc(xmlNewDoc((const unsigned char *)"1.0"));
- xmlDocSetRootElement(OutputDoc<wbr>.get(), CombinedRoot);
- xmlDocDumpMemory(OutputDoc.get<wbr>(), &XmlBuff, &BufferSize);
+ xmlDocSetRootElement(OutputDoc<wbr>.get(), xmlDocGetRootElement(CombinedD<wbr>oc));
+ xmlKeepBlanksDefault(0);
+ xmlDocDumpFormatMemory(OutputD<wbr>oc.get(), &XmlBuff, &BufferSize, 1);
}
if (BufferSize == 0)
return nullptr;
return MemoryBuffer::getMemBuffer(
- StringRef(reinterpret_cast<con<wbr>st char *>(XmlBuff), (size_t)BufferSize));
+ StringRef(FROM_XML_CHAR(XmlBuf<wbr>f), (size_t)BufferSize));
#else
return nullptr;
#endif
Added: llvm/trunk/test/tools/llvm-mt/<wbr>Inputs/additional.manifest
URL: <a class="m_9152026732671749167m_4373122615298432468moz-txt-link-freetext" href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-mt/Inputs/additional.manifest?rev=309047&view=auto" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject/llvm/trunk/test/tools/ll<wbr>vm-mt/Inputs/additional.manife<wbr>st?rev=309047&view=auto</a>
==============================<wbr>==============================<wbr>==================
--- llvm/trunk/test/tools/llvm-mt/<wbr>Inputs/additional.manifest (added)
+++ llvm/trunk/test/tools/llvm-mt/<wbr>Inputs/additional.manifest Tue Jul 25 15:50:25 2017
@@ -0,0 +1,24 @@
+<?xml version="1.0"?>
+<assembly xmlns="urn:schemas-microsoft-c<wbr>om:asm.v1" manifestVersion="1.0">
+ <trustInfo>
+ <security>
+ <requestedPrivileges>
+<!--Comment will be removed-->
+ <requestedExecutionLevel level="3" admin="false"/>
+ </requestedPrivileges>
+ </security>
+ </trustInfo>
+ <dependency>
+ <dependentAssembly>
+ <assemblyIdentity program="logDisplay"/>
+ </dependentAssembly>
+ </dependency>
+ <compatibility>
+ <dependency>
+ <assemblyIdentity program="compatibilityCheck2"/<wbr>>
+ </dependency>
+ <application>
+ <supportedOS Id="BarOS"/>
+ </application>
+ </compatibility>
+</assembly>
Added: llvm/trunk/test/tools/llvm-mt/<wbr>Inputs/conflicting.manifest
URL: <a class="m_9152026732671749167m_4373122615298432468moz-txt-link-freetext" href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-mt/Inputs/conflicting.manifest?rev=309047&view=auto" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject/llvm/trunk/test/tools/ll<wbr>vm-mt/Inputs/conflicting.manif<wbr>est?rev=309047&view=auto</a>
==============================<wbr>==============================<wbr>==================
--- llvm/trunk/test/tools/llvm-mt/<wbr>Inputs/conflicting.manifest (added)
+++ llvm/trunk/test/tools/llvm-mt/<wbr>Inputs/conflicting.manifest Tue Jul 25 15:50:25 2017
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<assembly xmlns="urn:schemas-microsoft-c<wbr>om:asm.v1">
+ <trustInfo>
+ <security>
+ <requestedPrivileges>
+ <requestedExecutionLevel level="2" uiAccess="1"/>
+ </requestedPrivileges>
+ </security>
+ </trustInfo>
+</assembly>
Modified: llvm/trunk/test/tools/llvm-mt/<wbr>Inputs/test_manifest.manifest
URL: <a class="m_9152026732671749167m_4373122615298432468moz-txt-link-freetext" href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-mt/Inputs/test_manifest.manifest?rev=309047&r1=309046&r2=309047&view=diff" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject/llvm/trunk/test/tools/ll<wbr>vm-mt/Inputs/test_manifest.man<wbr>ifest?rev=309047&r1=309046&r2=<wbr>309047&view=diff</a>
==============================<wbr>==============================<wbr>==================
--- llvm/trunk/test/tools/llvm-mt/<wbr>Inputs/test_manifest.manifest (original)
+++ llvm/trunk/test/tools/llvm-mt/<wbr>Inputs/test_manifest.manifest Tue Jul 25 15:50:25 2017
@@ -1,9 +1,9 @@
<?xml version="1.0"?>
-<assembly xmlns="urn:schemas-microsoft-c<wbr>om:asm.v1" manifestVersion="1.0">
+<assembly xmlns="urn:schemas-microsoft-c<wbr>om:asm.v1">
<trustInfo>
<security>
<requestedPrivileges>
- <requestedExecutionLevel level="3" uiAccess="1"/>
+ <requestedExecutionLevel level="3" uiAccess="1"/>
</requestedPrivileges>
</security>
</trustInfo>
@@ -12,4 +12,12 @@
<assemblyIdentity program="displayDriver"/>
</dependentAssembly>
</dependency>
+ <compatibility>
+ <dependency>
+ <assemblyIdentity program="compatibilityCheck1"/<wbr>>
+ </dependency>
+ <application>
+ <supportedOS Id="FooOS"/>
+ </application>
+ </compatibility>
</assembly>
Added: llvm/trunk/test/tools/llvm-mt/<wbr>conflicting.test
URL: <a class="m_9152026732671749167m_4373122615298432468moz-txt-link-freetext" href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-mt/conflicting.test?rev=309047&view=auto" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject/llvm/trunk/test/tools/ll<wbr>vm-mt/conflicting.test?rev=309<wbr>047&view=auto</a>
==============================<wbr>==============================<wbr>==================
--- llvm/trunk/test/tools/llvm-mt/<wbr>conflicting.test (added)
+++ llvm/trunk/test/tools/llvm-mt/<wbr>conflicting.test Tue Jul 25 15:50:25 2017
@@ -0,0 +1,7 @@
+REQUIRES: libxml2
+UNSUPPORTED: windows
+
+RUN: not llvm-mt /manifest %p/Inputs/test_manifest.manife<wbr>st /manifest \
+RUN: %p/Inputs/conflicting.manifest /out:%t 2>&1 >/dev/null | FileCheck %s
+
+CHECK: llvm-mt error: conflicting attributes for requestedExecutionLevel
Added: llvm/trunk/test/tools/llvm-mt/<wbr>simple_merge.test
URL: <a class="m_9152026732671749167m_4373122615298432468moz-txt-link-freetext" href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-mt/simple_merge.test?rev=309047&view=auto" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject/llvm/trunk/test/tools/ll<wbr>vm-mt/simple_merge.test?rev=30<wbr>9047&view=auto</a>
==============================<wbr>==============================<wbr>==================
--- llvm/trunk/test/tools/llvm-mt/<wbr>simple_merge.test (added)
+++ llvm/trunk/test/tools/llvm-mt/<wbr>simple_merge.test Tue Jul 25 15:50:25 2017
@@ -0,0 +1,39 @@
+REQUIRES: libxml2
+UNSUPPORTED: windows
+
+RUN: llvm-mt /manifest %p/Inputs/test_manifest.manife<wbr>st /manifest \
+RUN: %p/Inputs/additional.manifest /out:%t
+RUN: FileCheck %s -input-file=%t
+
+CHECK: <?xml version="1.0"?>
+CHECK-NEXT: <assembly xmlns="urn:schemas-microsoft-c<wbr>om:asm.v1" manifestVersion="1.0">
+CHECK-NEXT: <trustInfo>
+CHECK-NEXT: <security>
+CHECK-NEXT: <requestedPrivileges>
+CHECK-NEXT: <requestedExecutionLevel level="3" uiAccess="1" admin="false"/>
+CHECK-NEXT: </requestedPrivileges>
+CHECK-NEXT: </security>
+CHECK-NEXT: </trustInfo>
+CHECK-NEXT: <dependency>
+CHECK-NEXT: <dependentAssembly>
+CHECK-NEXT: <assemblyIdentity program="displayDriver"/>
+CHECK-NEXT: </dependentAssembly>
+CHECK-NEXT: </dependency>
+CHECK-NEXT: <compatibility>
+CHECK-NEXT: <dependency>
+CHECK-NEXT: <assemblyIdentity program="compatibilityCheck1"/<wbr>>
+CHECK-NEXT: </dependency>
+CHECK-NEXT: <application>
+CHECK-NEXT: <supportedOS Id="FooOS"/>
+CHECK-NEXT: <supportedOS Id="BarOS"/>
+CHECK-NEXT: </application>
+CHECK-NEXT: <dependency>
+CHECK-NEXT: <assemblyIdentity program="compatibilityCheck2"/<wbr>>
+CHECK-NEXT: </dependency>
+CHECK-NEXT: </compatibility>
+CHECK-NEXT: <dependency>
+CHECK-NEXT: <dependentAssembly>
+CHECK-NEXT: <assemblyIdentity program="logDisplay"/>
+CHECK-NEXT: </dependentAssembly>
+CHECK-NEXT: </dependency>
+CHECK-NEXT: </assembly>
Modified: llvm/trunk/tools/llvm-mt/llvm-<wbr>mt.cpp
URL: <a class="m_9152026732671749167m_4373122615298432468moz-txt-link-freetext" href="http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-mt/llvm-mt.cpp?rev=309047&r1=309046&r2=309047&view=diff" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject/llvm/trunk/tools/llvm-mt<wbr>/llvm-mt.cpp?rev=309047&r1=309<wbr>046&r2=309047&view=diff</a>
==============================<wbr>==============================<wbr>==================
--- llvm/trunk/tools/llvm-mt/llvm-<wbr>mt.cpp (original)
+++ llvm/trunk/tools/llvm-mt/llvm-<wbr>mt.cpp Tue Jul 25 15:50:25 2017
@@ -95,7 +95,6 @@ int main(int argc, const char **argv) {
SpecificBumpPtrAllocator<char> ArgAllocator;
ExitOnErr(errorCodeToError(sys<wbr>::Process::GetArgumentVector(
argv_buf, makeArrayRef(argv, argc), ArgAllocator)));
-
llvm_shutdown_obj Y; // Call llvm_shutdown() on exit.
CvtResOptTable T;
______________________________<wbr>_________________
llvm-commits mailing list
<a class="m_9152026732671749167m_4373122615298432468moz-txt-link-abbreviated" href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>
<a class="m_9152026732671749167m_4373122615298432468moz-txt-link-freetext" href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/llvm-commits</a>
</pre>
</blockquote>
<br>
</div></div></div>
<br>______________________________<wbr>_________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/llvm-commits</a><br>
<br></blockquote></div><br></div>
</div></div><br>______________________________<wbr>_________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/llvm-commits</a><br>
<br></blockquote></div><br></div>