Project

General

Profile

Actions

Bug #54279

closed

c++20: compilation failures around BitVector::NoInitAllocator

Added by Casey Bodley about 2 years ago. Updated almost 2 years ago.

Status:
Resolved
Priority:
Normal
Assignee:
Target version:
-
% Done:

0%

Source:
Tags:
Backport:
octopus,pacific
Regression:
No
Severity:
3 - minor
Reviewed:
Affected Versions:
ceph-qa-suite:
Pull request ID:
Crash signature (v1):
Crash signature (v2):

Description

NoInitAllocator inherits from std::allocator<__u32>. c++20 removed a lot of deprecated things from std::allocator (see https://en.cppreference.com/w/cpp/memory/allocator). we should probably be specializing std::allocator_traits for NoInitAllocator now, rather than inheriting from std::allocator

built with gcc 11.2.1, with c++20 enabled in cmake:

diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 1157df00a19..b20e43b6bbb 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -211,8 +211,8 @@ if(HAVE_INTEL)
   endif()
 endif()

-# require c++17
-set(CMAKE_CXX_STANDARD 17)
+# require c++20
+set(CMAKE_CXX_STANDARD 20)
 set(CMAKE_CXX_EXTENSIONS OFF)
 set(CMAKE_CXX_STANDARD_REQUIRED ON)
 set(CMAKE_C_STANDARD 99)

example compilation error:

FAILED: src/test/librbd/CMakeFiles/unittest_librbd.dir/test_mock_DeepCopyRequest.cc.o
/usr/bin/c++ -DBOOST_ASIO_DISABLE_THREAD_KEYWORD_EXTENSION -DBOOST_ASIO_USE_TS_EXECUTOR_AS_DEFAULT -DHAVE_CONFIG_H -DTEST_LIBRBD_INTERNALS -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -D_REENTRANT -D_THREAD_SAFE -D__CEPH__ -D__STDC_FORMAT_MACROS -D__linux__ -Iceph/build/src/include -Iceph/src -isystem ceph/build/include -isystem ceph/src/xxHash -isystem ceph/src/rapidjson/include -isystem ceph/src/fmt/include -isystem ceph/src/googletest/googlemock/include -isystem ceph/src/googletest/googlemock -isystem ceph/src/googletest/googletest/include -isystem ceph/src/googletest/googletest -g -Og -fPIE -Wall -fno-strict-aliasing -fsigned-char -Wtype-limits -Wignored-qualifiers -Wpointer-arith -Werror=format-security -Winit-self -Wno-unknown-pragmas -Wnon-virtual-dtor -Wno-ignored-qualifiers -ftemplate-depth-1024 -Wpessimizing-move -Wredundant-move -Wstrict-null-sentinel -Woverloaded-virtual -fno-new-ttp-matching -DCEPH_DEBUG_MUTEX -fstack-protector-strong -D_GLIBCXX_ASSERTIONS -fdiagnostics-color=auto -fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-free -std=c++20 -MD -MT src/test/librbd/CMakeFiles/unittest_librbd.dir/test_mock_DeepCopyRequest.cc.o -MF src/test/librbd/CMakeFiles/unittest_librbd.dir/test_mock_DeepCopyRequest.cc.o.d -o src/test/librbd/CMakeFiles/unittest_librbd.dir/test_mock_DeepCopyRequest.cc.o -c ceph/src/test/librbd/test_mock_DeepCopyRequest.cc
In file included from /usr/include/c++/11/ext/alloc_traits.h:34,
                 from /usr/include/c++/11/bits/basic_string.h:40,
                 from /usr/include/c++/11/string:55,
                 from ceph/src/include/rbd/librbd.hpp:18,
                 from ceph/src/test/librbd/test_fixture.h:5,
                 from ceph/src/test/librbd/test_mock_fixture.h:7,
                 from ceph/src/test/librbd/test_mock_DeepCopyRequest.cc:4:
/usr/include/c++/11/bits/alloc_traits.h: In substitution of ‘template<class _Alloc, class _Up> using __alloc_rebind = typename std::__allocator_traits_base::__rebind<_Alloc, _Up>::type [with _Alloc = ceph::BitVector<2>::NoInitAllocator; _Up = unsigned int]’:
/usr/include/c++/11/bits/alloc_traits.h:213:8:   required by substitution of ‘template<class _Alloc> template<class _Tp> using rebind_alloc = std::__alloc_rebind<_Alloc, _Tp> [with _Tp = unsigned int; _Alloc = ceph::BitVector<2>::NoInitAllocator]’
/usr/include/c++/11/ext/alloc_traits.h:120:65:   required from ‘struct __gnu_cxx::__alloc_traits<ceph::BitVector<2>::NoInitAllocator, unsigned int>::rebind<unsigned int>’
/usr/include/c++/11/bits/stl_vector.h:87:21:   required from ‘struct std::_Vector_base<unsigned int, ceph::BitVector<2>::NoInitAllocator>’
/usr/include/c++/11/bits/stl_vector.h:389:11:   required from ‘class std::vector<unsigned int, ceph::BitVector<2>::NoInitAllocator>’
ceph/src/common/bit_vector.hpp:242:47:   required from ‘class ceph::BitVector<2>’
ceph/src/common/bit_vector.hpp:641:1:   required from here
/usr/include/c++/11/bits/alloc_traits.h:79:11: error: no type named ‘type’ in ‘struct std::__allocator_traits_base::__rebind<ceph::BitVector<2>::NoInitAllocator, unsigned int, void>’
   79 |     using __alloc_rebind
      |           ^~~~~~~~~~~~~~
In file included from /usr/include/c++/11/vector:67,
                 from ceph/src/include/rbd/librbd.hpp:21,
                 from ceph/src/test/librbd/test_fixture.h:5,
                 from ceph/src/test/librbd/test_mock_fixture.h:7,
                 from ceph/src/test/librbd/test_mock_DeepCopyRequest.cc:4:
/usr/include/c++/11/bits/stl_vector.h: In instantiation of ‘class std::vector<unsigned int, ceph::BitVector<2>::NoInitAllocator>’:
ceph/src/common/bit_vector.hpp:242:47:   required from ‘class ceph::BitVector<2>’
ceph/src/common/bit_vector.hpp:641:1:   required from here
/usr/include/c++/11/bits/stl_vector.h:474:20: error: ‘_M_allocate’ has not been declared in ‘std::vector<unsigned int, ceph::BitVector<2>::NoInitAllocator>::_Base’
  474 |       using _Base::_M_allocate;
      |                    ^~~~~~~~~~~
/usr/include/c++/11/bits/stl_vector.h:475:20: error: ‘_M_deallocate’ has not been declared in ‘std::vector<unsigned int, ceph::BitVector<2>::NoInitAllocator>::_Base’
  475 |       using _Base::_M_deallocate;
      |                    ^~~~~~~~~~~~~
/usr/include/c++/11/bits/stl_vector.h:477:20: error: ‘_M_get_Tp_allocator’ has not been declared in ‘std::vector<unsigned int, ceph::BitVector<2>::NoInitAllocator>::_Base’
  477 |       using _Base::_M_get_Tp_allocator;
      |                    ^~~~~~~~~~~~~~~~~~~
In file included from ceph/src/librbd/deep_copy/ImageCopyRequest.h:9,
                 from ceph/src/test/librbd/test_mock_DeepCopyRequest.cc:13:
ceph/src/common/bit_vector.hpp: In instantiation of ‘void ceph::BitVector<<anonymous> >::encode_data(ceph::bufferlist&, uint64_t, uint64_t) const [with unsigned char _bit_count = 2; ceph::bufferlist = ceph::buffer::v15_2_0::list; uint64_t = long unsigned int]’:
ceph/src/common/bit_vector.hpp:559:3:   required from ‘void ceph::BitVector<<anonymous> >::encode(ceph::bufferlist&) const [with unsigned char _bit_count = 2; ceph::bufferlist = ceph::buffer::v15_2_0::list]’
ceph/src/common/bit_vector.hpp:641:1:   required from here
ceph/src/common/bit_vector.hpp:354:16: error: no match for ‘operator[]’ (operand types are ‘std::vector<unsigned int, ceph::BitVector<2>::NoInitAllocator>’ and ‘uint64_t’ {aka ‘long unsigned int’})
  354 |     m_data_crcs[data_byte_offset / BLOCK_SIZE] = bit.crc32c(0);
      |     ~~~~~~~~~~~^
ceph/src/common/bit_vector.hpp: In instantiation of ‘void ceph::BitVector<<anonymous> >::decode_data(ceph::buffer::v15_2_0::list::const_iterator&, uint64_t) [with unsigned char _bit_count = 2; ceph::buffer::v15_2_0::list::const_iterator = ceph::buffer::v15_2_0::list::iterator_impl<true>; uint64_t = long unsigned int]’:
ceph/src/common/bit_vector.hpp:575:3:   required from ‘void ceph::BitVector<<anonymous> >::decode(ceph::buffer::v15_2_0::list::const_iterator&) [with unsigned char _bit_count = 2; ceph::buffer::v15_2_0::list::const_iterator = ceph::buffer::v15_2_0::list::iterator_impl<true>]’
ceph/src/common/bit_vector.hpp:641:1:   required from here
ceph/src/common/bit_vector.hpp:388:20: error: no match for ‘operator[]’ (operand types are ‘std::vector<unsigned int, ceph::BitVector<2>::NoInitAllocator>’ and ‘uint64_t’ {aka ‘long unsigned int’})
  388 |         m_data_crcs[data_byte_offset / BLOCK_SIZE] != bit.crc32c(0)) {
      |         ~~~~~~~~~~~^
In file included from /usr/include/c++/11/vector:67,
                 from ceph/src/include/rbd/librbd.hpp:21,
                 from ceph/src/test/librbd/test_fixture.h:5,
                 from ceph/src/test/librbd/test_mock_fixture.h:7,
                 from ceph/src/test/librbd/test_mock_DeepCopyRequest.cc:4:
/usr/include/c++/11/bits/stl_vector.h: In instantiation of ‘std::vector<_Tp, _Alloc>::size_type std::vector<_Tp, _Alloc>::size() const [with _Tp = unsigned int; _Alloc = ceph::BitVector<2>::NoInitAllocator; std::vector<_Tp, _Alloc>::size_type = long unsigned int]’:
ceph/src/common/bit_vector.hpp:434:34:   required from ‘void ceph::BitVector<<anonymous> >::encode_footer(ceph::bufferlist&) const [with unsigned char _bit_count = 2; ceph::bufferlist = ceph::buffer::v15_2_0::list]’
ceph/src/common/bit_vector.hpp:560:3:   required from ‘void ceph::BitVector<<anonymous> >::encode(ceph::bufferlist&) const [with unsigned char _bit_count = 2; ceph::bufferlist = ceph::buffer::v15_2_0::list]’
ceph/src/common/bit_vector.hpp:641:1:   required from here
/usr/include/c++/11/bits/stl_vector.h:919:40: error: ‘const struct std::_Vector_base<unsigned int, ceph::BitVector<2>::NoInitAllocator>::_Vector_impl’ has no member named ‘_M_finish’
  919 |       { return size_type(this->_M_impl._M_finish - this->_M_impl._M_start); }
      |                          ~~~~~~~~~~~~~~^~~~~~~~~
/usr/include/c++/11/bits/stl_vector.h:919:66: error: ‘const struct std::_Vector_base<unsigned int, ceph::BitVector<2>::NoInitAllocator>::_Vector_impl’ has no member named ‘_M_start’
  919 |       { return size_type(this->_M_impl._M_finish - this->_M_impl._M_start); }
      |                                                    ~~~~~~~~~~~~~~^~~~~~~~
In file included from ceph/src/librbd/deep_copy/ImageCopyRequest.h:9,
                 from ceph/src/test/librbd/test_mock_DeepCopyRequest.cc:13:
ceph/src/common/bit_vector.hpp: In instantiation of ‘void ceph::BitVector<<anonymous> >::encode_data_crcs(ceph::bufferlist&, uint64_t, uint64_t) const [with unsigned char _bit_count = 2; ceph::bufferlist = ceph::buffer::v15_2_0::list; uint64_t = long unsigned int]’:
ceph/src/common/bit_vector.hpp:436:5:   required from ‘void ceph::BitVector<<anonymous> >::encode_footer(ceph::bufferlist&) const [with unsigned char _bit_count = 2; ceph::bufferlist = ceph::buffer::v15_2_0::list]’
ceph/src/common/bit_vector.hpp:560:3:   required from ‘void ceph::BitVector<<anonymous> >::encode(ceph::bufferlist&) const [with unsigned char _bit_count = 2; ceph::bufferlist = ceph::buffer::v15_2_0::list]’
ceph/src/common/bit_vector.hpp:641:1:   required from here
ceph/src/common/bit_vector.hpp:502:28: error: no match for ‘operator[]’ (operand types are ‘std::vector<unsigned int, ceph::BitVector<2>::NoInitAllocator>’ and ‘uint64_t’ {aka ‘long unsigned int’})
  502 |     __u32 crc = m_data_crcs[crc_index++];
      |                 ~~~~~~~~~~~^
ceph/src/common/bit_vector.hpp: In instantiation of ‘void ceph::BitVector<<anonymous> >::decode_data_crcs(ceph::buffer::v15_2_0::list::const_iterator&, uint64_t) [with unsigned char _bit_count = 2; ceph::buffer::v15_2_0::list::const_iterator = ceph::buffer::v15_2_0::list::iterator_impl<true>; uint64_t = long unsigned int]’:
ceph/src/common/bit_vector.hpp:454:5:   required from ‘void ceph::BitVector<<anonymous> >::decode_footer(ceph::buffer::v15_2_0::list::const_iterator&) [with unsigned char _bit_count = 2; ceph::buffer::v15_2_0::list::const_iterator = ceph::buffer::v15_2_0::list::iterator_impl<true>]’
ceph/src/common/bit_vector.hpp:572:3:   required from ‘void ceph::BitVector<<anonymous> >::decode(ceph::buffer::v15_2_0::list::const_iterator&) [with unsigned char _bit_count = 2; ceph::buffer::v15_2_0::list::const_iterator = ceph::buffer::v15_2_0::list::iterator_impl<true>]’
ceph/src/common/bit_vector.hpp:641:1:   required from here
ceph/src/common/bit_vector.hpp:523:16: error: no match for ‘operator[]’ (operand types are ‘std::vector<unsigned int, ceph::BitVector<2>::NoInitAllocator>’ and ‘uint64_t’ {aka ‘long unsigned int’})
  523 |     m_data_crcs[crc_index++] = crc;
      |     ~~~~~~~~~~~^
In file included from /usr/include/c++/11/vector:67,
                 from ceph/src/include/rbd/librbd.hpp:21,
                 from ceph/src/test/librbd/test_fixture.h:5,
                 from ceph/src/test/librbd/test_mock_fixture.h:7,
                 from ceph/src/test/librbd/test_mock_DeepCopyRequest.cc:4:
/usr/include/c++/11/bits/stl_vector.h: In instantiation of ‘void std::vector<_Tp, _Alloc>::resize(std::vector<_Tp, _Alloc>::size_type) [with _Tp = unsigned int; _Alloc = ceph::BitVector<2>::NoInitAllocator; std::vector<_Tp, _Alloc>::size_type = long unsigned int]’:
ceph/src/common/bit_vector.hpp:288:21:   required from ‘void ceph::BitVector<<anonymous> >::resize(uint64_t, bool) [with unsigned char _bit_count = 2; uint64_t = long unsigned int]’
ceph/src/common/bit_vector.hpp:330:9:   required from ‘void ceph::BitVector<<anonymous> >::decode_header(ceph::buffer::v15_2_0::list::const_iterator&) [with unsigned char _bit_count = 2; ceph::buffer::v15_2_0::list::const_iterator = ceph::buffer::v15_2_0::list::iterator_impl<true>]’
ceph/src/common/bit_vector.hpp:565:3:   required from ‘void ceph::BitVector<<anonymous> >::decode(ceph::buffer::v15_2_0::list::const_iterator&) [with unsigned char _bit_count = 2; ceph::buffer::v15_2_0::list::const_iterator = ceph::buffer::v15_2_0::list::iterator_impl<true>]’
ceph/src/common/bit_vector.hpp:641:1:   required from here
/usr/include/c++/11/bits/stl_vector.h:942:41: error: ‘struct std::_Vector_base<unsigned int, ceph::BitVector<2>::NoInitAllocator>::_Vector_impl’ has no member named ‘_M_start’
  942 |           _M_erase_at_end(this->_M_impl._M_start + __new_size);
      |                           ~~~~~~~~~~~~~~^~~~~~~~
In file included from /usr/include/c++/11/vector:72,
                 from ceph/src/include/rbd/librbd.hpp:21,
                 from ceph/src/test/librbd/test_fixture.h:5,
                 from ceph/src/test/librbd/test_mock_fixture.h:7,
                 from ceph/src/test/librbd/test_mock_DeepCopyRequest.cc:4:
/usr/include/c++/11/bits/vector.tcc: In instantiation of ‘void std::vector<_Tp, _Alloc>::_M_default_append(std::vector<_Tp, _Alloc>::size_type) [with _Tp = unsigned int; _Alloc = ceph::BitVector<2>::NoInitAllocator; std::vector<_Tp, _Alloc>::size_type = long unsigned int]’:
/usr/include/c++/11/bits/stl_vector.h:940:4:   required from ‘void std::vector<_Tp, _Alloc>::resize(std::vector<_Tp, _Alloc>::size_type) [with _Tp = unsigned int; _Alloc = ceph::BitVector<2>::NoInitAllocator; std::vector<_Tp, _Alloc>::size_type = long unsigned int]’
ceph/src/common/bit_vector.hpp:288:21:   required from ‘void ceph::BitVector<<anonymous> >::resize(uint64_t, bool) [with unsigned char _bit_count = 2; uint64_t = long unsigned int]’
ceph/src/common/bit_vector.hpp:330:9:   required from ‘void ceph::BitVector<<anonymous> >::decode_header(ceph::buffer::v15_2_0::list::const_iterator&) [with unsigned char _bit_count = 2; ceph::buffer::v15_2_0::list::const_iterator = ceph::buffer::v15_2_0::list::iterator_impl<true>]’
ceph/src/common/bit_vector.hpp:565:3:   required from ‘void ceph::BitVector<<anonymous> >::decode(ceph::buffer::v15_2_0::list::const_iterator&) [with unsigned char _bit_count = 2; ceph::buffer::v15_2_0::list::const_iterator = ceph::buffer::v15_2_0::list::iterator_impl<true>]’
ceph/src/common/bit_vector.hpp:641:1:   required from here
/usr/include/c++/11/bits/vector.tcc:617:56: error: ‘struct std::_Vector_base<unsigned int, ceph::BitVector<2>::NoInitAllocator>::_Vector_impl’ has no member named ‘_M_end_of_storage’
  617 |           size_type __navail = size_type(this->_M_impl._M_end_of_storage
      |                                          ~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~
/usr/include/c++/11/bits/vector.tcc:618:58: error: ‘struct std::_Vector_base<unsigned int, ceph::BitVector<2>::NoInitAllocator>::_Vector_impl’ has no member named ‘_M_finish’
  618 |                                          - this->_M_impl._M_finish);
      |                                            ~~~~~~~~~~~~~~^~~~~~~~~
/usr/include/c++/11/bits/vector.tcc:626:29: error: ‘struct std::_Vector_base<unsigned int, ceph::BitVector<2>::NoInitAllocator>::_Vector_impl’ has no member named ‘_M_finish’
  626 |               this->_M_impl._M_finish =
      |               ~~~~~~~~~~~~~~^~~~~~~~~
/usr/include/c++/11/bits/vector.tcc:627:64: error: ‘struct std::_Vector_base<unsigned int, ceph::BitVector<2>::NoInitAllocator>::_Vector_impl’ has no member named ‘_M_finish’
  627 |                 std::__uninitialized_default_n_a(this->_M_impl._M_finish,
      |                                                  ~~~~~~~~~~~~~~^~~~~~~~~
/usr/include/c++/11/bits/vector.tcc:628:74: error: ‘_M_get_Tp_allocator’ was not declared in this scope; did you mean ‘get_allocator’?
  628 |                                                  __n, _M_get_Tp_allocator());
      |                                                       ~~~~~~~~~~~~~~~~~~~^~
      |                                                       get_allocator
/usr/include/c++/11/bits/vector.tcc:636:48:   in ‘constexpr’ expansion of ‘std::vector<unsigned int, ceph::BitVector<2>::NoInitAllocator>::_S_use_relocate()’
/usr/include/c++/11/bits/vector.tcc:636:15: error: ‘constexpr’ call flows off the end of the function
  636 |               if _GLIBCXX17_CONSTEXPR (_S_use_relocate())
      |               ^~
/usr/include/c++/11/bits/vector.tcc:641:55: error: ‘_M_get_Tp_allocator’ was not declared in this scope; did you mean ‘get_allocator’?
  641 |                               __n, _M_get_Tp_allocator());
      |                                    ~~~~~~~~~~~~~~~~~~~^~
      |                                    get_allocator
