diff options
| author | Davide Italiano <davide@freebsd.org> | 2016-07-04 19:49:55 +0000 |
|---|---|---|
| committer | Davide Italiano <davide@freebsd.org> | 2016-07-04 19:49:55 +0000 |
| commit | b4b68b64fdaa3d91419e8f02ce1205f2eddc2245 (patch) | |
| tree | b1f4a6d86702f511053afa5767caf860fde51651 | |
| parent | 991dfd7b07011df1e403dfdfee0f8904814995d7 (diff) | |
| download | bcm5719-llvm-b4b68b64fdaa3d91419e8f02ce1205f2eddc2245.tar.gz bcm5719-llvm-b4b68b64fdaa3d91419e8f02ce1205f2eddc2245.zip | |
[OutputSection] Work around GCC not being able to deduce auto.
The build otherwise fails with:
[ 39%] Building CXX object
tools/lld/ELF/CMakeFiles/lldELF.dir/OutputSections.cpp.o
/export/gnu/import/git/llvm/tools/lld/ELF/OutputSections.cpp: In
member function ‘void
lld::elf::GnuHashTableSection<ELFT>::addSymbols(std::vector<std::pair<lld::elf::SymbolBody*,
long unsigned int> >&)’:
/export/gnu/import/git/llvm/tools/lld/ELF/OutputSections.cpp:585:8:
error: inconsistent deduction for ‘auto’: ‘auto’ and then
‘__gnu_cxx::__normal_iterator<std::pair<lld::elf::SymbolBody*, long
unsigned int>*, std::vector<std::pair<lld::elf::SymbolBody*, long
unsigned int> > >’
Reported by: H. J. Liu
llvm-svn: 274518
| -rw-r--r-- | lld/ELF/OutputSections.cpp | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/lld/ELF/OutputSections.cpp b/lld/ELF/OutputSections.cpp index 32d48c312b2..325cae615de 100644 --- a/lld/ELF/OutputSections.cpp +++ b/lld/ELF/OutputSections.cpp @@ -576,13 +576,18 @@ void GnuHashTableSection<ELFT>::writeHashTable(uint8_t *Buf) { template <class ELFT> void GnuHashTableSection<ELFT>::addSymbols( std::vector<std::pair<SymbolBody *, size_t>> &V) { - auto Mid = std::stable_partition(V.begin(), V.end(), - [](std::pair<SymbolBody *, size_t> &P) { - return P.first->isUndefined(); - }); + // Ideally this will just be 'auto' but GCC 6.1 is not able + // to deduce it correctly. + std::vector<std::pair<SymbolBody *, size_t>>::iterator Mid = + std::stable_partition(V.begin(), V.end(), + [](std::pair<SymbolBody *, size_t> &P) { + return P.first->isUndefined(); + }); if (Mid == V.end()) return; - for (auto I = Mid, E = V.end(); I != E; ++I) { + for (std::vector<std::pair<SymbolBody *, size_t>>::iterator I = Mid, + E = V.end(); + I != E; ++I) { SymbolBody *B = I->first; size_t StrOff = I->second; Symbols.push_back({B, StrOff, hashGnu(B->getName())}); |

