From e1bf330763c4b8b0e752001198b9257c2f794f50 Mon Sep 17 00:00:00 2001 From: Yelninei Date: Wed, 25 Mar 2026 08:41:18 +0000 Subject: [PATCH] gnu: ldc: Fix int128 alignment. * gnu/packages/patches/ldc-i686-int128-alignment.patch: New patches. * gnu/local.mk (dist_patch_DATA): Register it. * gnu/packages/dlang.scm (ldc-bootstrap)[patches]: Use it. Change-Id: I21671c2a54634c284d8832f0627fe28494e1b0b8 Signed-off-by: Liliana Marie Prikler --- gnu/local.mk | 1 + gnu/packages/dlang.scm | 3 +- .../patches/ldc-i686-int128-alignment.patch | 40 +++++++++++++++++++ 3 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 gnu/packages/patches/ldc-i686-int128-alignment.patch diff --git a/gnu/local.mk b/gnu/local.mk index f3d725dd2f..ae24080b03 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -1754,6 +1754,7 @@ dist_patch_DATA = \ %D%/packages/patches/kwin-unwrap-executable-name-for-dot-desktop-search.patch\ %D%/packages/patches/laby-make-install.patch \ %D%/packages/patches/laby-use-tmpdir-from-runtime.patch \ + %D%/packages/patches/ldc-i686-int128-alignment.patch \ %D%/packages/patches/ldns-drill-examples.patch \ %D%/packages/patches/leela-zero-gtest.patch \ %D%/packages/patches/less-hurd-path-max.patch \ diff --git a/gnu/packages/dlang.scm b/gnu/packages/dlang.scm index 9f11babdc0..a00138fc56 100644 --- a/gnu/packages/dlang.scm +++ b/gnu/packages/dlang.scm @@ -75,7 +75,8 @@ (uri (string-append "https://github.com/ldc-developers/ldc/releases" "/download/v" version "/ldc-" version "-src.tar.gz")) (sha256 - (base32 "13pkg69wjj4ali4ikijicccpg8y6f2hghhb70z9lrqr2w3pkhqna")))) + (base32 "13pkg69wjj4ali4ikijicccpg8y6f2hghhb70z9lrqr2w3pkhqna")) + (patches (search-patches "ldc-i686-int128-alignment.patch")))) (build-system cmake-build-system) (arguments `(#:disallowed-references (,tzdata-for-tests) diff --git a/gnu/packages/patches/ldc-i686-int128-alignment.patch b/gnu/packages/patches/ldc-i686-int128-alignment.patch new file mode 100644 index 0000000000..73a93d239c --- /dev/null +++ b/gnu/packages/patches/ldc-i686-int128-alignment.patch @@ -0,0 +1,40 @@ +Description: Adjust int128 alignment +Author: Walter Bright +Origin: backport, https://github.com/ldc-developers/ldc/commit/f634e2a6542a8b563d9ba1b680afd5337b4c09ea +Bug: https://github.com/ldc-developers/ldc/issues/1356 +Last-Update: 2024-12-30 +--- +This patch header follows DEP-3: http://dep.debian.net/deps/dep3/ +--- a/dmd/common/int128.d ++++ b/dmd/common/int128.d +@@ -20,7 +20,29 @@ + alias U = ulong; + enum Ubits = uint(U.sizeof * 8); + +-align(16) struct Cent ++version (DigitalMars) ++{ ++ /* The alignment should follow target.stackAlign(), ++ * which is `isXmmSupported() ? 16 : (is64bit ? 8 : 4) ++ */ ++ version (D_SIMD) ++ private enum Cent_alignment = 16; ++ else version (X86_64) ++ private enum Cent_alignment = 8; ++ else ++ private enum Cent_alignment = 4; ++} ++else ++{ ++ version (LDC) version (X86) version = LDC_X86; ++ ++ version (X86_64) private enum Cent_alignment = 16; ++ // 32-bit x86: need default alignment due to https://github.com/ldc-developers/ldc/issues/1356 ++ else version (LDC_X86) private enum Cent_alignment = U.alignof; ++ else private enum Cent_alignment = (size_t.sizeof * 2); ++} ++ ++align(Cent_alignment) struct Cent + { + U lo; // low 64 bits + U hi; // high 64 bits