/usr/include/c++/11/bits/vector.tcc:645:36: error: ‘_M_deallocate’ was not declared in this scope; did you mean ‘fallocate’?
  645 |                       _M_deallocate(__new_start, __len);
      |                       ~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~
      |                       fallocate
/usr/include/c++/11/bits/vector.tcc:648:45: error: ‘struct std::_Vector_base<unsigned int, ceph::BitVector<2>::NoInitAllocator>::_Vector_impl’ has no member named ‘_M_start’
  648 |                   _S_relocate(this->_M_impl._M_start, this->_M_impl._M_finish,
      |                               ~~~~~~~~~~~~~~^~~~~~~~
/usr/include/c++/11/bits/vector.tcc:648:69: error: ‘struct std::_Vector_base<unsigned int, ceph::BitVector<2>::NoInitAllocator>::_Vector_impl’ has no member named ‘_M_finish’
  648 |                   _S_relocate(this->_M_impl._M_start, this->_M_impl._M_finish,
      |                                                       ~~~~~~~~~~~~~~^~~~~~~~~
/usr/include/c++/11/bits/vector.tcc:649:63: error: ‘_M_get_Tp_allocator’ was not declared in this scope; did you mean ‘get_allocator’?
  649 |                               __new_start, _M_get_Tp_allocator());
      |                                            ~~~~~~~~~~~~~~~~~~~^~
      |                                            get_allocator
/usr/include/c++/11/bits/vector.tcc:657:55: error: ‘_M_get_Tp_allocator’ was not declared in this scope; did you mean ‘get_allocator’?
  657 |                               __n, _M_get_Tp_allocator());
      |                                    ~~~~~~~~~~~~~~~~~~~^~
      |                                    get_allocator
