#1098196 zbackup: ftbfs with GCC-15

Package:
src:zbackup
Source:
src:zbackup
Submitter:
Matthias Klose
Date:
2025-09-04 22:11:51 UTC
Severity:
normal
Tags:
#1098196#5
Date:
2025-02-17 18:03:28 UTC
From:
To:
[This bug is NOT targeted to the upcoming trixie release]

Please keep this issue open in the bug tracker for the package it
was filed for.  If a fix in another package is required, please
file a bug for the other package (or clone), and add a block in this
package. Please keep the issue open until the package can be built in
a follow-up test rebuild.

The package fails to build in a test rebuild on at least amd64 with
gcc-15/g++-15, but succeeds to build with gcc-14/g++-14. The
severity of this report will be raised before the forky release.

The full build log can be found at:
http://qa-logs.debian.net/2025/02/16/amd64exp/zbackup_1.5-2_unstable_gccexp.log.gz
The last lines of the build log are at the end of this report.

To build with GCC 15, either set CC=gcc-15 CXX=g++-15 explicitly,
or install the gcc, g++, gfortran, ... packages from experimental.

  apt-get -t=experimental install g++

GCC 15 now defaults to the C23/C++23 standards, exposing many FTBFS.
Other Common build failures are new warnings resulting in build failures
with -Werror turned on, or new/dropped symbols in Debian symbols files.
For other C/C++ related build failures see the porting guide at
http://gcc.gnu.org/gcc-15/porting_to.html

[...]
                 from /build/reproducible-path/zbackup-1.5/chunk_storage.cc:5:
