<div dir="ltr">This breaks ubsan again, please fix asap<div><a href="http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-fast/builds/5640/steps/check-llvm%20ubsan/logs/stdio" target="_blank">http://lab.llvm.org:8011/<wbr>builders/sanitizer-x86_64-<wbr>linux-fast/builds/5640/steps/<wbr>check-llvm%20ubsan/logs/stdio</a><br></div><div><pre style="font-family:"Courier New",courier,monotype,monospace;color:rgb(0,0,0);font-size:medium"><span class="m_2428619808885610116gmail-stdout">/mnt/b/sanitizer-buildbot3/<wbr>sanitizer-x86_64-linux-fast/<wbr>build/llvm/lib/Object/<wbr>WindowsResource.cpp:603:3: runtime error: store to misaligned address 0x7fe1e5facdb2 for type 'unsigned int', which requires 4 byte alignment
0x7fe1e5facdb2: note: pointer points here
 00 00  03 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  00 00 00 00 00 00
              ^ 
    #0 0x44fabc in llvm::object::<wbr>WindowsResourceCOFFWriter::<wbr>writeStringTable() /mnt/b/sanitizer-buildbot3/<wbr>sanitizer-x86_64-linux-fast/<wbr>build/llvm/lib/Object/<wbr>WindowsResource.cpp:603:20
    #1 0x44f13b in llvm::object::<wbr>WindowsResourceCOFFWriter::<wbr>write() /mnt/b/sanitizer-buildbot3/<wbr>sanitizer-x86_64-linux-fast/<wbr>build/llvm/lib/Object/<wbr>WindowsResource.cpp:432:3
    #2 0x450840 in llvm::object::<wbr>writeWindowsResourceCOFF(llvm:<wbr>:StringRef, llvm::object::Machine, llvm::object::<wbr>WindowsResourceParser const&) /mnt/b/sanitizer-buildbot3/<wbr>sanitizer-x86_64-linux-fast/<wbr>build/llvm/lib/Object/<wbr>WindowsResource.cpp:743:17
    #3 0x4335af in main /mnt/b/sanitizer-buildbot3/<wbr>sanitizer-x86_64-linux-fast/<wbr>build/llvm/tools/llvm-cvtres/<wbr>llvm-cvtres.cpp:198:7
    #4 0x7fe1e48f582f in __libc_start_main (/lib/x86_64-linux-gnu/libc.<wbr>so.6+0x2082f)</span></pre></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Jun 12, 2017 at 5:19 PM, Eric Beckmann 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">Author: ecbeckmann<br>
Date: Mon Jun 12 19:19:43 2017<br>
New Revision: 305259<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=305259&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project?rev=305259&view=rev</a><br>
Log:<br>
Revert "Revert "Fix alignment bug in COFF emission.""<br>
<br>
This revert was done so that my other patch to add test framework could<br>
land separately.  Now the revert can be reverted and this patch can<br>
reland.<br>
<br>
This reverts commit 18b3c75b2b0d32601fb60a06b9672c<wbr>33d6f0dff9.<br>
<br>
Modified:<br>
    llvm/trunk/lib/Object/<wbr>WindowsResource.cpp<br>
