Skip to content

CI: test with GCC 16 - #998

Merged
tmadlener merged 4 commits into
AIDASoft:masterfrom
jmcarcell:ci/add-gcc16
Aug 26, 2026
Merged

CI: test with GCC 16#998
tmadlener merged 4 commits into
AIDASoft:masterfrom
jmcarcell:ci/add-gcc16

Conversation

@jmcarcell

@jmcarcell jmcarcell commented Aug 3, 2026

Copy link
Copy Markdown
Member

BEGINRELEASENOTES

  • Add GCC 16 coverage in the CI test matrix.

ENDRELEASENOTES

@tmadlener

Copy link
Copy Markdown
Collaborator

@arnavdham @veprbl it looks like we are hitting a warning inside an arrow header. Could you take a look and see whether this is something that is caused on our end, or whether this is something we would have to suppress for now to have working CI with gcc16?

Relevant CI output:

From this run

 [182/847] Building CXX object src/CMakeFiles/podioArrow.dir/ArrowFrameConverter.cc.o
    FAILED: [code=1] src/CMakeFiles/podioArrow.dir/ArrowFrameConverter.cc.o 
    ccache /cvmfs/sft.cern.ch/lcg/releases/gcc/16.1.0-43042/x86_64-el9/bin/g++ -DPODIO_ENABLE_ARROW=1 -DpodioArrow_EXPORTS -I/home/runner/work/podio/podio/include -Weffc++ -pedantic -Wextra -Wall -fdiagnostics-color=auto -Wdeprecated -Wno-long-long -Wshadow  -fdiagnostics-color=always -Werror -Wno-error=deprecated-declarations         -O2 -g -DNDEBUG -std=c++20 -fPIC -MD -MT src/CMakeFiles/podioArrow.dir/ArrowFrameConverter.cc.o -MF src/CMakeFiles/podioArrow.dir/ArrowFrameConverter.cc.o.d -o src/CMakeFiles/podioArrow.dir/ArrowFrameConverter.cc.o -c /home/runner/work/podio/podio/src/ArrowFrameConverter.cc
    In file included from /cvmfs/sft-nightlies.cern.ch/lcg/views/dev4/Thu/x86_64-el9-gcc16-opt/include/arrow/array/builder_base.h:30,
                     from /cvmfs/sft-nightlies.cern.ch/lcg/views/dev4/Thu/x86_64-el9-gcc16-opt/include/arrow/array/builder_adaptive.h:25,
                     from /cvmfs/sft-nightlies.cern.ch/lcg/views/dev4/Thu/x86_64-el9-gcc16-opt/include/arrow/builder.h:22,
                     from /cvmfs/sft-nightlies.cern.ch/lcg/views/dev4/Thu/x86_64-el9-gcc16-opt/include/arrow/api.h:26,
                     from /home/runner/work/podio/podio/src/ArrowFrameConverter.cc:9:
    In member function 'int64_t arrow::BufferBuilder::length() const',
        inlined from 'int64_t arrow::TypedBufferBuilder<T, typename std::enable_if<(std::is_arithmetic<_Tp>::value || std::is_standard_layout<_Tp>::value)>::type>::length() const [with T = signed char]' at /cvmfs/sft-nightlies.cern.ch/lcg/views/dev4/Thu/x86_64-el9-gcc16-opt/include/arrow/buffer_builder.h:324:56,
        inlined from 'virtual int64_t arrow::BasicUnionBuilder::length() const' at /cvmfs/sft-nightlies.cern.ch/lcg/views/dev4/Thu/x86_64-el9-gcc16-opt/include/arrow/array/builder_union.h:67:65,
        inlined from 'arrow::Status arrow::ArrayBuilder::Reserve(int64_t)' at /cvmfs/sft-nightlies.cern.ch/lcg/views/dev4/Thu/x86_64-el9-gcc16-opt/include/arrow/array/builder_base.h:140:31,
        inlined from 'arrow::Status arrow::NumericBuilder<TypeClass>::Append(value_type) [with T = arrow::DoubleType]' at /cvmfs/sft-nightlies.cern.ch/lcg/views/dev4/Thu/x86_64-el9-gcc16-opt/include/arrow/array/builder_primitive.h:104:5,
        inlined from 'std::shared_ptr<arrow::Array> podio::{anonymous}::buildParamMap(const podio::GenericParameters&) [with T = double; BuilderType = arrow::NumericBuilder<arrow::DoubleType>]' at /home/runner/work/podio/podio/src/ArrowFrameConverter.cc:41:44,
        inlined from 'std::shared_ptr<arrow::Array> podio::{anonymous}::convertParameters(const podio::GenericParameters&)' at /home/runner/work/podio/podio/src/ArrowFrameConverter.cc:53:72:
    /cvmfs/sft-nightlies.cern.ch/lcg/views/dev4/Thu/x86_64-el9-gcc16-opt/include/arrow/buffer_builder.h:205:35: error: array subscript 4 is outside array bounds of 'std::_Sp_counted_ptr_inplace<arrow::NumericBuilder<arrow::DoubleType>, std::allocator<void>, __gnu_cxx::_S_atomic> [1]' [-Werror=array-bounds=]
      205 |   int64_t length() const { return size_; }
          |                                   ^~~~~
    In file included from /cvmfs/sft.cern.ch/lcg/releases/gcc/16.1.0-43042/x86_64-el9/include/c++/16.1.0/x86_64-pc-linux-gnu/bits/c++allocator.h:33,
                     from /cvmfs/sft.cern.ch/lcg/releases/gcc/16.1.0-43042/x86_64-el9/include/c++/16.1.0/bits/allocator.h:46,
                     from /cvmfs/sft.cern.ch/lcg/releases/gcc/16.1.0-43042/x86_64-el9/include/c++/16.1.0/memory:67,
                     from /home/runner/work/podio/podio/include/podio/utilities/ArrowFrameConverter.h:4,
                     from /home/runner/work/podio/podio/src/ArrowFrameConverter.cc:1:
    In member function 'constexpr _Tp* std::__new_allocator<_Tp>::allocate(size_type, const void*) [with _Tp = std::_Sp_counted_ptr_inplace<arrow::NumericBuilder<arrow::DoubleType>, std::allocator<void>, __gnu_cxx::_S_atomic>]',
        inlined from 'constexpr _Tp* std::allocator< <template-parameter-1-1> >::allocate(std::size_t) [with _Tp = std::_Sp_counted_ptr_inplace<arrow::NumericBuilder<arrow::DoubleType>, std::allocator<void>, __gnu_cxx::_S_atomic>]' at /cvmfs/sft.cern.ch/lcg/releases/gcc/16.1.0-43042/x86_64-el9/include/c++/16.1.0/bits/allocator.h:206:40,
        inlined from 'static constexpr _Tp* std::allocator_traits<std::allocator<_Up> >::allocate(allocator_type&, size_type) [with _Tp = std::_Sp_counted_ptr_inplace<arrow::NumericBuilder<arrow::DoubleType>, std::allocator<void>, __gnu_cxx::_S_atomic>]' at /cvmfs/sft.cern.ch/lcg/releases/gcc/16.1.0-43042/x86_64-el9/include/c++/16.1.0/bits/alloc_traits.h:638:28,
        inlined from 'std::__allocated_ptr<_Alloc> std::__allocate_guarded(_Alloc&) [with _Alloc = allocator<_Sp_counted_ptr_inplace<arrow::NumericBuilder<arrow::DoubleType>, allocator<void>, __gnu_cxx::_S_atomic> >]' at /cvmfs/sft.cern.ch/lcg/releases/gcc/16.1.0-43042/x86_64-el9/include/c++/16.1.0/bits/allocated_ptr.h:103:69,
        inlined from 'std::__shared_count<_Lp>::__shared_count(_Tp*&, std::_Sp_alloc_shared_tag<_Alloc>, _Args&& ...) [with _Tp = arrow::NumericBuilder<arrow::DoubleType>; _Alloc = std::allocator<void>; _Args = {arrow::MemoryPool*&}; __gnu_cxx::_Lock_policy _Lp = __gnu_cxx::_S_atomic]' at /cvmfs/sft.cern.ch/lcg/releases/gcc/16.1.0-43042/x86_64-el9/include/c++/16.1.0/bits/shared_ptr_base.h:1034:9,
        inlined from 'std::__shared_ptr<_Tp, _Lp>::__shared_ptr(std::_Sp_alloc_shared_tag<_Tp>, _Args&& ...) [with _Alloc = std::allocator<void>; _Args = {arrow::MemoryPool*&}; _Tp = arrow::NumericBuilder<arrow::DoubleType>; __gnu_cxx::_Lock_policy _Lp = __gnu_cxx::_S_atomic]' at /cvmfs/sft.cern.ch/lcg/releases/gcc/16.1.0-43042/x86_64-el9/include/c++/16.1.0/bits/shared_ptr_base.h:1812:14,
        inlined from 'std::shared_ptr<_Tp>::shared_ptr(std::_Sp_alloc_shared_tag<_Tp>, _Args&& ...) [with _Alloc = std::allocator<void>; _Args = {arrow::MemoryPool*&}; _Tp = arrow::NumericBuilder<arrow::DoubleType>]' at /cvmfs/sft.cern.ch/lcg/releases/gcc/16.1.0-43042/x86_64-el9/include/c++/16.1.0/bits/shared_ptr.h:463:59,
        inlined from 'std::shared_ptr<std::_NonArray<_Tp> > std::make_shared(_Args&& ...) [with _Tp = arrow::NumericBuilder<arrow::DoubleType>; _Args = {arrow::MemoryPool*&}]' at /cvmfs/sft.cern.ch/lcg/releases/gcc/16.1.0-43042/x86_64-el9/include/c++/16.1.0/bits/shared_ptr.h:1066:39,
        inlined from 'std::shared_ptr<arrow::Array> podio::{anonymous}::buildParamMap(const podio::GenericParameters&) [with T = double; BuilderType = arrow::NumericBuilder<arrow::DoubleType>]' at /home/runner/work/podio/podio/src/ArrowFrameConverter.cc:29:10,
        inlined from 'std::shared_ptr<arrow::Array> podio::{anonymous}::convertParameters(const podio::GenericParameters&)' at /home/runner/work/podio/podio/src/ArrowFrameConverter.cc:53:72:
    /cvmfs/sft.cern.ch/lcg/releases/gcc/16.1.0-43042/x86_64-el9/include/c++/16.1.0/bits/new_allocator.h:162:75: note: at offset 272 into object of size 232 allocated by 'operator new'
      162 |           return static_cast<_Tp*>(_GLIBCXX_OPERATOR_NEW(__n * sizeof(_Tp)));
          |                                                                           ^
    In member function 'int64_t arrow::BufferBuilder::length() const',
        inlined from 'int64_t arrow::TypedBufferBuilder<T, typename std::enable_if<(std::is_arithmetic<_Tp>::value || std::is_standard_layout<_Tp>::value)>::type>::length() const [with T = signed char]' at /cvmfs/sft-nightlies.cern.ch/lcg/views/dev4/Thu/x86_64-el9-gcc16-opt/include/arrow/buffer_builder.h:324:56,
        inlined from 'virtual int64_t arrow::BasicUnionBuilder::length() const' at /cvmfs/sft-nightlies.cern.ch/lcg/views/dev4/Thu/x86_64-el9-gcc16-opt/include/arrow/array/builder_union.h:67:65,
        inlined from 'arrow::Status arrow::ArrayBuilder::Reserve(int64_t)' at /cvmfs/sft-nightlies.cern.ch/lcg/views/dev4/Thu/x86_64-el9-gcc16-opt/include/arrow/array/builder_base.h:140:31,
        inlined from 'arrow::Status arrow::NumericBuilder<TypeClass>::Append(value_type) [with T = arrow::FloatType]' at /cvmfs/sft-nightlies.cern.ch/lcg/views/dev4/Thu/x86_64-el9-gcc16-opt/include/arrow/array/builder_primitive.h:104:5,
        inlined from 'std::shared_ptr<arrow::Array> podio::{anonymous}::buildParamMap(const podio::GenericParameters&) [with T = float; BuilderType = arrow::NumericBuilder<arrow::FloatType>]' at /home/runner/work/podio/podio/src/ArrowFrameConverter.cc:41:44,
        inlined from 'std::shared_ptr<arrow::Array> podio::{anonymous}::convertParameters(const podio::GenericParameters&)' at /home/runner/work/podio/podio/src/ArrowFrameConverter.cc:52:69:
    /cvmfs/sft-nightlies.cern.ch/lcg/views/dev4/Thu/x86_64-el9-gcc16-opt/include/arrow/buffer_builder.h:205:35: error: array subscript 4 is outside array bounds of 'std::_Sp_counted_ptr_inplace<arrow::NumericBuilder<arrow::FloatType>, std::allocator<void>, __gnu_cxx::_S_atomic> [1]' [-Werror=array-bounds=]
      205 |   int64_t length() const { return size_; }
          |                                   ^~~~~
    In member function 'constexpr _Tp* std::__new_allocator<_Tp>::allocate(size_type, const void*) [with _Tp = std::_Sp_counted_ptr_inplace<arrow::NumericBuilder<arrow::FloatType>, std::allocator<void>, __gnu_cxx::_S_atomic>]',
        inlined from 'constexpr _Tp* std::allocator< <template-parameter-1-1> >::allocate(std::size_t) [with _Tp = std::_Sp_counted_ptr_inplace<arrow::NumericBuilder<arrow::FloatType>, std::allocator<void>, __gnu_cxx::_S_atomic>]' at /cvmfs/sft.cern.ch/lcg/releases/gcc/16.1.0-43042/x86_64-el9/include/c++/16.1.0/bits/allocator.h:206:40,
        inlined from 'static constexpr _Tp* std::allocator_traits<std::allocator<_Up> >::allocate(allocator_type&, size_type) [with _Tp = std::_Sp_counted_ptr_inplace<arrow::NumericBuilder<arrow::FloatType>, std::allocator<void>, __gnu_cxx::_S_atomic>]' at /cvmfs/sft.cern.ch/lcg/releases/gcc/16.1.0-43042/x86_64-el9/include/c++/16.1.0/bits/alloc_traits.h:638:28,
        inlined from 'std::__allocated_ptr<_Alloc> std::__allocate_guarded(_Alloc&) [with _Alloc = allocator<_Sp_counted_ptr_inplace<arrow::NumericBuilder<arrow::FloatType>, allocator<void>, __gnu_cxx::_S_atomic> >]' at /cvmfs/sft.cern.ch/lcg/releases/gcc/16.1.0-43042/x86_64-el9/include/c++/16.1.0/bits/allocated_ptr.h:103:69,
        inlined from 'std::__shared_count<_Lp>::__shared_count(_Tp*&, std::_Sp_alloc_shared_tag<_Alloc>, _Args&& ...) [with _Tp = arrow::NumericBuilder<arrow::FloatType>; _Alloc = std::allocator<void>; _Args = {arrow::MemoryPool*&}; __gnu_cxx::_Lock_policy _Lp = __gnu_cxx::_S_atomic]' at /cvmfs/sft.cern.ch/lcg/releases/gcc/16.1.0-43042/x86_64-el9/include/c++/16.1.0/bits/shared_ptr_base.h:1034:9,
        inlined from 'std::__shared_ptr<_Tp, _Lp>::__shared_ptr(std::_Sp_alloc_shared_tag<_Tp>, _Args&& ...) [with _Alloc = std::allocator<void>; _Args = {arrow::MemoryPool*&}; _Tp = arrow::NumericBuilder<arrow::FloatType>; __gnu_cxx::_Lock_policy _Lp = __gnu_cxx::_S_atomic]' at /cvmfs/sft.cern.ch/lcg/releases/gcc/16.1.0-43042/x86_64-el9/include/c++/16.1.0/bits/shared_ptr_base.h:1812:14,
        inlined from 'std::shared_ptr<_Tp>::shared_ptr(std::_Sp_alloc_shared_tag<_Tp>, _Args&& ...) [with _Alloc = std::allocator<void>; _Args = {arrow::MemoryPool*&}; _Tp = arrow::NumericBuilder<arrow::FloatType>]' at /cvmfs/sft.cern.ch/lcg/releases/gcc/16.1.0-43042/x86_64-el9/include/c++/16.1.0/bits/shared_ptr.h:463:59,
        inlined from 'std::shared_ptr<std::_NonArray<_Tp> > std::make_shared(_Args&& ...) [with _Tp = arrow::NumericBuilder<arrow::FloatType>; _Args = {arrow::MemoryPool*&}]' at /cvmfs/sft.cern.ch/lcg/releases/gcc/16.1.0-43042/x86_64-el9/include/c++/16.1.0/bits/shared_ptr.h:1066:39,
        inlined from 'std::shared_ptr<arrow::Array> podio::{anonymous}::buildParamMap(const podio::GenericParameters&) [with T = float; BuilderType = arrow::NumericBuilder<arrow::FloatType>]' at /home/runner/work/podio/podio/src/ArrowFrameConverter.cc:29:10,
        inlined from 'std::shared_ptr<arrow::Array> podio::{anonymous}::convertParameters(const podio::GenericParameters&)' at /home/runner/work/podio/podio/src/ArrowFrameConverter.cc:52:69:
    /cvmfs/sft.cern.ch/lcg/releases/gcc/16.1.0-43042/x86_64-el9/include/c++/16.1.0/bits/new_allocator.h:162:75: note: at offset 272 into object of size 232 allocated by 'operator new'
      162 |           return static_cast<_Tp*>(_GLIBCXX_OPERATOR_NEW(__n * sizeof(_Tp)));
          |                                                                           ^
    In member function 'int64_t arrow::BufferBuilder::length() const',
        inlined from 'int64_t arrow::TypedBufferBuilder<T, typename std::enable_if<(std::is_arithmetic<_Tp>::value || std::is_standard_layout<_Tp>::value)>::type>::length() const [with T = signed char]' at /cvmfs/sft-nightlies.cern.ch/lcg/views/dev4/Thu/x86_64-el9-gcc16-opt/include/arrow/buffer_builder.h:324:56,
        inlined from 'virtual int64_t arrow::BasicUnionBuilder::length() const' at /cvmfs/sft-nightlies.cern.ch/lcg/views/dev4/Thu/x86_64-el9-gcc16-opt/include/arrow/array/builder_union.h:67:65,
        inlined from 'arrow::Status arrow::ArrayBuilder::Reserve(int64_t)' at /cvmfs/sft-nightlies.cern.ch/lcg/views/dev4/Thu/x86_64-el9-gcc16-opt/include/arrow/array/builder_base.h:140:31,
        inlined from 'arrow::Status arrow::NumericBuilder<TypeClass>::Append(value_type) [with T = arrow::Int32Type]' at /cvmfs/sft-nightlies.cern.ch/lcg/views/dev4/Thu/x86_64-el9-gcc16-opt/include/arrow/array/builder_primitive.h:104:5,
        inlined from 'std::shared_ptr<arrow::Array> podio::{anonymous}::buildParamMap(const podio::GenericParameters&) [with T = int; BuilderType = arrow::NumericBuilder<arrow::Int32Type>]' at /home/runner/work/podio/podio/src/ArrowFrameConverter.cc:41:44,
        inlined from 'std::shared_ptr<arrow::Array> podio::{anonymous}::convertParameters(const podio::GenericParameters&)' at /home/runner/work/podio/podio/src/ArrowFrameConverter.cc:51:65:
    /cvmfs/sft-nightlies.cern.ch/lcg/views/dev4/Thu/x86_64-el9-gcc16-opt/include/arrow/buffer_builder.h:205:35: error: array subscript 4 is outside array bounds of 'std::_Sp_counted_ptr_inplace<arrow::NumericBuilder<arrow::Int32Type>, std::allocator<void>, __gnu_cxx::_S_atomic> [1]' [-Werror=array-bounds=]
      205 |   int64_t length() const { return size_; }
          |                                   ^~~~~
    In member function 'constexpr _Tp* std::__new_allocator<_Tp>::allocate(size_type, const void*) [with _Tp = std::_Sp_counted_ptr_inplace<arrow::NumericBuilder<arrow::Int32Type>, std::allocator<void>, __gnu_cxx::_S_atomic>]',
        inlined from 'constexpr _Tp* std::allocator< <template-parameter-1-1> >::allocate(std::size_t) [with _Tp = std::_Sp_counted_ptr_inplace<arrow::NumericBuilder<arrow::Int32Type>, std::allocator<void>, __gnu_cxx::_S_atomic>]' at /cvmfs/sft.cern.ch/lcg/releases/gcc/16.1.0-43042/x86_64-el9/include/c++/16.1.0/bits/allocator.h:206:40,
        inlined from 'static constexpr _Tp* std::allocator_traits<std::allocator<_Up> >::allocate(allocator_type&, size_type) [with _Tp = std::_Sp_counted_ptr_inplace<arrow::NumericBuilder<arrow::Int32Type>, std::allocator<void>, __gnu_cxx::_S_atomic>]' at /cvmfs/sft.cern.ch/lcg/releases/gcc/16.1.0-43042/x86_64-el9/include/c++/16.1.0/bits/alloc_traits.h:638:28,
        inlined from 'std::__allocated_ptr<_Alloc> std::__allocate_guarded(_Alloc&) [with _Alloc = allocator<_Sp_counted_ptr_inplace<arrow::NumericBuilder<arrow::Int32Type>, allocator<void>, __gnu_cxx::_S_atomic> >]' at /cvmfs/sft.cern.ch/lcg/releases/gcc/16.1.0-43042/x86_64-el9/include/c++/16.1.0/bits/allocated_ptr.h:103:69,
        inlined from 'std::__shared_count<_Lp>::__shared_count(_Tp*&, std::_Sp_alloc_shared_tag<_Alloc>, _Args&& ...) [with _Tp = arrow::NumericBuilder<arrow::Int32Type>; _Alloc = std::allocator<void>; _Args = {arrow::MemoryPool*&}; __gnu_cxx::_Lock_policy _Lp = __gnu_cxx::_S_atomic]' at /cvmfs/sft.cern.ch/lcg/releases/gcc/16.1.0-43042/x86_64-el9/include/c++/16.1.0/bits/shared_ptr_base.h:1034:9,
        inlined from 'std::__shared_ptr<_Tp, _Lp>::__shared_ptr(std::_Sp_alloc_shared_tag<_Tp>, _Args&& ...) [with _Alloc = std::allocator<void>; _Args = {arrow::MemoryPool*&}; _Tp = arrow::NumericBuilder<arrow::Int32Type>; __gnu_cxx::_Lock_policy _Lp = __gnu_cxx::_S_atomic]' at /cvmfs/sft.cern.ch/lcg/releases/gcc/16.1.0-43042/x86_64-el9/include/c++/16.1.0/bits/shared_ptr_base.h:1812:14,
        inlined from 'std::shared_ptr<_Tp>::shared_ptr(std::_Sp_alloc_shared_tag<_Tp>, _Args&& ...) [with _Alloc = std::allocator<void>; _Args = {arrow::MemoryPool*&}; _Tp = arrow::NumericBuilder<arrow::Int32Type>]' at /cvmfs/sft.cern.ch/lcg/releases/gcc/16.1.0-43042/x86_64-el9/include/c++/16.1.0/bits/shared_ptr.h:463:59,
        inlined from 'std::shared_ptr<std::_NonArray<_Tp> > std::make_shared(_Args&& ...) [with _Tp = arrow::NumericBuilder<arrow::Int32Type>; _Args = {arrow::MemoryPool*&}]' at /cvmfs/sft.cern.ch/lcg/releases/gcc/16.1.0-43042/x86_64-el9/include/c++/16.1.0/bits/shared_ptr.h:1066:39,
        inlined from 'std::shared_ptr<arrow::Array> podio::{anonymous}::buildParamMap(const podio::GenericParameters&) [with T = int; BuilderType = arrow::NumericBuilder<arrow::Int32Type>]' at /home/runner/work/podio/podio/src/ArrowFrameConverter.cc:29:10,
        inlined from 'std::shared_ptr<arrow::Array> podio::{anonymous}::convertParameters(const podio::GenericParameters&)' at /home/runner/work/podio/podio/src/ArrowFrameConverter.cc:51:65:
    /cvmfs/sft.cern.ch/lcg/releases/gcc/16.1.0-43042/x86_64-el9/include/c++/16.1.0/bits/new_allocator.h:162:75: note: at offset 272 into object of size 232 allocated by 'operator new'
      162 |           return static_cast<_Tp*>(_GLIBCXX_OPERATOR_NEW(__n * sizeof(_Tp)));
          |                                                                           ^
    cc1plus: all warnings being treated as errors