/usr/include/c++/15/bits/stl_tree.h: In instantiation of ‘std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::_Base_ptr std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::_M_lower_bound(_Base_ptr, _Base_ptr, const _Key&) const [with _Key = std::_List_iterator<ObjectCache::Object>; _Val = std::_List_iterator<ObjectCache::Object>; _KeyOfValue = std::_Identity<std::_List_iterator<ObjectCache::Object> >; _Compare = ObjectCache::ObjectsIteratorComp; _Alloc = std::allocator<std::_List_iterator<ObjectCache::Object> >; _Base_ptr = std::__rb_tree::_Node_traits<std::_List_iterator<ObjectCache::Object>, std::_List_iterator<ObjectCache::Object>*>::_Node_base*]’:
/usr/include/c++/15/bits/stl_tree.h:2650:34:   required from ‘std::pair<typename std::__rb_tree::_Node_traits<_Val, typename __gnu_cxx::__alloc_traits<typename __gnu_cxx::__alloc_traits<_Alloc>::rebind<_Val>::other>::pointer>::_Iterator, typename std::__rb_tree::_Node_traits<_Val, typename __gnu_cxx::__alloc_traits<typename __gnu_cxx::__alloc_traits<_Alloc>::rebind<_Val>::other>::pointer>::_Iterator> std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::equal_range(const _Key&) [with _Key = std::_List_iterator<ObjectCache::Object>; _Val = std::_List_iterator<ObjectCache::Object>; _KeyOfValue = std::_Identity<std::_List_iterator<ObjectCache::Object> >; _Compare = ObjectCache::ObjectsIteratorComp; _Alloc = std::allocator<std::_List_iterator<ObjectCache::Object> >; typename std::__rb_tree::_Node_traits<_Val, typename __gnu_cxx::__alloc_traits<typename __gnu_cxx::__alloc_traits<_Alloc>::rebind<_Val>::other>::pointer>::_Iterator = std::__rb_tree::_Node_traits<std::_List_iterator<ObjectCache::Object>, std::_List_iterator<ObjectCache::Object>*>::_Iterator; typename __gnu_cxx::__alloc_traits<typename __gnu_cxx::__alloc_traits<_Alloc>::rebind<_Val>::other>::pointer = std::_List_iterator<ObjectCache::Object>*; typename __gnu_cxx::__alloc_traits<_Alloc>::rebind<_Val>::other = std::allocator<std::_List_iterator<ObjectCache::Object> >; typename __gnu_cxx::__alloc_traits<_Alloc>::rebind<_Val> = __gnu_cxx::__alloc_traits<std::allocator<std::_List_iterator<ObjectCache::Object> >, std::_List_iterator<ObjectCache::Object> >::rebind<std::_List_iterator<ObjectCache::Object> >; typename _Alloc::value_type = std::allocator<std::_List_iterator<ObjectCache::Object> >::value_type; typename __gnu_cxx::__alloc_traits<_Alloc>::rebind<_Val>::other::value_type = std::allocator<std::_List_iterator<ObjectCache::Object> >::value_type]’
 2650 |               return make_pair(iterator(_M_lower_bound(__x, __y, __k)),
      |                                         ^~~~~~~~~~~~~~
/usr/include/c++/15/bits/stl_tree.h:3137:49:   required from ‘std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::size_type std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::erase(const _Key&) [with _Key = std::_List_iterator<ObjectCache::Object>; _Val = std::_List_iterator<ObjectCache::Object>; _KeyOfValue = std::_Identity<std::_List_iterator<ObjectCache::Object> >; _Compare = ObjectCache::ObjectsIteratorComp; _Alloc = std::allocator<std::_List_iterator<ObjectCache::Object> >; size_type = long unsigned int]’
 3137 |       pair<iterator, iterator> __p = equal_range(__x);
      |                                      ~~~~~~~~~~~^~~~~
/usr/include/c++/15/bits/stl_set.h:687:26:   required from ‘std::set<_Key, _Compare, _Alloc>::size_type std::set<_Key, _Compare, _Alloc>::erase(const key_type&) [with _Key = std::_List_iterator<ObjectCache::Object>; _Compare = ObjectCache::ObjectsIteratorComp; _Alloc = std::allocator<std::_List_iterator<ObjectCache::Object> >; size_type = long unsigned int; key_type = std::set<std::_List_iterator<ObjectCache::Object>, ObjectCache::ObjectsIteratorComp>::key_type]’
  687 |       { return _M_t.erase(__x); }
      |                ~~~~~~~~~~^~~~~
/build/reproducible-path/zbackup-1.5/objectcache.hh:107:22:   required from ‘sptr<T>& ObjectCache::entry(const ObjectId&) [with T = Bundle::Reader; ObjectId = std::__cxx11::basic_string<char>]’
  107 |       objectMap.erase( i );
      |       ~~~~~~~~~~~~~~~^~~~~
/build/reproducible-path/zbackup-1.5/chunk_storage.cc:247:74:   required from here
  247 |   sptr< Bundle::Reader > & reader = cachedReaders.entry< Bundle::Reader >(
      |                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
  248 |     string( ( char const * ) &id, sizeof( id ) ) );
      |     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/15/bits/stl_tree.h:2604:36: error: no match for call to ‘(const ObjectCache::ObjectsIteratorComp) (const std::_List_iterator<ObjectCache::Object>&, const std::_List_iterator<ObjectCache::Object>&)’
 2604 |         if (!_M_impl._M_key_compare(_S_key(__x), __k))
      |              ~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~
In file included from /build/reproducible-path/zbackup-1.5/chunk_storage.hh:22:
/build/reproducible-path/zbackup-1.5/objectcache.hh:67:10: note: there is 1 candidate
   67 |   struct ObjectsIteratorComp
      |          ^~~~~~~~~~~~~~~~~~~
/build/reproducible-path/zbackup-1.5/objectcache.hh:69:10: note: candidate 1: ‘bool ObjectCache::ObjectsIteratorComp::operator()(const std::__cxx11::list<ObjectCache::Object>::iterator&, const std::__cxx11::list<ObjectCache::Object>::iterator&)’ (near match)
   69 |     bool operator () ( Objects::iterator const & x, Objects::iterator const & y )
      |          ^~~~~~~~
/build/reproducible-path/zbackup-1.5/objectcache.hh:69:10: note: passing ‘const ObjectCache::ObjectsIteratorComp*’ as ‘this’ argument discards qualifiers
/usr/include/c++/15/bits/stl_tree.h: In instantiation of ‘std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::_Base_ptr std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::_M_upper_bound(_Base_ptr, _Base_ptr, const _Key&) const [with _Key = std::_List_iterator<ObjectCache::Object>; _Val = std::_List_iterator<ObjectCache::Object>; _KeyOfValue = std::_Identity<std::_List_iterator<ObjectCache::Object> >; _Compare = ObjectCache::ObjectsIteratorComp; _Alloc = std::allocator<std::_List_iterator<ObjectCache::Object> >; _Base_ptr = std::__rb_tree::_Node_traits<std::_List_iterator<ObjectCache::Object>, std::_List_iterator<ObjectCache::Object>*>::_Node_base*]’:
/usr/include/c++/15/bits/stl_tree.h:2651:20:   required from ‘std::pair<typename std::__rb_tree::_Node_traits<_Val, typename __gnu_cxx::__alloc_traits<typename __gnu_cxx::__alloc_traits<_Alloc>::rebind<_Val>::other>::pointer>::_Iterator, typename std::__rb_tree::_Node_traits<_Val, typename __gnu_cxx::__alloc_traits<typename __gnu_cxx::__alloc_traits<_Alloc>::rebind<_Val>::other>::pointer>::_Iterator> std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::equal_range(const _Key&) [with _Key = std::_List_iterator<ObjectCache::Object>; _Val = std::_List_iterator<ObjectCache::Object>; _KeyOfValue = std::_Identity<std::_List_iterator<ObjectCache::Object> >; _Compare = ObjectCache::ObjectsIteratorComp; _Alloc = std::allocator<std::_List_iterator<ObjectCache::Object> >; typename std::__rb_tree::_Node_traits<_Val, typename __gnu_cxx::__alloc_traits<typename __gnu_cxx::__alloc_traits<_Alloc>::rebind<_Val>::other>::pointer>::_Iterator = std::__rb_tree::_Node_traits<std::_List_iterator<ObjectCache::Object>, std::_List_iterator<ObjectCache::Object>*>::_Iterator; typename __gnu_cxx::__alloc_traits<typename __gnu_cxx::__alloc_traits<_Alloc>::rebind<_Val>::other>::pointer = std::_List_iterator<ObjectCache::Object>*; typename __gnu_cxx::__alloc_traits<_Alloc>::rebind<_Val>::other = std::allocator<std::_List_iterator<ObjectCache::Object> >; typename __gnu_cxx::__alloc_traits<_Alloc>::rebind<_Val> = __gnu_cxx::__alloc_traits<std::allocator<std::_List_iterator<ObjectCache::Object> >, std::_List_iterator<ObjectCache::Object> >::rebind<std::_List_iterator<ObjectCache::Object> >; typename _Alloc::value_type = std::allocator<std::_List_iterator<ObjectCache::Object> >::value_type; typename __gnu_cxx::__alloc_traits<_Alloc>::rebind<_Val>::other::value_type = std::allocator<std::_List_iterator<ObjectCache::Object> >::value_type]’
 2651 |                                iterator(_M_upper_bound(__xu, __yu, __k)));
      |                                         ^~~~~~~~~~~~~~
