Skip to content

Build failure on s390x with Clang 17 due to int128 alignment used in `__sync_` operations

Description of problem

We experienced this downstream, but filing this here since the code still seems to be the same in git.

https://reviews.llvm.org/D143813 introduced this warning since, according to the description, __int128 needs to be 8-byte aligned on s390 but the code in host/include/generic/host/atomic128-ldst.h unconditionally uses 16-byte alignment.

The output is:

In file included from ../accel/tcg/cputlb.c:32:
In file included from /builddir/build/BUILD/qemu-8.1.0/include/exec/helper-proto-common.h:10:
In file included from /builddir/build/BUILD/qemu-8.1.0/include/qemu/atomic128.h:62:
/builddir/build/BUILD/qemu-8.1.0/host/include/generic/host/atomic128-ldst.h:68:15: error: __sync builtin operation MUST have natural alignment (consider using __atomic). [-Werror,-Wsync-alignment]
   68 |     } while (!__sync_bool_compare_and_swap_16(ptr_align, old, new.i));
      |               ^
In file included from ../accel/tcg/cputlb.c:32:
In file included from /builddir/build/BUILD/qemu-8.1.0/include/exec/helper-proto-common.h:10:
In file included from /builddir/build/BUILD/qemu-8.1.0/include/qemu/atomic128.h:61:
/builddir/build/BUILD/qemu-8.1.0/host/include/generic/host/atomic128-cas.h:36:11: error: __sync builtin operation MUST have natural alignment (consider using __atomic). [-Werror,-Wsync-alignment]
   36 |     r.i = __sync_val_compare_and_swap_16(ptr_align, c.i, n.i);
      |           ^
2 errors generated.
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information