Source: libpmemobj-cpp Version: 1.13.0-3 Severity: normal Tags: ftbfs Hello,
tbb/onetbb transition (#1007222) is currently in the planning. During test rebuild of libtbb-dev reverse dependencies with onetbb/2021.5.0-9 in experimental, current source failed to build with the following: [ 14%] Building CXX object tests/CMakeFiles/concurrent_hash_map_tbb_insert_lookup.dir/concurrent_hash_map/concurrent_hash_map_tbb_insert_lookup.cpp.o cd /home/merkys/libpmemobj-cpp-1.13.0/obj-x86_64-linux-gnu/tests && /usr/bin/c++ -I/usr/include/valgrind -I/home/merkys/libpmemobj-cpp-1.13.0/include -I/home/merkys/libpmemobj-cpp-1.13.0/tests/common -I/home/merkys/libpmemobj-cpp-1.13.0/tests/.. -I/home/merkys/libpmemobj-cpp-1.13.0/tests/. -g -O2 -ffile-prefix-map=/home/merkys/libpmemobj-cpp-1.13.0=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -DLIBPMEMOBJ_CPP_VG_MEMCHECK_ENABLED=1 -DLIBPMEMOBJ_CPP_VG_DRD_ENABLED=1 -DLIBPMEMOBJ_CPP_VG_HELGRIND_ENABLED=1 -Wall -Wpointer-arith -Wunused-macros -Wsign-conversion -Wsign-compare -fno-common -Wno-maybe-uninitialized -std=gnu++14 -MD -MT tests/CMakeFiles/concurrent_hash_map_tbb_insert_lookup.dir/concurrent_hash_map/concurrent_hash_map_tbb_insert_lookup.cpp.o -MF CMakeFiles/concurrent_hash_map_tbb_insert_lookup.dir/concurrent_hash_map/concurrent_hash_map_tbb_insert_lookup.cpp.o.d -o CMakeFiles/concurrent_hash_map_tbb_insert_lookup.dir/concurrent_hash_map/concurrent_hash_map_tbb_insert_lookup.cpp.o -c /home/merkys/libpmemobj-cpp-1.13.0/tests/concurrent_hash_map/concurrent_hash_map_tbb_insert_lookup.cpp In file included from /home/merkys/libpmemobj-cpp-1.13.0/tests/concurrent_hash_map/../concurrent_hash_map/concurrent_hash_map_test.hpp:26, from /home/merkys/libpmemobj-cpp-1.13.0/tests/concurrent_hash_map/concurrent_hash_map_insert_lookup.cpp:9, from /home/merkys/libpmemobj-cpp-1.13.0/tests/concurrent_hash_map/concurrent_hash_map_tbb_insert_lookup.cpp:11: /home/merkys/libpmemobj-cpp-1.13.0/include/libpmemobj++/container/concurrent_hash_map.hpp: In instantiation of 'bool pmem::obj::concurrent_hash_map<Key, T, Hash, KeyEqual, MutexType, ScopedLockType>::bucket_accessor::is_writer() const [with Key = pmem::obj::p<int>; T = pmem::obj::p<int>; Hash = std::hash<pmem::obj::p<int> >; KeyEqual = std::equal_to<pmem::obj::p<int> >; MutexType = pmem::obj::experimental::v<tbb::detail::d1::spin_rw_mutex>; ScopedLockType = tbb::detail::d1::rw_scoped_lock<tbb::detail::d1::spin_rw_mutex>]': /home/merkys/libpmemobj-cpp-1.13.0/include/libpmemobj++/container/concurrent_hash_map.hpp:3235:25: required from 'bool pmem::obj::concurrent_hash_map<Key, T, Hash, KeyEqual, MutexType, ScopedLockType>::internal_erase(const K&) [with K = pmem::obj::p<int>; Key = pmem::obj::p<int>; T = pmem::obj::p<int>; Hash = std::hash<pmem::obj::p<int> >; KeyEqual = std::equal_to<pmem::obj::p<int> >; MutexType = pmem::obj::experimental::v<tbb::detail::d1::spin_rw_mutex>; ScopedLockType = tbb::detail::d1::rw_scoped_lock<tbb::detail::d1::spin_rw_mutex>]' /home/merkys/libpmemobj-cpp-1.13.0/include/libpmemobj++/container/concurrent_hash_map.hpp:2816:24: required from 'bool pmem::obj::concurrent_hash_map<Key, T, Hash, KeyEqual, MutexType, ScopedLockType>::erase(const Key&) [with Key = pmem::obj::p<int>; T = pmem::obj::p<int>; Hash = std::hash<pmem::obj::p<int> >; KeyEqual = std::equal_to<pmem::obj::p<int> >; MutexType = pmem::obj::experimental::v<tbb::detail::d1::spin_rw_mutex>; ScopedLockType = tbb::detail::d1::rw_scoped_lock<tbb::detail::d1::spin_rw_mutex>]' /home/merkys/libpmemobj-cpp-1.13.0/tests/concurrent_hash_map/../concurrent_hash_map/concurrent_hash_map_test.hpp:363:26: required from here /home/merkys/libpmemobj-cpp-1.13.0/include/libpmemobj++/container/concurrent_hash_map.hpp:1782:50: error: cannot convert 'tbb::detail::d1::rw_scoped_lock<tbb::detail::d1::spin_rw_mutex>::is_writer' from type 'bool (tbb::detail::d1::rw_scoped_lock<tbb::detail::d1::spin_rw_mutex>::)() const' to type 'bool' 1782 | return bucket_lock_type::is_writer; | ^~~~~~~~~ /home/merkys/libpmemobj-cpp-1.13.0/include/libpmemobj++/container/concurrent_hash_map.hpp: In instantiation of 'pmem::obj::concurrent_hash_map<Key, T, Hash, KeyEqual, MutexType, ScopedLockType>::bucket_accessor::bucket_accessor(pmem::obj::concurrent_hash_map<Key, T, Hash, KeyEqual, MutexType, ScopedLockType>::bucket_accessor&&) [with Key = pmem::obj::p<int>; T = pmem::obj::p<int>; Hash = std::hash<pmem::obj::p<int> >; KeyEqual = std::equal_to<pmem::obj::p<int> >; MutexType = pmem::obj::experimental::v<tbb::detail::d1::spin_rw_mutex>; ScopedLockType = tbb::detail::d1::rw_scoped_lock<tbb::detail::d1::spin_rw_mutex>]': /usr/include/c++/11/bits/stl_construct.h:119:7: required from 'void std::_Construct(_Tp*, _Args&& ...) [with _Tp = pmem::obj::concurrent_hash_map<pmem::obj::p<int>, pmem::obj::p<int>, std::hash<pmem::obj::p<int> >, std::equal_to<pmem::obj::p<int> >, pmem::obj::experimental::v<tbb::detail::d1::spin_rw_mutex>, tbb::detail::d1::rw_scoped_lock<tbb::detail::d1::spin_rw_mutex> >::bucket_accessor; _Args = {pmem::obj::concurrent_hash_map<pmem::obj::p<int>, pmem::obj::p<int>, std::hash<pmem::obj::p<int> >, std::equal_to<pmem::obj::p<int> >, pmem::obj::experimental::v<tbb::detail::d1::spin_rw_mutex>, tbb::detail::d1::rw_scoped_lock<tbb::detail::d1::spin_rw_mutex> >::bucket_accessor}]' /usr/include/c++/11/bits/stl_uninitialized.h:92:18: required from 'static _ForwardIterator std::__uninitialized_copy<_TrivialValueTypes>::__uninit_copy(_InputIterator, _InputIterator, _ForwardIterator) [with _InputIterator = std::move_iterator<pmem::obj::concurrent_hash_map<pmem::obj::p<int>, pmem::obj::p<int>, std::hash<pmem::obj::p<int> >, std::equal_to<pmem::obj::p<int> >, pmem::obj::experimental::v<tbb::detail::d1::spin_rw_mutex>, tbb::detail::d1::rw_scoped_lock<tbb::detail::d1::spin_rw_mutex> >::bucket_accessor*>; _ForwardIterator = pmem::obj::concurrent_hash_map<pmem::obj::p<int>, pmem::obj::p<int>, std::hash<pmem::obj::p<int> >, std::equal_to<pmem::obj::p<int> >, pmem::obj::experimental::v<tbb::detail::d1::spin_rw_mutex>, tbb::detail::d1::rw_scoped_lock<tbb::detail::d1::spin_rw_mutex> >::bucket_accessor*; bool _TrivialValueTypes = false]' /usr/include/c++/11/bits/stl_uninitialized.h:151:15: required from '_ForwardIterator std::uninitialized_copy(_InputIterator, _InputIterator, _ForwardIterator) [with _InputIterator = std::move_iterator<pmem::obj::concurrent_hash_map<pmem::obj::p<int>, pmem::obj::p<int>, std::hash<pmem::obj::p<int> >, std::equal_to<pmem::obj::p<int> >, pmem::obj::experimental::v<tbb::detail::d1::spin_rw_mutex>, tbb::detail::d1::rw_scoped_lock<tbb::detail::d1::spin_rw_mutex> >::bucket_accessor*>; _ForwardIterator = pmem::obj::concurrent_hash_map<pmem::obj::p<int>, pmem::obj::p<int>, std::hash<pmem::obj::p<int> >, std::equal_to<pmem::obj::p<int> >, pmem::obj::experimental::v<tbb::detail::d1::spin_rw_mutex>, tbb::detail::d1::rw_scoped_lock<tbb::detail::d1::spin_rw_mutex> >::bucket_accessor*]' /usr/include/c++/11/bits/stl_uninitialized.h:333:37: required from '_ForwardIterator std::__uninitialized_copy_a(_InputIterator, _InputIterator, _ForwardIterator, std::allocator<_Tp>&) [with _InputIterator = std::move_iterator<pmem::obj::concurrent_hash_map<pmem::obj::p<int>, pmem::obj::p<int>, std::hash<pmem::obj::p<int> >, std::equal_to<pmem::obj::p<int> >, pmem::obj::experimental::v<tbb::detail::d1::spin_rw_mutex>, tbb::detail::d1::rw_scoped_lock<tbb::detail::d1::spin_rw_mutex> >::bucket_accessor*>; _ForwardIterator = pmem::obj::concurrent_hash_map<pmem::obj::p<int>, pmem::obj::p<int>, std::hash<pmem::obj::p<int> >, std::equal_to<pmem::obj::p<int> >, pmem::obj::experimental::v<tbb::detail::d1::spin_rw_mutex>, tbb::detail::d1::rw_scoped_lock<tbb::detail::d1::spin_rw_mutex> >::bucket_accessor*; _Tp = pmem::obj::concurrent_hash_map<pmem::obj::p<int>, pmem::obj::p<int>, std::hash<pmem::obj::p<int> >, std::equal_to<pmem::obj::p<int> >, pmem::obj::experimental::v<tbb::detail::d1::spin_rw_mutex>, tbb::detail::d1::rw_scoped_lock<tbb::detail::d1::spin_rw_mutex> >::bucket_accessor]' /usr/include/c++/11/bits/stl_uninitialized.h:355:2: required from '_ForwardIterator std::__uninitialized_move_if_noexcept_a(_InputIterator, _InputIterator, _ForwardIterator, _Allocator&) [with _InputIterator = pmem::obj::concurrent_hash_map<pmem::obj::p<int>, pmem::obj::p<int>, std::hash<pmem::obj::p<int> >, std::equal_to<pmem::obj::p<int> >, pmem::obj::experimental::v<tbb::detail::d1::spin_rw_mutex>, tbb::detail::d1::rw_scoped_lock<tbb::detail::d1::spin_rw_mutex> >::bucket_accessor*; _ForwardIterator = pmem::obj::concurrent_hash_map<pmem::obj::p<int>, pmem::obj::p<int>, std::hash<pmem::obj::p<int> >, std::equal_to<pmem::obj::p<int> >, pmem::obj::experimental::v<tbb::detail::d1::spin_rw_mutex>, tbb::detail::d1::rw_scoped_lock<tbb::detail::d1::spin_rw_mutex> >::bucket_accessor*; _Allocator = std::allocator<pmem::obj::concurrent_hash_map<pmem::obj::p<int>, pmem::obj::p<int>, std::hash<pmem::obj::p<int> >, std::equal_to<pmem::obj::p<int> >, pmem::obj::experimental::v<tbb::detail::d1::spin_rw_mutex>, tbb::detail::d1::rw_scoped_lock<tbb::detail::d1::spin_rw_mutex> >::bucket_accessor>]' /usr/include/c++/11/bits/vector.tcc:474:3: required from 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(std::vector<_Tp, _Alloc>::iterator, _Args&& ...) [with _Args = {pmem::obj::concurrent_hash_map<pmem::obj::p<int>, pmem::obj::p<int>, std::hash<pmem::obj::p<int> >, std::equal_to<pmem::obj::p<int> >, pmem::obj::experimental::v<tbb::detail::d1::spin_rw_mutex>, tbb::detail::d1::rw_scoped_lock<tbb::detail::d1::spin_rw_mutex> >*&, long unsigned int&, bool}; _Tp = pmem::obj::concurrent_hash_map<pmem::obj::p<int>, pmem::obj::p<int>, std::hash<pmem::obj::p<int> >, std::equal_to<pmem::obj::p<int> >, pmem::obj::experimental::v<tbb::detail::d1::spin_rw_mutex>, tbb::detail::d1::rw_scoped_lock<tbb::detail::d1::spin_rw_mutex> >::bucket_accessor; _Alloc = std::allocator<pmem::obj::concurrent_hash_map<pmem::obj::p<int>, pmem::obj::p<int>, std::hash<pmem::obj::p<int> >, std::equal_to<pmem::obj::p<int> >, pmem::obj::experimental::v<tbb::detail::d1::spin_rw_mutex>, tbb::detail::d1::rw_scoped_lock<tbb::detail::d1::spin_rw_mutex> >::bucket_accessor>; std::vector<_Tp, _Alloc>::iterator = std::vector<pmem::obj::concurrent_hash_map<pmem::obj::p<int>, pmem::obj::p<int>, std::hash<pmem::obj::p<int> >, std::equal_to<pmem::obj::p<int> >, pmem::obj::experimental::v<tbb::detail::d1::spin_rw_mutex>, tbb::detail::d1::rw_scoped_lock<tbb::detail::d1::spin_rw_mutex> >::bucket_accessor, std::allocator<pmem::obj::concurrent_hash_map<pmem::obj::p<int>, pmem::obj::p<int>, std::hash<pmem::obj::p<int> >, std::equal_to<pmem::obj::p<int> >, pmem::obj::experimental::v<tbb::detail::d1::spin_rw_mutex>, tbb::detail::d1::rw_scoped_lock<tbb::detail::d1::spin_rw_mutex> >::bucket_accessor> >::iterator]' /usr/include/c++/11/bits/vector.tcc:121:21: required from 'void std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {pmem::obj::concurrent_hash_map<pmem::obj::p<int>, pmem::obj::p<int>, std::hash<pmem::obj::p<int> >, std::equal_to<pmem::obj::p<int> >, pmem::obj::experimental::v<tbb::detail::d1::spin_rw_mutex>, tbb::detail::d1::rw_scoped_lock<tbb::detail::d1::spin_rw_mutex> >*&, long unsigned int&, bool}; _Tp = pmem::obj::concurrent_hash_map<pmem::obj::p<int>, pmem::obj::p<int>, std::hash<pmem::obj::p<int> >, std::equal_to<pmem::obj::p<int> >, pmem::obj::experimental::v<tbb::detail::d1::spin_rw_mutex>, tbb::detail::d1::rw_scoped_lock<tbb::detail::d1::spin_rw_mutex> >::bucket_accessor; _Alloc = std::allocator<pmem::obj::concurrent_hash_map<pmem::obj::p<int>, pmem::obj::p<int>, std::hash<pmem::obj::p<int> >, std::equal_to<pmem::obj::p<int> >, pmem::obj::experimental::v<tbb::detail::d1::spin_rw_mutex>, tbb::detail::d1::rw_scoped_lock<tbb::detail::d1::spin_rw_mutex> >::bucket_accessor>]' /home/merkys/libpmemobj-cpp-1.13.0/include/libpmemobj++/container/concurrent_hash_map.hpp:2935:20: required from 'pmem::obj::concurrent_hash_map<Key, T, Hash, KeyEqual, MutexType, ScopedLockType>::bucket* pmem::obj::concurrent_hash_map<Key, T, Hash, KeyEqual, MutexType, ScopedLockType>::mutex_vector::push_and_try_lock(pmem::obj::concurrent_hash_map<Key, T, Hash, KeyEqual, MutexType, ScopedLockType>*, pmem::obj::concurrent_hash_map<Key, T, Hash, KeyEqual, MutexType, ScopedLockType>::hashcode_type) [with Key = pmem::obj::p<int>; T = pmem::obj::p<int>; Hash = std::hash<pmem::obj::p<int> >; KeyEqual = std::equal_to<pmem::obj::p<int> >; MutexType = pmem::obj::experimental::v<tbb::detail::d1::spin_rw_mutex>; ScopedLockType = tbb::detail::d1::rw_scoped_lock<tbb::detail::d1::spin_rw_mutex>; pmem::obj::concurrent_hash_map<Key, T, Hash, KeyEqual, MutexType, ScopedLockType>::bucket = pmem::obj::concurrent_hash_map_internal::hash_map_base<pmem::obj::p<int>, pmem::obj::p<int>, pmem::obj::experimental::v<tbb::detail::d1::spin_rw_mutex>, tbb::detail::d1::rw_scoped_lock<tbb::detail::d1::spin_rw_mutex> >::bucket; pmem::obj::concurrent_hash_map<Key, T, Hash, KeyEqual, MutexType, ScopedLockType>::hashcode_type = long unsigned int]' /home/merkys/libpmemobj-cpp-1.13.0/include/libpmemobj++/container/concurrent_hash_map.hpp:2876:36: required from 'pobj_defrag_result pmem::obj::concurrent_hash_map<Key, T, Hash, KeyEqual, MutexType, ScopedLockType>::defragment(double, double) [with Key = pmem::obj::p<int>; T = pmem::obj::p<int>; Hash = std::hash<pmem::obj::p<int> >; KeyEqual = std::equal_to<pmem::obj::p<int> >; MutexType = pmem::obj::experimental::v<tbb::detail::d1::spin_rw_mutex>; ScopedLockType = tbb::detail::d1::rw_scoped_lock<tbb::detail::d1::spin_rw_mutex>]' /home/merkys/libpmemobj-cpp-1.13.0/tests/concurrent_hash_map/../concurrent_hash_map/concurrent_hash_map_test.hpp:454:19: required from here /home/merkys/libpmemobj-cpp-1.13.0/include/libpmemobj++/container/concurrent_hash_map.hpp:1730:43: error: 'mutex' is not a member of 'pmem::obj::concurrent_hash_map<pmem::obj::p<int>, pmem::obj::p<int>, std::hash<pmem::obj::p<int> >, std::equal_to<pmem::obj::p<int> >, pmem::obj::experimental::v<tbb::detail::d1::spin_rw_mutex>, tbb::detail::d1::rw_scoped_lock<tbb::detail::d1::spin_rw_mutex> >::bucket_lock_type' {aka 'tbb::detail::d1::rw_scoped_lock<tbb::detail::d1::spin_rw_mutex>'} 1730 | bucket_lock_type::mutex = b.bucket_lock_type::mutex; | ^~~~~ /home/merkys/libpmemobj-cpp-1.13.0/include/libpmemobj++/container/concurrent_hash_map.hpp:1730:71: error: 'class tbb::detail::d1::rw_scoped_lock<tbb::detail::d1::spin_rw_mutex>' has no member named 'mutex'; did you mean 'm_mutex'? 1730 | bucket_lock_type::mutex = b.bucket_lock_type::mutex; | ~~~~~~~~~~~~~~~~~~~~^~~~~ | m_mutex /home/merkys/libpmemobj-cpp-1.13.0/include/libpmemobj++/container/concurrent_hash_map.hpp:1731:43: error: invalid use of member function 'bool tbb::detail::d1::rw_scoped_lock<Mutex>::is_writer() const [with Mutex = tbb::detail::d1::spin_rw_mutex]' (did you forget the '()' ?) 1731 | bucket_lock_type::is_writer = | ^~~~~~~~~ | () /home/merkys/libpmemobj-cpp-1.13.0/include/libpmemobj++/container/concurrent_hash_map.hpp:1734:45: error: 'class tbb::detail::d1::rw_scoped_lock<tbb::detail::d1::spin_rw_mutex>' has no member named 'mutex'; did you mean 'm_mutex'? 1734 | b.bucket_lock_type::mutex = nullptr; | ~~~~~~~~~~~~~~~~~~~~^~~~~ | m_mutex /home/merkys/libpmemobj-cpp-1.13.0/include/libpmemobj++/container/concurrent_hash_map.hpp:1735:45: error: invalid use of member function 'bool tbb::detail::d1::rw_scoped_lock<Mutex>::is_writer() const [with Mutex = tbb::detail::d1::spin_rw_mutex]' (did you forget the '()' ?) 1735 | b.bucket_lock_type::is_writer = false; | ~~~~~~~~~~~~~~~~~~~~^~~~~~~~~ | () make[3]: *** [tests/CMakeFiles/concurrent_hash_map_tbb_insert_lookup.dir/build.make:79: tests/CMakeFiles/concurrent_hash_map_tbb_insert_lookup.dir/concurrent_hash_map/concurrent_hash_map_tbb_insert_lookup.cpp.o] Error 1 Andrius