<div dir="ltr">I don't know what the lld zeitgeist is on out-params, but if they prefer to return pairs, you can use llvm::tie():<div>Elf_Phdr *phdr;</div><div>bool allocatedNew;</div><div><div>llvm::tie(phdr, allocatedNew) = thingReturningPair();</div>
</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Thu, May 16, 2013 at 1:58 PM, Rui Ueyama <span dir="ltr"><<a href="mailto:ruiu@google.com" target="_blank">ruiu@google.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: ruiu<br>
Date: Thu May 16 12:58:14 2013<br>
New Revision: 182033<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=182033&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=182033&view=rev</a><br>
Log:<br>
[lld] Do not create a temporary pair.<br>
<br>
Modified:<br>
    lld/trunk/lib/ReaderWriter/ELF/HeaderChunks.h<br>
<br>
Modified: lld/trunk/lib/ReaderWriter/ELF/HeaderChunks.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/HeaderChunks.h?rev=182033&r1=182032&r2=182033&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/HeaderChunks.h?rev=182033&r1=182032&r2=182033&view=diff</a><br>

==============================================================================<br>
--- lld/trunk/lib/ReaderWriter/ELF/HeaderChunks.h (original)<br>
+++ lld/trunk/lib/ReaderWriter/ELF/HeaderChunks.h Thu May 16 12:58:14 2013<br>
@@ -163,20 +163,18 @@ public:<br>
   }<br>
<br>
 private:<br>
-  std::pair<Elf_Phdr *, bool> allocateProgramHeader() {<br>
+  Elf_Phdr *allocateProgramHeader(bool &allocatedNew) {<br>
     Elf_Phdr *phdr;<br>
-    bool ret = false;<br>
     if (_phi == _ph.end()) {<br>
       phdr = new (_allocator) Elf_Phdr;<br>
       _ph.push_back(phdr);<br>
       _phi = _ph.end();<br>
-      ret = true;<br>
+      allocatedNew = true;<br>
     } else {<br>
       phdr = (*_phi);<br>
       ++_phi;<br>
     }<br>
-<br>
-    return std::make_pair(phdr, ret);<br>
+    return phdr;<br>
   }<br>
<br>
   std::vector<Elf_Phdr *> _ph;<br>
@@ -191,17 +189,15 @@ bool ProgramHeader<ELFT>::addSegment(Seg<br>
   // just pick the values directly from the segment as there<br>
   // wouldnt be any slices within that<br>
   if (segment->segmentType() != llvm::ELF::PT_LOAD) {<br>
-    auto phdr = allocateProgramHeader();<br>
-    if (phdr.second)<br>
-      allocatedNew = true;<br>
-    phdr.first->p_type = segment->segmentType();<br>
-    phdr.first->p_offset = segment->fileOffset();<br>
-    phdr.first->p_vaddr = segment->virtualAddr();<br>
-    phdr.first->p_paddr = segment->virtualAddr();<br>
-    phdr.first->p_filesz = segment->fileSize();<br>
-    phdr.first->p_memsz = segment->memSize();<br>
-    phdr.first->p_flags = segment->flags();<br>
-    phdr.first->p_align = segment->align2();<br>
+    Elf_Phdr *phdr = allocateProgramHeader(allocatedNew);<br>
+    phdr->p_type = segment->segmentType();<br>
+    phdr->p_offset = segment->fileOffset();<br>
+    phdr->p_vaddr = segment->virtualAddr();<br>
+    phdr->p_paddr = segment->virtualAddr();<br>
+    phdr->p_filesz = segment->fileSize();<br>
+    phdr->p_memsz = segment->memSize();<br>
+    phdr->p_flags = segment->flags();<br>
+    phdr->p_align = segment->align2();<br>
     this->_fsize = fileSize();<br>
     this->_msize = this->_fsize;<br>
     return allocatedNew;<br>
@@ -209,17 +205,15 @@ bool ProgramHeader<ELFT>::addSegment(Seg<br>
   // For all other segments, use the slice<br>
   // to derive program headers<br>
   for (auto slice : segment->slices()) {<br>
-    auto phdr = allocateProgramHeader();<br>
-    if (phdr.second)<br>
-      allocatedNew = true;<br>
-    phdr.first->p_type = segment->segmentType();<br>
-    phdr.first->p_offset = slice->fileOffset();<br>
-    phdr.first->p_vaddr = slice->virtualAddr();<br>
-    phdr.first->p_paddr = slice->virtualAddr();<br>
-    phdr.first->p_filesz = slice->fileSize();<br>
-    phdr.first->p_memsz = slice->memSize();<br>
-    phdr.first->p_flags = segment->flags();<br>
-    phdr.first->p_align = (phdr.first->p_type == llvm::ELF::PT_LOAD) ?<br>
+    Elf_Phdr *phdr = allocateProgramHeader(allocatedNew);<br>
+    phdr->p_type = segment->segmentType();<br>
+    phdr->p_offset = slice->fileOffset();<br>
+    phdr->p_vaddr = slice->virtualAddr();<br>
+    phdr->p_paddr = slice->virtualAddr();<br>
+    phdr->p_filesz = slice->fileSize();<br>
+    phdr->p_memsz = slice->memSize();<br>
+    phdr->p_flags = segment->flags();<br>
+    phdr->p_align = (phdr->p_type == llvm::ELF::PT_LOAD) ?<br>
                           segment->pageSize() : slice->align2();<br>
   }<br>
   this->_fsize = fileSize();<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br></div>