/usr/include/c++/11/bits/vector.tcc:660:45: error: ‘struct std::_Vector_base<unsigned int, ceph::BitVector<2>::NoInitAllocator>::_Vector_impl’ has no member named ‘_M_start’
  660 |                               this->_M_impl._M_start, this->_M_impl._M_finish,
      |                               ~~~~~~~~~~~~~~^~~~~~~~
/usr/include/c++/11/bits/vector.tcc:660:69: error: ‘struct std::_Vector_base<unsigned int, ceph::BitVector<2>::NoInitAllocator>::_Vector_impl’ has no member named ‘_M_finish’
  660 |                               this->_M_impl._M_start, this->_M_impl._M_finish,
      |                                                       ~~~~~~~~~~~~~~^~~~~~~~~
/usr/include/c++/11/bits/vector.tcc:667:58: error: ‘_M_get_Tp_allocator’ was not declared in this scope; did you mean ‘get_allocator’?
  667 |                                       _M_get_Tp_allocator());
      |                                       ~~~~~~~~~~~~~~~~~~~^~
      |                                       get_allocator
/usr/include/c++/11/bits/vector.tcc:668:36: error: ‘_M_deallocate’ was not declared in this scope; did you mean ‘fallocate’?
  668 |                       _M_deallocate(__new_start, __len);
      |                       ~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~
      |                       fallocate
