[libcxx-commits] [libcxx] [libc++] Improve the performance of std::make_heap a bit (PR #154092)

Martin Storsjö via libcxx-commits libcxx-commits at lists.llvm.org
Tue Sep 9 04:25:49 PDT 2025


mstorsjo wrote:

This breaks compilation of QtDeclarative:
```
In file included from /home/martin/code/vlc/contrib/build-i686/qtdeclarative/src/qml/jsruntime/qv4sequenceobject.cpp:4:
In file included from /home/martin/code/vlc/contrib/i686-w64-mingw32/include/QtCore/qsequentialiterable.h:7:
In file included from /home/martin/code/vlc/contrib/i686-w64-mingw32/include/QtCore/qiterable.h:9:
In file included from /home/martin/code/vlc/contrib/i686-w64-mingw32/include/QtCore/qmetacontainer.h:8:
In file included from /home/martin/code/vlc/contrib/i686-w64-mingw32/include/QtCore/qcompare.h:632:
In file included from /home/martin/code/vlc/contrib/i686-w64-mingw32/include/QtCore/qcomparehelpers.h:27:
In file included from /home/martin/clang-nightly/i686-w64-mingw32/include/c++/v1/functional:557:
In file included from /home/martin/clang-nightly/i686-w64-mingw32/include/c++/v1/__functional/boyer_moore_searcher.h:24:
In file included from /home/martin/clang-nightly/i686-w64-mingw32/include/c++/v1/array:566:
In file included from /home/martin/clang-nightly/i686-w64-mingw32/include/c++/v1/algorithm:1875:
In file included from /home/martin/clang-nightly/i686-w64-mingw32/include/c++/v1/__algorithm/make_heap.h:16:
/home/martin/clang-nightly/i686-w64-mingw32/include/c++/v1/__algorithm/sift_down.h:49:46: error: type 'QTaggedIterator<QTaggedIterator<QSequentialIterator, void>, std::random_access_iterator_tag>' does not provide a subscript operator
   49 |   } else if ((__child + 1) < __len && __comp(__first[__child], __first[__child + 1])) {
      |                                              ^~~~~~~ ~~~~~~~
/home/martin/clang-nightly/i686-w64-mingw32/include/c++/v1/__algorithm/make_heap.h:49:12: note: in instantiation of function template specialization 'std::__sift_down<std::_ClassicAlgPolicy, false, QV4::SequenceCompareFunctor &, QTaggedIterator<QTaggedIterator<QSequentialIterator, void>, std::random_access_iterator_tag>>' requested here
   49 |       std::__sift_down<_AlgPolicy, __assume_both_children>(__first, __comp_ref, __sift_down_n, __start);
      |            ^
/home/martin/clang-nightly/i686-w64-mingw32/include/c++/v1/__algorithm/partial_sort.h:41:8: note: in instantiation of function template specialization 'std::__make_heap<std::_ClassicAlgPolicy, QV4::SequenceCompareFunctor &, QTaggedIterator<QTaggedIterator<QSequentialIterator, void>, std::random_access_iterator_tag>>' requested here
   41 |   std::__make_heap<_AlgPolicy>(__first, __middle, __comp);
      |        ^ 
/home/martin/clang-nightly/i686-w64-mingw32/include/c++/v1/__algorithm/partial_sort.h:65:12: note: in instantiation of function template specialization 'std::__partial_sort_impl<std::_ClassicAlgPolicy, QV4::SequenceCompareFunctor &, QTaggedIterator<QTaggedIterator<QSequentialIterator, void>, std::random_access_iterator_tag>, QTaggedIterator<QTaggedIterator<QSequentialIterator, void>, std::random_access_iterator_tag>>' requested here
   65 |       std::__partial_sort_impl<_AlgPolicy>(__first, __middle, __last, static_cast<__comp_ref_type<_Compare> >(__comp));
      |            ^
/home/martin/clang-nightly/i686-w64-mingw32/include/c++/v1/__algorithm/sort.h:934:10: note: in instantiation of function template specialization 'std::__partial_sort<std::_ClassicAlgPolicy, QV4::SequenceCompareFunctor, QTaggedIterator<QTaggedIterator<QSequentialIterator, void>, std::random_access_iterator_tag>, QTaggedIterator<QTaggedIterator<QSequentialIterator, void>, std::random_access_iterator_tag>>' requested here
  934 |     std::__partial_sort<_AlgPolicy>(
      |          ^   
/home/martin/clang-nightly/i686-w64-mingw32/include/c++/v1/__algorithm/sort.h:945:8: note: in instantiation of function template specialization 'std::__sort_impl<std::_ClassicAlgPolicy, QTaggedIterator<QTaggedIterator<QSequentialIterator, void>, std::random_access_iterator_tag>, QV4::SequenceCompareFunctor>' requested here
  945 |   std::__sort_impl<_ClassicAlgPolicy>(std::move(__first), std::move(__last), __comp);
      |        ^
/home/martin/code/vlc/contrib/build-i686/qtdeclarative/src/qml/jsruntime/qv4sequenceobject.cpp:54:14: note: in instantiation of function template specialization 'std::sort<QTaggedIterator<QTaggedIterator<QSequentialIterator, void>, std::random_access_iterator_tag>, QV4::SequenceCompareFunctor>' requested here
   54 |         std::sort(QSequentialIterable::RandomAccessIterator(iterable.mutableBegin()),
      |              ^
/home/martin/code/vlc/contrib/build-i686/qtdeclarative/src/qml/jsruntime/qv4sequenceobject.cpp:453:9: note: in instantiation of function template specialization 'QV4::sortSequence<QV4::SequenceCompareFunctor>' requested here
  453 |         sortSequence(this, SequenceCompareFunctor(f->engine(), argv[0]));
      |         ^
In file included from /home/martin/code/vlc/contrib/build-i686/qtdeclarative/src/qml/jsruntime/qv4sequenceobject.cpp:4:
In file included from /home/martin/code/vlc/contrib/i686-w64-mingw32/include/QtCore/qsequentialiterable.h:7:
In file included from /home/martin/code/vlc/contrib/i686-w64-mingw32/include/QtCore/qiterable.h:9:
In file included from /home/martin/code/vlc/contrib/i686-w64-mingw32/include/QtCore/qmetacontainer.h:8:
In file included from /home/martin/code/vlc/contrib/i686-w64-mingw32/include/QtCore/qcompare.h:632:
In file included from /home/martin/code/vlc/contrib/i686-w64-mingw32/include/QtCore/qcomparehelpers.h:27:
In file included from /home/martin/clang-nightly/i686-w64-mingw32/include/c++/v1/functional:557:
In file included from /home/martin/clang-nightly/i686-w64-mingw32/include/c++/v1/__functional/boyer_moore_searcher.h:24:
In file included from /home/martin/clang-nightly/i686-w64-mingw32/include/c++/v1/array:566:
In file included from /home/martin/clang-nightly/i686-w64-mingw32/include/c++/v1/algorithm:1875:
In file included from /home/martin/clang-nightly/i686-w64-mingw32/include/c++/v1/__algorithm/make_heap.h:16:
/home/martin/clang-nightly/i686-w64-mingw32/include/c++/v1/__algorithm/sift_down.h:55:14: error: type 'QTaggedIterator<QTaggedIterator<QSequentialIterator, void>, std::random_access_iterator_tag>' does not provide a subscript operator
   55 |   if (__comp(__first[__child], __first[__start]))
      |              ^~~~~~~ ~~~~~~~
/home/martin/clang-nightly/i686-w64-mingw32/include/c++/v1/__algorithm/sift_down.h:62:5: error: type 'QTaggedIterator<QTaggedIterator<QSequentialIterator, void>, std::random_access_iterator_tag>' does not provide a subscript operator
   62 |     __first[__start] = _Ops::__iter_move(__first + __child);
      |     ^~~~~~~ ~~~~~~~
/home/martin/clang-nightly/i686-w64-mingw32/include/c++/v1/__algorithm/sift_down.h:73:48: error: type 'QTaggedIterator<QTaggedIterator<QSequentialIterator, void>, std::random_access_iterator_tag>' does not provide a subscript operator
   73 |     } else if ((__child + 1) < __len && __comp(__first[__child], __first[__child + 1])) {
      |                                                ^~~~~~~ ~~~~~~~
/home/martin/clang-nightly/i686-w64-mingw32/include/c++/v1/__algorithm/sift_down.h:80:3: error: type 'QTaggedIterator<QTaggedIterator<QSequentialIterator, void>, std::random_access_iterator_tag>' does not provide a subscript operator
   80 |   __first[__start] = std::move(__top);
      |   ^~~~~~~ ~~~~~~~
```
(plus many more errors similar to these)

https://github.com/llvm/llvm-project/pull/154092


More information about the libcxx-commits mailing list