/usr/include/c++/15/bits/stl_tree.h:3137:49:   required from ‘std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::size_type std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::erase(const _Key&) [with _Key = std::_List_iterator<ObjectCache::Object>; _Val = std::_List_iterator<ObjectCache::Object>; _KeyOfValue = std::_Identity<std::_List_iterator<ObjectCache::Object> >; _Compare = ObjectCache::ObjectsIteratorComp; _Alloc = std::allocator<std::_List_iterator<ObjectCache::Object> >; size_type = long unsigned int]’
 3137 |       pair<iterator, iterator> __p = equal_range(__x);
      |                                      ~~~~~~~~~~~^~~~~
/usr/include/c++/15/bits/stl_set.h:687:26:   required from ‘std::set<_Key, _Compare, _Alloc>::size_type std::set<_Key, _Compare, _Alloc>::erase(const key_type&) [with _Key = std::_List_iterator<ObjectCache::Object>; _Compare = ObjectCache::ObjectsIteratorComp; _Alloc = std::allocator<std::_List_iterator<ObjectCache::Object> >; size_type = long unsigned int; key_type = std::set<std::_List_iterator<ObjectCache::Object>, ObjectCache::ObjectsIteratorComp>::key_type]’
  687 |       { return _M_t.erase(__x); }
      |                ~~~~~~~~~~^~~~~
