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.

Attachment: OpenPGP_signature.asc
Description: OpenPGP digital signature

Reply via email to