/usr/include/c++/11/bits/vector.tcc:671:47: error: ‘struct std::_Vector_base<unsigned int, ceph::BitVector<2>::NoInitAllocator>::_Vector_impl’ has no member named ‘_M_start’
  671 |                   std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish,
      |                                 ~~~~~~~~~~~~~~^~~~~~~~
/usr/include/c++/11/bits/vector.tcc:671:71: error: ‘struct std::_Vector_base<unsigned int, ceph::BitVector<2>::NoInitAllocator>::_Vector_impl’ has no member named ‘_M_finish’
  671 |                   std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish,
      |                                                         ~~~~~~~~~~~~~~^~~~~~~~~
/usr/include/c++/11/bits/vector.tcc:672:52: error: ‘_M_get_Tp_allocator’ was not declared in this scope; did you mean ‘get_allocator’?
  672 |                                 _M_get_Tp_allocator());
      |                                 ~~~~~~~~~~~~~~~~~~~^~
      |                                 get_allocator
/usr/include/c++/11/bits/vector.tcc:675:43: error: ‘struct std::_Vector_base<unsigned int, ceph::BitVector<2>::NoInitAllocator>::_Vector_impl’ has no member named ‘_M_start’
  675 |               _M_deallocate(this->_M_impl._M_start,
      |                             ~~~~~~~~~~~~~~^~~~~~~~
/usr/include/c++/11/bits/vector.tcc:676:43: error: ‘struct std::_Vector_base<unsigned int, ceph::BitVector<2>::NoInitAllocator>::_Vector_impl’ has no member named ‘_M_end_of_storage’
  676 |                             this->_M_impl._M_end_of_storage
      |                             ~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~
/usr/include/c++/11/bits/vector.tcc:677:45: error: ‘struct std::_Vector_base<unsigned int, ceph::BitVector<2>::NoInitAllocator>::_Vector_impl’ has no member named ‘_M_start’
  677 |                             - this->_M_impl._M_start);
      |                               ~~~~~~~~~~~~~~^~~~~~~~
