<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Mon, Jul 4, 2016 at 12:49 PM, Davide Italiano 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: davide<br>
Date: Mon Jul  4 14:49:55 2016<br>
New Revision: 274518<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=274518&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=274518&view=rev</a><br>
Log:<br>
[OutputSection] Work around GCC not being able to deduce auto.<br>
<br>
The build otherwise fails with:<br>
[ 39%] Building CXX object<br>
tools/lld/ELF/CMakeFiles/lldELF.dir/OutputSections.cpp.o<br>
/export/gnu/import/git/llvm/tools/lld/ELF/OutputSections.cpp: In<br>
member function ‘void<br>
lld::elf::GnuHashTableSection<ELFT>::addSymbols(std::vector<std::pair<lld::elf::SymbolBody*,<br>
long unsigned int> >&)’:<br>
/export/gnu/import/git/llvm/tools/lld/ELF/OutputSections.cpp:585:8:<br>
error: inconsistent deduction for ‘auto’: ‘auto’ and then<br>
‘__gnu_cxx::__normal_iterator<std::pair<lld::elf::SymbolBody*, long<br>
unsigned int>*, std::vector<std::pair<lld::elf::SymbolBody*, long<br>
unsigned int> > >’<br>
<br>
Reported by:  H. J. Liu<br>
<br>
Modified:<br>
    lld/trunk/ELF/OutputSections.cpp<br>
<br>
Modified: lld/trunk/ELF/OutputSections.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/OutputSections.cpp?rev=274518&r1=274517&r2=274518&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/OutputSections.cpp?rev=274518&r1=274517&r2=274518&view=diff</a><br>
==============================================================================<br>
--- lld/trunk/ELF/OutputSections.cpp (original)<br>
+++ lld/trunk/ELF/OutputSections.cpp Mon Jul  4 14:49:55 2016<br>
@@ -576,13 +576,18 @@ void GnuHashTableSection<ELFT>::writeHas<br>
 template <class ELFT><br>
 void GnuHashTableSection<ELFT>::addSymbols(<br>
     std::vector<std::pair<SymbolBody *, size_t>> &V) {<br>
-  auto Mid = std::stable_partition(V.begin(), V.end(),<br>
-                                   [](std::pair<SymbolBody *, size_t> &P) {<br>
-                                     return P.first->isUndefined();<br>
-                                   });<br>
+  // Ideally this will just be 'auto' but GCC 6.1 is not able<br>
+  // to deduce it correctly.<br>
+  std::vector<std::pair<SymbolBody *, size_t>>::iterator Mid =<br>
+      std::stable_partition(V.begin(), V.end(),<br>
+                            [](std::pair<SymbolBody *, size_t> &P) {<br>
+                              return P.first->isUndefined();<br>
+                            });<br>
   if (Mid == V.end())<br>
     return;<br>
-  for (auto I = Mid, E = V.end(); I != E; ++I) {<br>
+  for (std::vector<std::pair<SymbolBody *, size_t>>::iterator I = Mid,<br>
+                                                              E = V.end();<br>
+       I != E; ++I) {<br></blockquote><div><br></div><div>Did you have to expand `auto` for this for-loop? Since we taught the compiler of the type of `Mid` above, it seems trivial to deduce the type in this context.</div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
     SymbolBody *B = I->first;<br>
     size_t StrOff = I->second;<br>
     Symbols.push_back({B, StrOff, hashGnu(B->getName())});<br>
<br>
<br>
_______________________________________________<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/mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br></div></div>