Failure in GCC 11 STL when building CFS dependency for CC4S
Trying to build CC4S with GCC 11 apparently doesn't work:
❯ mpicxx --showme
g++ -pthread -L/usr/lib/openmpi -Wl,-rpath -Wl,/usr/lib/openmpi -Wl,--enable-new-dtags -lmpi_cxx -lmpi
❯ mpicxx --showme:version
mpicxx: Open MPI 4.1.2 (Language: C++)
❯ mpicxx --version
g++ (GCC) 11.1.0
Copyright (C) 2021 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
It fails when compiling CTF with
mpicxx -O3 -fopenmp -Wall -D_POSIX_C_SOURCE=200112L -D__STDC_LIMIT_MACROS -DFTN_UNDERSCORE=1 -DUSE_LAPACK -DUSE_SCALAPACK -c idx_tensor.cxx -o /home/awvwgk/projects/src/git/cc4s/extern/build/dist/ctf/f1d951de96c3f2fc5e76df2b0f6f6148e5216776/obj/idx_tensor.o
In file included from /usr/include/c++/11.1.0/map:60,
from /usr/include/openmpi/ompi/mpi/cxx/mpicxx.h:42,
from /usr/include/mpi.h:2887,
from ../shared/model.h:7,
from common.h:18,
from idx_tensor.cxx:3:
/usr/include/c++/11.1.0/bits/stl_tree.h: In instantiation of ‘static const _Key& std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::_S_key(std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::_Const_Link_type) [with _Key = CTF::Idx_Tensor*; _Val = CTF::Idx_Tensor*; _KeyOfValue = std::_Identity<CTF::Idx_Tensor*>; _Compare = CTF_int::tensor_name_less; _Alloc = std::allocator<CTF::Idx_Tensor*>; std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::_Const_Link_type = const std::_Rb_tree_node<CTF::Idx_Tensor*>*]’:
/usr/include/c++/11.1.0/bits/stl_tree.h:2069:47: required from ‘std::pair<std::_Rb_tree_node_base*, std::_Rb_tree_node_base*> std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::_M_get_insert_unique_pos(const key_type&) [with _Key = CTF::Idx_Tensor*; _Val = CTF::Idx_Tensor*; _KeyOfValue = std::_Identity<CTF::Idx_Tensor*>; _Compare = CTF_int::tensor_name_less; _Alloc = std::allocator<CTF::Idx_Tensor*>; std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::key_type = CTF::Idx_Tensor*]’
/usr/include/c++/11.1.0/bits/stl_tree.h:2122:4: required from ‘std::pair<std::_Rb_tree_iterator<_Val>, bool> std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::_M_insert_unique(_Arg&&) [with _Arg = CTF::Idx_Tensor*; _Key = CTF::Idx_Tensor*; _Val = CTF::Idx_Tensor*; _KeyOfValue = std::_Identity<CTF::Idx_Tensor*>; _Compare = CTF_int::tensor_name_less; _Alloc = std::allocator<CTF::Idx_Tensor*>]’
/usr/include/c++/11.1.0/bits/stl_set.h:521:25: required from ‘std::pair<typename std::_Rb_tree<_Key, _Key, std::_Identity<_Tp>, _Compare, typename __gnu_cxx::__alloc_traits<_Alloc>::rebind<_Key>::other>::const_iterator, bool> std::set<_Key, _Compare, _Alloc>::insert(std::set<_Key, _Compare, _Alloc>::value_type&&) [with _Key = CTF::Idx_Tensor*; _Compare = CTF_int::tensor_name_less; _Alloc = std::allocator<CTF::Idx_Tensor*>; typename std::_Rb_tree<_Key, _Key, std::_Identity<_Tp>, _Compare, typename __gnu_cxx::__alloc_traits<_Alloc>::rebind<_Key>::other>::const_iterator = std::_Rb_tree<CTF::Idx_Tensor*, CTF::Idx_Tensor*, std::_Identity<CTF::Idx_Tensor*>, CTF_int::tensor_name_less, std::allocator<CTF::Idx_Tensor*> >::const_iterator; typename __gnu_cxx::__alloc_traits<_Alloc>::rebind<_Key>::other = std::allocator<CTF::Idx_Tensor*>; typename __gnu_cxx::__alloc_traits<_Alloc>::rebind<_Key> = __gnu_cxx::__alloc_traits<std::allocator<CTF::Idx_Tensor*>, CTF::Idx_Tensor*>::rebind<CTF::Idx_Tensor*>; typename _Alloc::value_type = CTF::Idx_Tensor*; std::set<_Key, _Compare, _Alloc>::value_type = CTF::Idx_Tensor*]’
idx_tensor.cxx:346:23: required from here
/usr/include/c++/11.1.0/bits/stl_tree.h:770:15: error: static assertion failed: comparison object must be invocable as const
770 | is_invocable_v<const _Compare&, const _Key&, const _Key&>,
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/11.1.0/bits/stl_tree.h:770:15: note: ‘std::is_invocable_v<const CTF_int::tensor_name_less&, CTF::Idx_Tensor* const&, CTF::Idx_Tensor* const&>’ evaluates to false
make[5]: *** [Makefile:12: /home/awvwgk/projects/src/git/cc4s/extern/build/dist/ctf/f1d951de96c3f2fc5e76df2b0f6f6148e5216776/obj/idx_tensor.o] Error 1
make[5]: Leaving directory '/home/awvwgk/projects/src/git/cc4s/extern/src/ctf/f1d951de96c3f2fc5e76df2b0f6f6148e5216776/src/interface'
make[4]: *** [Makefile:10: interface] Error 2
make[4]: Leaving directory '/home/awvwgk/projects/src/git/cc4s/extern/src/ctf/f1d951de96c3f2fc5e76df2b0f6f6148e5216776/src'
make[3]: *** [Makefile:93: ctf_objs] Error 2
make[3]: Leaving directory '/home/awvwgk/projects/src/git/cc4s/extern/src/ctf/f1d951de96c3f2fc5e76df2b0f6f6148e5216776'
make[2]: *** [Makefile:238: /home/awvwgk/projects/src/git/cc4s/extern/build/dist/ctf/f1d951de96c3f2fc5e76df2b0f6f6148e5216776/lib/libctf.a] Error 2
make[2]: Leaving directory '/home/awvwgk/projects/src/git/cc4s/extern/src/ctf/f1d951de96c3f2fc5e76df2b0f6f6148e5216776'
make[1]: *** [Makefile:4: all] Error 2
make[1]: Leaving directory '/home/awvwgk/projects/src/git/cc4s/extern/build/dist/ctf/f1d951de96c3f2fc5e76df2b0f6f6148e5216776'
make: *** [etc/make/ctf.mk:18: /home/awvwgk/projects/src/git/cc4s/extern/build/dist/ctf/f1d951de96c3f2fc5e76df2b0f6f6148e5216776/lib/libctf.a] Error 2
Same for Intel 2021.0.5 (uses GCC 11 STL, so no big surprise)
❯ mpiicc -v
mpiicc for the Intel(R) MPI Library 2021.5 for Linux*
Copyright Intel Corporation.
icc version 2021.5.0 (gcc version 11.1.0 compatibility)
❯ mpiicc -show
icc -I"/opt/intel/oneapi/mpi/2021.5.1/include" -L"/opt/intel/oneapi/mpi/2021.5.1/lib/release" -L"/opt/intel/oneapi/mpi/2021.5.1/lib" -Xlinker --enable-new-dtags -Xlinker -rpath -Xlinker "/opt/intel/oneapi/mpi/2021.5.1/lib/release" -Xlinker -rpath -Xlinker "/opt/intel/oneapi/mpi/2021.5.1/lib" -lmpifort -lmpi -ldl -lrt -lpthread
Also fails in a static assert:
mpiicc -O3 -fopenmp -Wall -D_POSIX_C_SOURCE=200112L -D__STDC_LIMIT_MACROS -DFTN_UNDERSCORE=1 -DUSE_BATCH_GEMM -DUSE_LAPACK -DUSE_MKL -c world.cxx -o /home/awvwgk/projects/src/git/cc4s/extern/build/icc-mkl-impi/ctf/f1d951de96c3f2fc5e76df2b0f6f6148e5216776/obj/world.o
mpiicc -O3 -fopenmp -Wall -D_POSIX_C_SOURCE=200112L -D__STDC_LIMIT_MACROS -DFTN_UNDERSCORE=1 -DUSE_BATCH_GEMM -DUSE_LAPACK -DUSE_MKL -c idx_tensor.cxx -o /home/awvwgk/projects/src/git/cc4s/extern/build/icc-mkl-impi/ctf/f1d951de96c3f2fc5e76df2b0f6f6148e5216776/obj/idx_tensor.o
/usr/include/c++/11.1.0/bits/stl_tree.h(769): error: static assertion failed with "comparison object must be invocable as const"
static_assert(
^
detected during:
instantiation of "const _Key &std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::_S_key(std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::_Const_Link_type) [with _Key=CTF::Idx_Tensor *, _Val=CTF::Idx_Tensor *, _KeyOfValue=std::_Identity<CTF::Idx_Tensor *>, _Compare=CTF_int::tensor_name_less, _Alloc=std::allocator<CTF::Idx_Tensor *>]" at line 2069
instantiation of "std::pair<std::_Rb_tree_node_base *, std::_Rb_tree_node_base *> std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::_M_get_insert_unique_pos(const std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::key_type &) [with _Key=CTF::Idx_Tensor *, _Val=CTF::Idx_Tensor *, _KeyOfValue=std::_Identity<CTF::Idx_Tensor *>, _Compare=CTF_int::tensor_name_less, _Alloc=std::allocator<CTF::Idx_Tensor *>]" at line 2122
instantiation of "std::pair<std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator, bool> std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::_M_insert_unique(_Arg &&) [with _Key=CTF::Idx_Tensor *, _Val=CTF::Idx_Tensor *, _KeyOfValue=std::_Identity<CTF::Idx_Tensor *>, _Compare=CTF_int::tensor_name_less, _Alloc=std::allocator<CTF::Idx_Tensor *>, _Arg=CTF::Idx_Tensor *]" at line 521 of "/usr/include/c++/11.1.0/bits/stl_set.h"
instantiation of "std::pair<std::set<_Key, _Compare, _Alloc>::iterator, bool> std::set<_Key, _Compare, _Alloc>::insert(std::set<_Key, _Compare, _Alloc>::value_type &&) [with _Key=CTF::Idx_Tensor *, _Compare=CTF_int::tensor_name_less, _Alloc=std::allocator<CTF::Idx_Tensor *>]" at line 346 of "idx_tensor.cxx"
compilation aborted for idx_tensor.cxx (code 2)
make[5]: *** [Makefile:12: /home/awvwgk/projects/src/git/cc4s/extern/build/icc-mkl-impi/ctf/f1d951de96c3f2fc5e76df2b0f6f6148e5216776/obj/idx_tensor.o] Error 2
make[5]: Leaving directory '/home/awvwgk/projects/src/git/cc4s/extern/src/ctf/f1d951de96c3f2fc5e76df2b0f6f6148e5216776/src/interface'
make[4]: *** [Makefile:10: interface] Error 2
make[4]: Leaving directory '/home/awvwgk/projects/src/git/cc4s/extern/src/ctf/f1d951de96c3f2fc5e76df2b0f6f6148e5216776/src'
make[3]: *** [Makefile:93: ctf_objs] Error 2
make[3]: Leaving directory '/home/awvwgk/projects/src/git/cc4s/extern/src/ctf/f1d951de96c3f2fc5e76df2b0f6f6148e5216776'
make[2]: *** [Makefile:238: /home/awvwgk/projects/src/git/cc4s/extern/build/icc-mkl-impi/ctf/f1d951de96c3f2fc5e76df2b0f6f6148e5216776/lib/libctf.a] Error 2
make[2]: Leaving directory '/home/awvwgk/projects/src/git/cc4s/extern/src/ctf/f1d951de96c3f2fc5e76df2b0f6f6148e5216776'
make[1]: *** [Makefile:4: all] Error 2
make[1]: Leaving directory '/home/awvwgk/projects/src/git/cc4s/extern/build/icc-mkl-impi/ctf/f1d951de96c3f2fc5e76df2b0f6f6148e5216776'
make: *** [etc/make/ctf.mk:18: /home/awvwgk/projects/src/git/cc4s/extern/build/icc-mkl-impi/ctf/f1d951de96c3f2fc5e76df2b0f6f6148e5216776/lib/libctf.a] Error 2