/usr/include/c++/11/bits/vector.tcc:675:28: error: ‘_M_deallocate’ was not declared in this scope; did you mean ‘fallocate’?
  675 |               _M_deallocate(this->_M_impl._M_start,
      |               ~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
  676 |                             this->_M_impl._M_end_of_storage
      |                             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  677 |                             - this->_M_impl._M_start);
      |                             ~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/11/bits/vector.tcc:678:29: error: ‘struct std::_Vector_base<unsigned int, ceph::BitVector<2>::NoInitAllocator>::_Vector_impl’ has no member named ‘_M_start’
  678 |               this->_M_impl._M_start = __new_start;
      |               ~~~~~~~~~~~~~~^~~~~~~~
/usr/include/c++/11/bits/vector.tcc:679:29: error: ‘struct std::_Vector_base<unsigned int, ceph::BitVector<2>::NoInitAllocator>::_Vector_impl’ has no member named ‘_M_finish’
  679 |               this->_M_impl._M_finish = __new_start + __size + __n;
      |               ~~~~~~~~~~~~~~^~~~~~~~~
/usr/include/c++/11/bits/vector.tcc:680:29: error: ‘struct std::_Vector_base<unsigned int, ceph::BitVector<2>::NoInitAllocator>::_Vector_impl’ has no member named ‘_M_end_of_storage’
  680 |               this->_M_impl._M_end_of_storage = __new_start + __len;
      |               ~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~