/build/reproducible-path/zbackup-1.5/objectcache.hh:107:22:   required from ‘sptr<T>& ObjectCache::entry(const ObjectId&) [with T = Bundle::Reader; ObjectId = std::__cxx11::basic_string<char>]’
  107 |       objectMap.erase( i );
      |       ~~~~~~~~~~~~~~~^~~~~
/build/reproducible-path/zbackup-1.5/chunk_storage.cc:247:74:   required from here
  247 |   sptr< Bundle::Reader > & reader = cachedReaders.entry< Bundle::Reader >(
      |                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
  248 |     string( ( char const * ) &id, sizeof( id ) ) );
      |     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/15/bits/stl_tree.h:2620:35: error: no match for call to ‘(const ObjectCache::ObjectsIteratorComp) (const std::_List_iterator<ObjectCache::Object>&, const std::_List_iterator<ObjectCache::Object>&)’
 2620 |         if (_M_impl._M_key_compare(__k, _S_key(__x)))
      |             ~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~
/build/reproducible-path/zbackup-1.5/objectcache.hh:67:10: note: there is 1 candidate
   67 |   struct ObjectsIteratorComp
      |          ^~~~~~~~~~~~~~~~~~~
/build/reproducible-path/zbackup-1.5/objectcache.hh:69:10: note: candidate 1: ‘bool ObjectCache::ObjectsIteratorComp::operator()(const std::__cxx11::list<ObjectCache::Object>::iterator&, const std::__cxx11::list<ObjectCache::Object>::iterator&)’ (near match)
   69 |     bool operator () ( Objects::iterator const & x, Objects::iterator const & y )
      |          ^~~~~~~~
/build/reproducible-path/zbackup-1.5/objectcache.hh:69:10: note: passing ‘const ObjectCache::ObjectsIteratorComp*’ as ‘this’ argument discards qualifiers
make[4]: *** [CMakeFiles/zbackup.dir/build.make:216: CMakeFiles/zbackup.dir/chunk_storage.cc.o] Error 1
make[4]: *** Waiting for unfinished jobs....
make[4]: Leaving directory '/build/reproducible-path/zbackup-1.5/obj-x86_64-linux-gnu'
make[3]: *** [CMakeFiles/Makefile2:125: CMakeFiles/zbackup.dir/all] Error 2
make[3]: Leaving directory '/build/reproducible-path/zbackup-1.5/obj-x86_64-linux-gnu'
make[2]: *** [Makefile:139: all] Error 2
make[2]: Leaving directory '/build/reproducible-path/zbackup-1.5/obj-x86_64-linux-gnu'
dh_auto_build: error: cd obj-x86_64-linux-gnu && make -j8 "INSTALL=install --strip-program=true" VERBOSE=1 returned exit code 2
make[1]: *** [debian/rules:13: override_dh_auto_build] Error 25
make[1]: Leaving directory '/build/reproducible-path/zbackup-1.5'
make: *** [debian/rules:17: binary] Error 2
dpkg-buildpackage: error: debian/rules binary subprocess returned exit status 2