<br>
Modified: llvm/trunk/lib/Object/<wbr>WindowsResource.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Object/WindowsResource.cpp?rev=305259&r1=305258&r2=305259&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/lib/Object/<wbr>WindowsResource.cpp?rev=<wbr>305259&r1=305258&r2=305259&<wbr>view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/lib/Object/<wbr>WindowsResource.cpp (original)<br>
+++ llvm/trunk/lib/Object/<wbr>WindowsResource.cpp Mon Jun 12 19:19:43 2017<br>
@@ -30,6 +30,10 @@ namespace object {<br>
<br>
 const uint32_t MIN_HEADER_SIZE = 7 * sizeof(uint32_t) + 2 * sizeof(uint16_t);<br>
<br>
+// COFF files seem to be inconsistent with alignment between sections, just use<br>
+// 8-byte because it makes everyone happy.<br>
+const uint32_t SECTION_ALIGNMENT = sizeof(uint64_t);<br>
+<br>
 static const size_t ResourceMagicSize = 16;<br>
<br>
 static const size_t NullEntrySize = 16;<br>
@@ -320,7 +324,8 @@ private:<br>
   void writeDirectoryStringTable();<br>
   void writeFirstSectionRelocations()<wbr>;<br>
   std::unique_ptr<<wbr>FileOutputBuffer> Buffer;<br>
-  uint8_t *Current;<br>
+  uint8_t *BufferStart;<br>
+  uint64_t CurrentOffset = 0;<br>
   Machine MachineType;<br>
   const WindowsResourceParser::<wbr>TreeNode &Resources;<br>
   const ArrayRef<std::vector<uint8_t>> Data;<br>
@@ -392,6 +397,7 @@ void WindowsResourceCOFFWriter::<wbr>performS<br>
   FileSize += SectionOneSize;<br>
   FileSize += Data.size() *<br>
               llvm::COFF::RelocationSize; // one relocation for each resource.<br>
+  FileSize = alignTo(FileSize, SECTION_ALIGNMENT);<br>
 }<br>
<br>
 void WindowsResourceCOFFWriter::<wbr>performSectionTwoLayout() {<br>
@@ -404,6 +410,7 @@ void WindowsResourceCOFFWriter::<wbr>performS<br>
     SectionTwoSize += llvm::alignTo(Entry.size(), sizeof(uint64_t));<br>
   }<br>
   FileSize += SectionTwoSize;<br>
+  FileSize = alignTo(FileSize, SECTION_ALIGNMENT);<br>
 }<br>