@arnavdham

Copy link
Copy Markdown
Contributor

@arnavdham @veprbl it looks like we are hitting a warning inside an arrow header. Could you take a look and see whether this is something that is caused on our end, or whether this is something we would have to suppress for now to have working CI with gcc16?

Relevant CI output:

I think this has to be suppressed. No clear reason according to me why this should be giving a warning

@tmadlener

tmadlener commented Aug 24, 2026

Copy link
Copy Markdown
Collaborator

Looks like having arrow/api.h in there let's gcc speculatively devirtualize (wrongly) which triggers a warning. This cannot be suppressed via compiler flags (other than -fno-devirtualize-speculatively or -fno-devirtualize). The solution here seems to be to just explicitly include arrow headers and omti the api.h header instead.

@tmadlener

Copy link
Copy Markdown
Collaborator

Unless there are objections, I will merge this later today.

@jmcarcell

Copy link
Copy Markdown
Member Author

I'll update arrow in the LCG stacks to 25 for tomorrow; I don't get the warnings locally with that and GCC 16 so it may do something (maybe not).

@tmadlener

Copy link
Copy Markdown
Collaborator

OK. I will wait then until those appear tomorrow.

@jmcarcell

Copy link
Copy Markdown
Member Author

Didn't get in for today since there were a few changes of the recipe... https://gitlab.cern.ch/sft/stacks/lcgcmake/-/merge_requests/4307. It should be there tomorrow

jmcarcell and others added 2 commits August 26, 2026 10:17
GCC16 starts to speculatively devirtualize (wrongly!) if all of the api
header is available which results in warnings that are not suppressable
with compiler flags otherwise.
@tmadlener
tmadlener enabled auto-merge (squash) August 26, 2026 08:17
tmadlener
tmadlener previously approved these changes Aug 26, 2026
@jmcarcell

Copy link
Copy Markdown
Member Author

It's possible that now reverting d73d1dd works; probably it's better than adding all the headers if that's the intended way?

@tmadlener

Copy link
Copy Markdown
Collaborator

I don't know enough about arrow to judge what's the intended way, but if gcc keeps wrongly speculatively devirtualizing we at least know the solution. Let's see what the build says.

@tmadlener

Copy link
Copy Markdown
Collaborator

Doesn't seem to like it: https://github.com/AIDASoft/podio/actions/runs/32949414659/job/98117300290?pr=998#step:5:799

@tmadlener
tmadlener disabled auto-merge August 26, 2026 11:23
@tmadlener
tmadlener merged commit a6edb10 into AIDASoft:master Aug 26, 2026
34 of 37 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants