summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavide Italiano <davide@freebsd.org>2016-07-04 19:49:55 +0000
committerDavide Italiano <davide@freebsd.org>2016-07-04 19:49:55 +0000
commitb4b68b64fdaa3d91419e8f02ce1205f2eddc2245 (patch)
treeb1f4a6d86702f511053afa5767caf860fde51651
parent991dfd7b07011df1e403dfdfee0f8904814995d7 (diff)
downloadbcm5719-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.cpp15
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())});
OpenPOWER on IntegriCloud