[lld] r274518 - [OutputSection] Work around GCC not being able to deduce auto.
Davide Italiano via llvm-commits
llvm-commits at lists.llvm.org
Wed Jul 6 10:49:15 PDT 2016
r274643. Thanks!
On Wed, Jul 6, 2016 at 10:35 AM, Rui Ueyama <ruiu at google.com> wrote:
> On Mon, Jul 4, 2016 at 12:49 PM, Davide Italiano via llvm-commits
> <llvm-commits at lists.llvm.org> wrote:
>>
>> Author: davide
>> Date: Mon Jul 4 14:49:55 2016
>> New Revision: 274518
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=274518&view=rev
>> Log:
>> [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
>>
>> Modified:
>> lld/trunk/ELF/OutputSections.cpp
>>
>> Modified: lld/trunk/ELF/OutputSections.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/OutputSections.cpp?rev=274518&r1=274517&r2=274518&view=diff
>>
>> ==============================================================================
>> --- lld/trunk/ELF/OutputSections.cpp (original)
>> +++ lld/trunk/ELF/OutputSections.cpp Mon Jul 4 14:49:55 2016
>> @@ -576,13 +576,18 @@ void GnuHashTableSection<ELFT>::writeHas
>> 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) {
>
>
> 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.
>
>> SymbolBody *B = I->first;
>> size_t StrOff = I->second;
>> Symbols.push_back({B, StrOff, hashGnu(B->getName())});
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
>
--
Davide
"There are no solved problems; there are only problems that are more
or less solved" -- Henri Poincare
More information about the llvm-commits
mailing list