I've narrowed this down to precompiled header (.gch) generation.
Building quickshell twice in unstable sbuild chroot with gcc-15 15.2.0-16, ninja -j2, same build path, same SOURCE_DATE_EPOCH results in 6 out of 475 .o files differing between builds. The set of differing files changes each run, however all 6 .gch files differ every time. They are: qs-pchset-common.dir/cmake_pch.hxx.gch qs-pchset-large.dir/cmake_pch.hxx.gch qs-pchset-plugin.dir/cmake_pch.hxx.gch qs-pchset-dbus.dir/cmake_pch.hxx.gch qs-pchset-launch.dir/cmake_pch.hxx.gch qs-pchset-wayland-protocol.dir/cmake_pch.hxx.gch Recompiling the same .cpp file twice against the same .gch produces identical .o files. The non-determinism is entirely in the .gch generation itself. The debug info (.debug_info, .debug_loclists) serialized into the PCH varies between runs, and the .o files that include the PCH inherit this. The .text, .rodata and all code/data sections are identical across builds. Only debug sections differ. Also tested with gcc-16 (16.0.1 20260308, trunk r16-7949) and get the same issue. All 6 PCH files differ, and 33 out of 475 .o files differ (vs 6 with gcc-15). I will file this upstream on GCC bugzilla.
OpenPGP_signature.asc
Description: OpenPGP digital signature

