Hi,
spirv-tools fails to build in a test rebuild on at least amd64 and arm64 with
gcc-16/g++-16, but builds properly with gcc-15/g++-15. The severity of this
report will be raised before the forky release.
The full build log can be found at:
https://people.debian.org/~ema/gcc-16-rebuilds/output-1/spirv-tools_arm64.build.xz
The last lines of the build log are at the end of this report.
To build with GCC 16, either set CC=gcc-16 CXX=g++-16 explicitly,
or install the gcc, g++, gfortran, ... packages from experimental.
apt-get -t=experimental install g++
Common build failures include unused (but set) variables, array subscripts
partly outside array bounds, and new/dropped symbols in Debian symbols files.
For other C/C++ related build failures see the porting guide at
http://gcc.gnu.org/gcc-16/porting_to.html
Please only close this issue after double-checking that the package can be
built correctly with GCC 16.
Please do not reassign this bug to another package. If a fix in another package
is required, then file a bug for the other package (or clone), and mark this
bug as blocked by the bug in the other package.
[...]
inlined from ‘spvtools::utils::ScopedTimer<TimerType>::~ScopedTimer() [with TimerType = spvtools::utils::Timer]’ at /build/reproducible-path/spirv-tools-2026.1/source/util/timer.h:260:16,
inlined from ‘spvtools::opt::Pass::Status spvtools::opt::PassManager::Run(spvtools::opt::IRContext*)’ at /build/reproducible-path/spirv-tools-2026.1/source/opt/pass_manager.cpp:78:3:
/build/reproducible-path/spirv-tools-2026.1/source/util/timer.h:335:9: error: array subscript ‘spvtools::utils::CumulativeTimer[0]’ is partly outside array bounds of ‘void [384]’ [-Werror=array-bounds=]
335 | if (pgfaults_ >= 0 && Timer::PageFault() >= 0)
| ^~~~~~~~~
In constructor ‘spvtools::utils::ScopedTimer<TimerType>::ScopedTimer(std::ostream*, const char*, bool) [with TimerType = spvtools::utils::Timer]’,
inlined from ‘spvtools::opt::Pass::Status spvtools::opt::PassManager::Run(spvtools::opt::IRContext*)’ at /build/reproducible-path/spirv-tools-2026.1/source/opt/pass_manager.cpp:57:5:
/build/reproducible-path/spirv-tools-2026.1/source/util/timer.h:253:15: note: object of size 384 allocated by ‘operator new’
253 | : timer(new TimerType(out, measure_mem_usage)), tag_(tag) {
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/build/reproducible-path/spirv-tools-2026.1/source/util/timer.h:253:15: note: object of size 384 allocated by ‘operator new’
In member function ‘virtual void spvtools::utils::CumulativeTimer::Stop()’,
inlined from ‘spvtools::utils::ScopedTimer<TimerType>::~ScopedTimer() [with TimerType = spvtools::utils::Timer]’ at /build/reproducible-path/spirv-tools-2026.1/source/util/timer.h:260:16,
inlined from ‘spvtools::opt::Pass::Status spvtools::opt::PassManager::Run(spvtools::opt::IRContext*)’ at /build/reproducible-path/spirv-tools-2026.1/source/opt/pass_manager.cpp:78:3:
/build/reproducible-path/spirv-tools-2026.1/source/util/timer.h:336:17: error: array subscript ‘spvtools::utils::CumulativeTimer[0]’ is partly outside array bounds of ‘void [384]’ [-Werror=array-bounds=]
336 | pgfaults_ += Timer::PageFault();
| ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~
In constructor ‘spvtools::utils::ScopedTimer<TimerType>::ScopedTimer(std::ostream*, const char*, bool) [with TimerType = spvtools::utils::Timer]’,
inlined from ‘spvtools::opt::Pass::Status spvtools::opt::PassManager::Run(spvtools::opt::IRContext*)’ at /build/reproducible-path/spirv-tools-2026.1/source/opt/pass_manager.cpp:57:5:
/build/reproducible-path/spirv-tools-2026.1/source/util/timer.h:253:15: note: object of size 384 allocated by ‘operator new’
253 | : timer(new TimerType(out, measure_mem_usage)), tag_(tag) {
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/build/reproducible-path/spirv-tools-2026.1/source/util/timer.h:253:15: note: object of size 384 allocated by ‘operator new’
In member function ‘virtual void spvtools::utils::CumulativeTimer::Stop()’,
inlined from ‘spvtools::utils::ScopedTimer<TimerType>::~ScopedTimer() [with TimerType = spvtools::utils::Timer]’ at /build/reproducible-path/spirv-tools-2026.1/source/util/timer.h:260:16,
inlined from ‘spvtools::opt::Pass::Status spvtools::opt::PassManager::Run(spvtools::opt::IRContext*)’ at /build/reproducible-path/spirv-tools-2026.1/source/opt/pass_manager.cpp:78:3:
/build/reproducible-path/spirv-tools-2026.1/source/util/timer.h:338:17: error: array subscript ‘spvtools::utils::CumulativeTimer[0]’ is partly outside array bounds of ‘void [384]’ [-Werror=array-bounds=]
338 | pgfaults_ = -1;
| ~~~~~~~~~~^~~~
In constructor ‘spvtools::utils::ScopedTimer<TimerType>::ScopedTimer(std::ostream*, const char*, bool) [with TimerType = spvtools::utils::Timer]’,
inlined from ‘spvtools::opt::Pass::Status spvtools::opt::PassManager::Run(spvtools::opt::IRContext*)’ at /build/reproducible-path/spirv-tools-2026.1/source/opt/pass_manager.cpp:57:5:
/build/reproducible-path/spirv-tools-2026.1/source/util/timer.h:253:15: note: object of size 384 allocated by ‘operator new’
253 | : timer(new TimerType(out, measure_mem_usage)), tag_(tag) {
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/build/reproducible-path/spirv-tools-2026.1/source/util/timer.h:253:15: note: object of size 384 allocated by ‘operator new’
cc1plus: all warnings being treated as errors
make[3]: *** [source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make:1230: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/pass_manager.cpp.o] Error 1
make[3]: *** Waiting for unfinished jobs....
[ 73%] Linking CXX executable spirv-cfg
cd /build/reproducible-path/spirv-tools-2026.1/obj-aarch64-linux-gnu/tools && /usr/bin/cmake -E cmake_link_script CMakeFiles/spirv-cfg.dir/link.txt --verbose=1
/usr/bin/c++ -g -O2 -ffile-prefix-map=/build/reproducible-path/spirv-tools-2026.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -mbranch-protection=standard -Wdate-time -D_FORTIFY_SOURCE=2 -O3 -DNDEBUG -Wl,-z,relro -Wl,--dependency-file=CMakeFiles/spirv-cfg.dir/link.d "CMakeFiles/spirv-cfg.dir/cfg/cfg.cpp.o" "CMakeFiles/spirv-cfg.dir/cfg/bin_to_dot.cpp.o" "CMakeFiles/spirv-cfg.dir/io.cpp.o" "CMakeFiles/spirv-cfg.dir/util/flags.cpp.o" -o spirv-cfg ../source/libSPIRV-Tools.a -lrt
make[3]: Leaving directory '/build/reproducible-path/spirv-tools-2026.1/obj-aarch64-linux-gnu'
[ 73%] Built target spirv-cfg
[ 74%] Linking CXX executable spirv-as
cd /build/reproducible-path/spirv-tools-2026.1/obj-aarch64-linux-gnu/tools && /usr/bin/cmake -E cmake_link_script CMakeFiles/spirv-as.dir/link.txt --verbose=1
[ 75%] Linking CXX executable spirv-val
/usr/bin/c++ -g -O2 -ffile-prefix-map=/build/reproducible-path/spirv-tools-2026.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -mbranch-protection=standard -Wdate-time -D_FORTIFY_SOURCE=2 -O3 -DNDEBUG -Wl,-z,relro -Wl,--dependency-file=CMakeFiles/spirv-as.dir/link.d "CMakeFiles/spirv-as.dir/as/as.cpp.o" "CMakeFiles/spirv-as.dir/io.cpp.o" "CMakeFiles/spirv-as.dir/util/flags.cpp.o" -o spirv-as ../source/libSPIRV-Tools.a -lrt
cd /build/reproducible-path/spirv-tools-2026.1/obj-aarch64-linux-gnu/tools && /usr/bin/cmake -E cmake_link_script CMakeFiles/spirv-val.dir/link.txt --verbose=1
make[3]: Leaving directory '/build/reproducible-path/spirv-tools-2026.1/obj-aarch64-linux-gnu'
[ 75%] Built target spirv-as
/usr/bin/c++ -g -O2 -ffile-prefix-map=/build/reproducible-path/spirv-tools-2026.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -mbranch-protection=standard -Wdate-time -D_FORTIFY_SOURCE=2 -O3 -DNDEBUG -Wl,-z,relro -Wl,--dependency-file=CMakeFiles/spirv-val.dir/link.d "CMakeFiles/spirv-val.dir/util/flags.cpp.o" "CMakeFiles/spirv-val.dir/val/val.cpp.o" "CMakeFiles/spirv-val.dir/util/cli_consumer.cpp.o" "CMakeFiles/spirv-val.dir/io.cpp.o" -o spirv-val ../source/libSPIRV-Tools.a -lrt
make[3]: Leaving directory '/build/reproducible-path/spirv-tools-2026.1/obj-aarch64-linux-gnu'
[ 75%] Built target spirv-val
[ 75%] Linking CXX executable spirv-objdump
cd /build/reproducible-path/spirv-tools-2026.1/obj-aarch64-linux-gnu/tools && /usr/bin/cmake -E cmake_link_script CMakeFiles/spirv-objdump.dir/link.txt --verbose=1
[ 75%] Linking CXX executable spirv-dis
cd /build/reproducible-path/spirv-tools-2026.1/obj-aarch64-linux-gnu/tools && /usr/bin/cmake -E cmake_link_script CMakeFiles/spirv-dis.dir/link.txt --verbose=1
/usr/bin/c++ -g -O2 -ffile-prefix-map=/build/reproducible-path/spirv-tools-2026.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -mbranch-protection=standard -Wdate-time -D_FORTIFY_SOURCE=2 -O3 -DNDEBUG -Wl,-z,relro -Wl,--dependency-file=CMakeFiles/spirv-dis.dir/link.d "CMakeFiles/spirv-dis.dir/util/flags.cpp.o" "CMakeFiles/spirv-dis.dir/dis/dis.cpp.o" "CMakeFiles/spirv-dis.dir/io.cpp.o" -o spirv-dis ../source/libSPIRV-Tools.a -lrt
make[3]: Leaving directory '/build/reproducible-path/spirv-tools-2026.1/obj-aarch64-linux-gnu'
[ 75%] Built target spirv-dis
/usr/bin/c++ -g -O2 -ffile-prefix-map=/build/reproducible-path/spirv-tools-2026.1=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -mbranch-protection=standard -Wdate-time -D_FORTIFY_SOURCE=2 -O3 -DNDEBUG -Wl,-z,relro -Wl,--dependency-file=CMakeFiles/spirv-objdump.dir/link.d "CMakeFiles/spirv-objdump.dir/objdump/objdump.cpp.o" "CMakeFiles/spirv-objdump.dir/objdump/extract_source.cpp.o" "CMakeFiles/spirv-objdump.dir/util/cli_consumer.cpp.o" "CMakeFiles/spirv-objdump.dir/io.cpp.o" "CMakeFiles/spirv-objdump.dir/util/flags.cpp.o" -o spirv-objdump ../source/libSPIRV-Tools.a -lrt
make[3]: Leaving directory '/build/reproducible-path/spirv-tools-2026.1/obj-aarch64-linux-gnu'
[ 75%] Built target spirv-objdump
make[3]: Leaving directory '/build/reproducible-path/spirv-tools-2026.1/obj-aarch64-linux-gnu'
make[2]: *** [CMakeFiles/Makefile2:1144: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/all] Error 2
make[2]: Leaving directory '/build/reproducible-path/spirv-tools-2026.1/obj-aarch64-linux-gnu'
make[1]: *** [Makefile:149: all] Error 2
make[1]: Leaving directory '/build/reproducible-path/spirv-tools-2026.1/obj-aarch64-linux-gnu'
dh_auto_build: error: cd obj-aarch64-linux-gnu && make -j128 INSTALL="install --strip-program=true" VERBOSE=1 returned exit code 2
make: *** [debian/rules:6: binary] Error 25
dpkg-buildpackage: error: debian/rules binary subprocess failed with exit status 2