[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