<br>
 static std::time_t getTime() {<br>
@@ -414,7 +421,7 @@ static std::time_t getTime() {<br>
 }<br>
<br>
 Error WindowsResourceCOFFWriter::<wbr>write() {<br>
-  Current = Buffer->getBufferStart();<br>
+  BufferStart = Buffer->getBufferStart();<br>
<br>
   writeCOFFHeader();<br>
   writeFirstSectionHeader();<br>
@@ -433,7 +440,8 @@ Error WindowsResourceCOFFWriter::<wbr>write()<br>
<br>
 void WindowsResourceCOFFWriter::<wbr>writeCOFFHeader() {<br>
   // Write the COFF header.<br>
-  auto *Header = reinterpret_cast<llvm::object:<wbr>:coff_file_header *>(Current);<br>
+  auto *Header =<br>
+      reinterpret_cast<llvm::object:<wbr>:coff_file_header *>(BufferStart);<br>
   switch (MachineType) {<br>
   case Machine::ARM:<br>
     Header->Machine = llvm::COFF::IMAGE_FILE_<wbr>MACHINE_ARMNT;<br>
@@ -458,9 +466,9 @@ void WindowsResourceCOFFWriter::<wbr>writeCOF<br>
<br>
 void WindowsResourceCOFFWriter::<wbr>writeFirstSectionHeader() {<br>
   // Write the first section header.<br>
-  Current += sizeof(llvm::object::coff_<wbr>file_header);<br>
-  auto *SectionOneHeader =<br>
-      reinterpret_cast<llvm::object:<wbr>:coff_section *>(Current);<br>
+  CurrentOffset += sizeof(llvm::object::coff_<wbr>file_header);<br>
+  auto *SectionOneHeader = reinterpret_cast<llvm::object:<wbr>:coff_section *>(<br>
+      BufferStart + CurrentOffset);<br>
   strncpy(SectionOneHeader-><wbr>Name, ".rsrc$01", (size_t)llvm::COFF::NameSize);<br>
   SectionOneHeader->VirtualSize = 0;<br>
   SectionOneHeader-><wbr>VirtualAddress = 0;<br>
@@ -479,9 +487,9 @@ void WindowsResourceCOFFWriter::<wbr>writeFir<br>
<br>
 void WindowsResourceCOFFWriter::<wbr>writeSecondSectionHeader() {<br>
   // Write the second section header.<br>
-  Current += sizeof(llvm::object::coff_<wbr>section);<br>
-  auto *SectionTwoHeader =<br>
-      reinterpret_cast<llvm::object:<wbr>:coff_section *>(Current);<br>
+  CurrentOffset += sizeof(llvm::object::coff_<wbr>section);<br>
+  auto *SectionTwoHeader = reinterpret_cast<llvm::object:<wbr>:coff_section *>(<br>
+      BufferStart + CurrentOffset);<br>
   strncpy(SectionTwoHeader-><wbr>Name, ".rsrc$02", (size_t)llvm::COFF::NameSize);<br>
   SectionTwoHeader->VirtualSize = 0;<br>
   SectionTwoHeader-><wbr>VirtualAddress = 0;<br>
@@ -498,75 +506,85 @@ void WindowsResourceCOFFWriter::<wbr>writeSec<br>
<br>
 void WindowsResourceCOFFWriter::<wbr>writeFirstSection() {<br>
   // Write section one.<br>
-  Current += sizeof(llvm::object::coff_<wbr>section);<br>
+  CurrentOffset += sizeof(llvm::object::coff_<wbr>section);<br>
<br>
   writeDirectoryTree();<br>
   writeDirectoryStringTable();<br>
   writeFirstSectionRelocations()<wbr>;<br>
+<br>
+  CurrentOffset = alignTo(CurrentOffset, SECTION_ALIGNMENT);<br>
 }<br>
<br>
 void WindowsResourceCOFFWriter::<wbr>writeSecondSection() {<br>
   // Now write the .rsrc$02 section.<br>
   for (auto const &RawDataEntry : Data) {<br>
-    std::copy(RawDataEntry.begin()<wbr>, RawDataEntry.end(), Current);<br>
-    Current += alignTo(RawDataEntry.size(), sizeof(uint64_t));<br>
+    std::copy(RawDataEntry.begin()<wbr>, RawDataEntry.end(),<br>
+              BufferStart + CurrentOffset);<br>
+    CurrentOffset += alignTo(RawDataEntry.size(), sizeof(uint64_t));<br>
   }<br>
+<br>
+  CurrentOffset = alignTo(CurrentOffset, SECTION_ALIGNMENT);<br>
 }<br>
<br>
 void WindowsResourceCOFFWriter::<wbr>writeSymbolTable() {<br>
   // Now write the symbol table.<br>
   // First, the feat symbol.<br>
-  auto *Symbol = reinterpret_cast<llvm::object:<wbr>:coff_symbol16 *>(Current);<br>
+  auto *Symbol = reinterpret_cast<llvm::object:<wbr>:coff_symbol16 *>(BufferStart +<br>
+                                                                 CurrentOffset);<br>
   strncpy(Symbol->Name.<wbr>ShortName, "@feat.00", (size_t)llvm::COFF::NameSize);<br>
   Symbol->Value = 0x11;<br>
   Symbol->SectionNumber = 0xffff;<br>
   Symbol->Type = llvm::COFF::IMAGE_SYM_DTYPE_<wbr>NULL;<br>
   Symbol->StorageClass = llvm::COFF::IMAGE_SYM_CLASS_<wbr>STATIC;<br>
   Symbol->NumberOfAuxSymbols = 0;<br>
-  Current += sizeof(llvm::object::coff_<wbr>symbol16);<br>
+  CurrentOffset += sizeof(llvm::object::coff_<wbr>symbol16);<br>
<br>
   // Now write the .rsrc1 symbol + aux.<br>
-  Symbol = reinterpret_cast<llvm::object:<wbr>:coff_symbol16 *>(Current);<br>
+  Symbol = reinterpret_cast<llvm::object:<wbr>:coff_symbol16 *>(BufferStart +<br>
+                                                           CurrentOffset);<br>
   strncpy(Symbol->Name.<wbr>ShortName, ".rsrc$01", (size_t)llvm::COFF::NameSize);<br>
   Symbol->Value = 0;<br>
   Symbol->SectionNumber = 1;<br>
   Symbol->Type = llvm::COFF::IMAGE_SYM_DTYPE_<wbr>NULL;<br>
   Symbol->StorageClass = llvm::COFF::IMAGE_SYM_CLASS_<wbr>STATIC;<br>
   Symbol->NumberOfAuxSymbols = 1;<br>
-  Current += sizeof(llvm::object::coff_<wbr>symbol16);<br>
-  auto *Aux =<br>
-      reinterpret_cast<llvm::object:<wbr>:coff_aux_section_definition *>(Current);<br>
+  CurrentOffset += sizeof(llvm::object::coff_<wbr>symbol16);<br>
+  auto *Aux = reinterpret_cast<llvm::object:<wbr>:coff_aux_section_definition *>(<br>
+      BufferStart + CurrentOffset);<br>
   Aux->Length = SectionOneSize;<br>
   Aux->NumberOfRelocations = Data.size();<br>
   Aux->NumberOfLinenumbers = 0;<br>
   Aux->CheckSum = 0;<br>
   Aux->NumberLowPart = 0;<br>
   Aux->Selection = 0;<br>
-  Current += sizeof(llvm::object::coff_aux_<wbr>section_definition);<br>
+  CurrentOffset += sizeof(llvm::object::coff_aux_<wbr>section_definition);<br>
<br>
   // Now write the .rsrc2 symbol + aux.<br>
-  Symbol = reinterpret_cast<llvm::object:<wbr>:coff_symbol16 *>(Current);<br>
+  Symbol = reinterpret_cast<llvm::object:<wbr>:coff_symbol16 *>(BufferStart +<br>
+                                                           CurrentOffset);<br>
   strncpy(Symbol->Name.<wbr>ShortName, ".rsrc$02", (size_t)llvm::COFF::NameSize);<br>
   Symbol->Value = 0;<br>
   Symbol->SectionNumber = 2;<br>
   Symbol->Type = llvm::COFF::IMAGE_SYM_DTYPE_<wbr>NULL;<br>
   Symbol->StorageClass = llvm::COFF::IMAGE_SYM_CLASS_<wbr>STATIC;<br>
   Symbol->NumberOfAuxSymbols = 1;<br>
-  Current += sizeof(llvm::object::coff_<wbr>symbol16);<br>
-  Aux = reinterpret_cast<llvm::object:<wbr>:coff_aux_section_definition *>(Current);<br>
+  CurrentOffset += sizeof(llvm::object::coff_<wbr>symbol16);<br>
+  Aux = reinterpret_cast<llvm::object:<wbr>:coff_aux_section_definition *>(<br>
+      BufferStart + CurrentOffset);<br>
   Aux->Length = SectionTwoSize;<br>
   Aux->NumberOfRelocations = 0;<br>
   Aux->NumberOfLinenumbers = 0;<br>
   Aux->CheckSum = 0;<br>
   Aux->NumberLowPart = 0;<br>
   Aux->Selection = 0;<br>
-  Current += sizeof(llvm::object::coff_aux_<wbr>section_definition);<br>
+  CurrentOffset += sizeof(llvm::object::coff_aux_<wbr>section_definition);<br>
<br>
   // Now write a symbol for each relocation.<br>
   for (unsigned i = 0; i < Data.size(); i++) {<br>
     char RelocationName[9];<br>
     sprintf(RelocationName, "$R%06X", DataOffsets[i]);<br>
-    Symbol = reinterpret_cast<llvm::object:<wbr>:coff_symbol16 *>(Current);<br>
+    Symbol = reinterpret_cast<llvm::object:<wbr>:coff_symbol16 *>(BufferStart +<br>
+                                                             CurrentOffset);<br>
     strncpy(Symbol->Name.<wbr>ShortName, RelocationName,<br>
             (size_t)llvm::COFF::NameSize);<br>
     Symbol->Value = DataOffsets[i];<br>
@@ -574,14 +592,15 @@ void WindowsResourceCOFFWriter::<wbr>writeSym<br>
     Symbol->Type = llvm::COFF::IMAGE_SYM_DTYPE_<wbr>NULL;<br>
     Symbol->StorageClass = llvm::COFF::IMAGE_SYM_CLASS_<wbr>STATIC;<br>
     Symbol->NumberOfAuxSymbols = 0;<br>
-    Current += sizeof(llvm::object::coff_<wbr>symbol16);<br>
+    CurrentOffset += sizeof(llvm::object::coff_<wbr>symbol16);<br>
   }<br>
 }<br>
<br>
 void WindowsResourceCOFFWriter::<wbr>writeStringTable() {<br>
   // Just 4 null bytes for the string table.<br>
-  auto COFFStringTable = reinterpret_cast<void *>(Current);<br>
-  memset(COFFStringTable, 0, 4);<br>
+  auto COFFStringTable =<br>
+      reinterpret_cast<uint32_t *>(BufferStart + CurrentOffset);<br>
+  *COFFStringTable = 0;<br>
 }<br>
<br>
 void WindowsResourceCOFFWriter::<wbr>writeDirectoryTree() {<br>
@@ -599,8 +618,8 @@ void WindowsResourceCOFFWriter::<wbr>writeDir<br>
   while (!Queue.empty()) {<br>
     auto CurrentNode = Queue.front();<br>
     Queue.pop();<br>
-    auto *Table =<br>
-        reinterpret_cast<llvm::object:<wbr>:coff_resource_dir_table *>(Current);<br>
+    auto *Table = reinterpret_cast<llvm::object:<wbr>:coff_resource_dir_table *>(<br>
+        BufferStart + CurrentOffset);<br>
     Table->Characteristics = CurrentNode-><wbr>getCharacteristics();<br>
     Table->TimeDateStamp = 0;<br>
     Table->MajorVersion = CurrentNode->getMajorVersion()<wbr>;<br>
@@ -609,13 +628,13 @@ void WindowsResourceCOFFWriter::<wbr>writeDir<br>
     auto &StringChildren = CurrentNode-><wbr>getStringChildren();<br>
     Table->NumberOfNameEntries = StringChildren.size();<br>
     Table->NumberOfIDEntries = IDChildren.size();<br>
-    Current += sizeof(llvm::object::coff_<wbr>resource_dir_table);<br>
+    CurrentOffset += sizeof(llvm::object::coff_<wbr>resource_dir_table);<br>
     CurrentRelativeOffset += sizeof(llvm::object::coff_<wbr>resource_dir_table);<br>
<br>
     // Write the directory entries immediately following each directory table.<br>
     for (auto const &Child : StringChildren) {<br>
-      auto *Entry =<br>
-          reinterpret_cast<llvm::object:<wbr>:coff_resource_dir_entry *>(Current);<br>
+      auto *Entry = reinterpret_cast<llvm::object:<wbr>:coff_resource_dir_entry *>(<br>
+          BufferStart + CurrentOffset);<br>
       Entry->Identifier.NameOffset =<br>
           StringTableOffsets[Child.<wbr>second->getStringIndex()];<br>
       if (Child.second-><wbr>checkIsDataNode()) {<br>
@@ -630,12 +649,12 @@ void WindowsResourceCOFFWriter::<wbr>writeDir<br>
                                sizeof(llvm::object::coff_<wbr>resource_dir_entry);<br>
         Queue.push(Child.second.get())<wbr>;<br>
       }<br>
-      Current += sizeof(llvm::object::coff_<wbr>resource_dir_entry);<br>
+      CurrentOffset += sizeof(llvm::object::coff_<wbr>resource_dir_entry);<br>
       CurrentRelativeOffset += sizeof(llvm::object::coff_<wbr>resource_dir_entry);<br>
     }<br>
     for (auto const &Child : IDChildren) {<br>
-      auto *Entry =<br>
-          reinterpret_cast<llvm::object:<wbr>:coff_resource_dir_entry *>(Current);<br>
+      auto *Entry = reinterpret_cast<llvm::object:<wbr>:coff_resource_dir_entry *>(<br>
+          BufferStart + CurrentOffset);<br>
       Entry->Identifier.ID = Child.first;<br>
       if (Child.second-><wbr>checkIsDataNode()) {<br>
         Entry->Offset.DataEntryOffset = NextLevelOffset;<br>
@@ -649,7 +668,7 @@ void WindowsResourceCOFFWriter::<wbr>writeDir<br>
                                sizeof(llvm::object::coff_<wbr>resource_dir_entry);<br>
         Queue.push(Child.second.get())<wbr>;<br>
       }<br>
-      Current += sizeof(llvm::object::coff_<wbr>resource_dir_entry);<br>
+      CurrentOffset += sizeof(llvm::object::coff_<wbr>resource_dir_entry);<br>
       CurrentRelativeOffset += sizeof(llvm::object::coff_<wbr>resource_dir_entry);<br>
     }<br>
   }<br>
@@ -657,14 +676,14 @@ void WindowsResourceCOFFWriter::<wbr>writeDir<br>
   RelocationAddresses.resize(<wbr>Data.size());<br>
   // Now write all the resource data entries.<br>
   for (auto DataNodes : DataEntriesTreeOrder) {<br>
-    auto *Entry =<br>
-        reinterpret_cast<llvm::object:<wbr>:coff_resource_data_entry *>(Current);<br>
+    auto *Entry = reinterpret_cast<llvm::object:<wbr>:coff_resource_data_entry *>(<br>
+        BufferStart + CurrentOffset);<br>
     RelocationAddresses[DataNodes-<wbr>>getDataIndex()] = CurrentRelativeOffset;<br>
     Entry->DataRVA = 0; // Set to zero because it is a relocation.<br>
     Entry->DataSize = Data[DataNodes->getDataIndex()<wbr>].size();<br>
     Entry->Codepage = 0;<br>
     Entry->Reserved = 0;<br>
-    Current += sizeof(llvm::object::coff_<wbr>resource_data_entry);<br>
+    CurrentOffset += sizeof(llvm::object::coff_<wbr>resource_data_entry);<br>
     CurrentRelativeOffset += sizeof(llvm::object::coff_<wbr>resource_data_entry);<br>
   }<br>
 }<br>
@@ -673,16 +692,17 @@ void WindowsResourceCOFFWriter::<wbr>writeDir<br>
   // Now write the directory string table for .rsrc$01<br>
   uint32_t TotalStringTableSize = 0;<br>
   for (auto String : StringTable) {<br>
-    auto *LengthField = reinterpret_cast<uint16_t *>(Current);<br>
+    auto *LengthField =<br>
+        reinterpret_cast<uint16_t *>(BufferStart + CurrentOffset);<br>
     uint16_t Length = String.size();<br>
     *LengthField = Length;<br>
-    Current += sizeof(uint16_t);<br>
-    auto *Start = reinterpret_cast<UTF16 *>(Current);<br>
+    CurrentOffset += sizeof(uint16_t);<br>
+    auto *Start = reinterpret_cast<UTF16 *>(BufferStart + CurrentOffset);<br>
     std::copy(String.begin(), String.end(), Start);<br>
-    Current += Length * sizeof(UTF16);<br>
+    CurrentOffset += Length * sizeof(UTF16);<br>
     TotalStringTableSize += Length * sizeof(UTF16) + sizeof(uint16_t);<br>
   }<br>
-  Current +=<br>
+  CurrentOffset +=<br>
       alignTo(TotalStringTableSize, sizeof(uint32_t)) - TotalStringTableSize;<br>
 }<br>
<br>
@@ -693,7 +713,8 @@ void WindowsResourceCOFFWriter::<wbr>writeFir<br>
   // .rsrc section.<br>
   uint32_t NextSymbolIndex = 5;<br>
   for (unsigned i = 0; i < Data.size(); i++) {<br>
-    auto *Reloc = reinterpret_cast<llvm::object:<wbr>:coff_relocation *>(Current);<br>
+    auto *Reloc = reinterpret_cast<llvm::object:<wbr>:coff_relocation *>(<br>
+        BufferStart + CurrentOffset);<br>
     Reloc->VirtualAddress = RelocationAddresses[i];<br>
     Reloc->SymbolTableIndex = NextSymbolIndex++;<br>
     switch (MachineType) {<br>
@@ -709,7 +730,7 @@ void WindowsResourceCOFFWriter::<wbr>writeFir<br>
     default:<br>
       Reloc->Type = 0;<br>
     }<br>
-    Current += sizeof(llvm::object::coff_<wbr>relocation);<br>
+    CurrentOffset += sizeof(llvm::object::coff_<wbr>relocation);<br>
   }<br>
 }<br>
<br>
<br>
<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>
</blockquote></div><br></div>