diff --git a/gnu/local.mk b/gnu/local.mk index bd86c88177a..a25d0c015eb 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -2239,6 +2239,7 @@ dist_patch_DATA = \ %D%/packages/patches/racket-chez-scheme-bin-sh.patch \ %D%/packages/patches/racket-launcher-config-dir.patch \ %D%/packages/patches/racket-rktio-bin-sh.patch \ + %D%/packages/patches/re2c-Use-maximum-alignment.patch \ %D%/packages/patches/reduce-unbundle-libffi.patch \ %D%/packages/patches/remake-impure-dirs.patch \ %D%/packages/patches/restartd-update-robust.patch \ diff --git a/gnu/packages/patches/re2c-Use-maximum-alignment.patch b/gnu/packages/patches/re2c-Use-maximum-alignment.patch new file mode 100644 index 00000000000..6d5b95354fb --- /dev/null +++ b/gnu/packages/patches/re2c-Use-maximum-alignment.patch @@ -0,0 +1,48 @@ +https://github.com/skvadrik/re2c/pull/555 + +From 44125b74628d17f0a0a6cf9b51dd1f24169cd2d5 Mon Sep 17 00:00:00 2001 +From: Alexey Abramov +Date: Fri, 22 Aug 2025 08:10:08 +0200 +Subject: [PATCH] Use maximum alignment to ensure compatibility across all + architectures. + +--- + src/util/allocator.h | 14 ++++++++++---- + 1 file changed, 10 insertions(+), 4 deletions(-) + +diff --git a/src/util/allocator.h b/src/util/allocator.h +index e6c85585b..56daf056f 100644 +--- a/src/util/allocator.h ++++ b/src/util/allocator.h +@@ -3,6 +3,7 @@ + + #include + #include ++#include + #include + #include + +@@ -78,11 +79,16 @@ class slab_allocator_t { + }; + + // Use maximum alignment. ++// Use alignment based on pointer size: 32-bit platforms need stronger alignment ++// for 64-bit types (double, long long), while 64-bit platforms are already ++// sufficiently aligned with pointer-sized alignment. ++constexpr size_t ALLOCATOR_ALIGNMENT = (sizeof(void*) == 4) ? alignof(max_align_t) : sizeof(void*); ++ + // Use different types to prevent accidentally mixing allocators for data with different life spans. +-using AstAllocator = slab_allocator_t; +-using IrAllocator = slab_allocator_t; +-using DfaAllocator = slab_allocator_t; +-using OutAllocator = slab_allocator_t; ++using AstAllocator = slab_allocator_t; ++using IrAllocator = slab_allocator_t; ++using DfaAllocator = slab_allocator_t; ++using OutAllocator = slab_allocator_t; + + } // namespace re2c + +-- +2.50.1 + diff --git a/gnu/packages/re2c.scm b/gnu/packages/re2c.scm index 7ff0dd9e4b9..3eb898dd4c9 100644 --- a/gnu/packages/re2c.scm +++ b/gnu/packages/re2c.scm @@ -2,6 +2,7 @@ ;;; Copyright © 2017, 2020 Sergei Trofimovich ;;; Copyright © 2021 Sergei Trofimovich ;;; Copyright © 2018 Tobias Geerinckx-Rice +;;; Copyright © 2025 Alexey Abramov ;;; ;;; This file is part of GNU Guix. ;;; @@ -20,7 +21,10 @@ (define-module (gnu packages re2c) #:use-module (guix licenses) + #:use-module (guix gexp) + #:use-module (guix utils) #:use-module (guix packages) + #:use-module (gnu packages) #:use-module (gnu packages python) #:use-module (guix download) #:use-module (guix build-system gnu)) @@ -38,9 +42,19 @@ (base32 "07ysqgdm0h566a8lwnpdgycp93vz7zskzihsgah3bla0ycj2pp69")))) (build-system gnu-build-system) - (home-page "https://re2c.org/") + (arguments + (if (target-arm32?) + (list #:phases + #~(modify-phases %standard-phases + (add-after 'unpack 'patch-sources + (lambda _ + (invoke "patch" "-p1" "--force" "--input" + #$(local-file (search-patch + "re2c-Use-maximum-alignment.patch"))))))) + '())) (native-inputs (list python)) ; for the test driver + (home-page "https://re2c.org/") (synopsis "Lexer generator for C/C++") (description "@code{re2c} generates minimalistic hard-coded state machine (as opposed