Related issues 2 (0 open2 closed)

Copied to rbd - Backport #54379: pacific: c++20: compilation failures around BitVector::NoInitAllocatorResolvedDeepika UpadhyayActions
Copied to rbd - Backport #54380: octopus: c++20: compilation failures around BitVector::NoInitAllocatorResolvedDeepika UpadhyayActions
Actions #1

Updated by Casey Bodley about 2 years ago

  • Description updated (diff)
Actions #2

Updated by Casey Bodley about 2 years ago

  • Status changed from New to Fix Under Review
  • Pull request ID set to 45031

it looks like the only issue is that std::allocator<T>::rebind was removed, and std::allocator_traits was unable to use the default rebind = NoInitAllocator<U> because NoInitAllocator wasn't templated on its value type

Actions #3

Updated by Casey Bodley about 2 years ago

  • Backport set to octopus pacific quincy
Actions #4

Updated by Ilya Dryomov about 2 years ago

  • Backport changed from octopus pacific quincy to octopus,pacific
Actions #5

Updated by Ilya Dryomov about 2 years ago

  • Assignee set to Casey Bodley
Actions #6

Updated by Ilya Dryomov about 2 years ago

  • Status changed from Fix Under Review to Pending Backport
Actions #7

Updated by Backport Bot about 2 years ago

  • Copied to Backport #54379: pacific: c++20: compilation failures around BitVector::NoInitAllocator added
Actions #8

Updated by Backport Bot about 2 years ago

  • Copied to Backport #54380: octopus: c++20: compilation failures around BitVector::NoInitAllocator added
Actions #9

Updated by Ilya Dryomov almost 2 years ago

  • Status changed from Pending Backport to Resolved
Actions

Also available in: Atom PDF