summary refs log tree commit diff
path: root/gnu/packages
diff options
context:
space:
mode:
authorMarius Bakke <marius@gnu.org>2022-07-25 03:23:31 +0200
committerMarius Bakke <marius@gnu.org>2022-07-27 17:53:49 +0200
commit8a2b5f3f587459c11c037b9d372b4070263baae9 (patch)
tree4d8a6c7291c28114105e93a351a2dc8c251cf3f3 /gnu/packages
parentb3fb4ed0b007b99248b3f17e79d117bbe65f0815 (diff)
downloadguix-8a2b5f3f587459c11c037b9d372b4070263baae9.tar.gz
gnu: GCC: Fix union optimization issue.
* gnu/packages/patches/gcc-10-tree-sra-union-handling.patch: New file.
* gnu/local.mk (dist_patch_DATA): Adjust accordingly.
* gnu/packages/gcc.scm (gcc-10, gcc-11)[source](patches): Add it.
* gnu/packages/rust.scm (rust-bootstrap)[native-inputs]: Remove GCC-9.
Diffstat (limited to 'gnu/packages')
-rw-r--r--gnu/packages/gcc.scm6
-rw-r--r--gnu/packages/patches/gcc-10-tree-sra-union-handling.patch33
-rw-r--r--gnu/packages/rust.scm8
3 files changed, 37 insertions, 10 deletions
diff --git a/gnu/packages/gcc.scm b/gnu/packages/gcc.scm
index 0d8a62cbe7..a957ae3480 100644
--- a/gnu/packages/gcc.scm
+++ b/gnu/packages/gcc.scm
@@ -665,7 +665,8 @@ It also includes runtime support libraries for these languages.")
              (base32
               "1wg4xdizkksmwi66mvv2v4pk3ja8x64m7v9gzhykzd3wrmdpsaf9"))
             (patches (search-patches "gcc-9-strmov-store-file-names.patch"
-                                     "gcc-5.0-libvtv-runpath.patch"))
+                                     "gcc-5.0-libvtv-runpath.patch"
+                                     "gcc-10-tree-sra-union-handling.patch"))
             (modules '((guix build utils)))
             (snippet gcc-canadian-cross-objdump-snippet)))
    (properties
@@ -686,7 +687,8 @@ It also includes runtime support libraries for these languages.")
              (base32
               "0fdclcwf728wbq52vphfcjywzhpsjp3kifzj3pib3xcihs0z4z5l"))
             (patches (search-patches "gcc-9-strmov-store-file-names.patch"
-                                     "gcc-5.0-libvtv-runpath.patch"))
+                                     "gcc-5.0-libvtv-runpath.patch"
+                                     "gcc-10-tree-sra-union-handling.patch"))
             (modules '((guix build utils)))
             (snippet gcc-canadian-cross-objdump-snippet)))
 
diff --git a/gnu/packages/patches/gcc-10-tree-sra-union-handling.patch b/gnu/packages/patches/gcc-10-tree-sra-union-handling.patch
new file mode 100644
index 0000000000..aae5fc9f72
--- /dev/null
+++ b/gnu/packages/patches/gcc-10-tree-sra-union-handling.patch
@@ -0,0 +1,33 @@
+Fix a regression in GCC 10/11/12 where some union structures
+could get miscompiled when optimizations are enabled:
+
+  https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105860
+
+Taken from upstream:
+
+  https://gcc.gnu.org/g:16afe2e2862f3dd93c711d7f8d436dee23c6c34d
+
+diff --git a/gcc/tree-sra.c b/gcc/tree-sra.c
+index 09d951a261b..420329f63f6 100644
+--- a/gcc/tree-sra.c
++++ b/gcc/tree-sra.c
+@@ -1647,7 +1647,18 @@ build_ref_for_offset (location_t loc, tree base, poly_int64 offset,
+ static tree
+ build_reconstructed_reference (location_t, tree base, struct access *model)
+ {
+-  tree expr = model->expr, prev_expr = NULL;
++  tree expr = model->expr;
++  /* We have to make sure to start just below the outermost union.  */
++  tree start_expr = expr;
++  while (handled_component_p (expr))
++    {
++      if (TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0))) == UNION_TYPE)
++	start_expr = expr;
++      expr = TREE_OPERAND (expr, 0);
++    }
++
++  expr = start_expr;
++  tree prev_expr = NULL_TREE;
+   while (!types_compatible_p (TREE_TYPE (expr), TREE_TYPE (base)))
+     {
+       if (!handled_component_p (expr))
diff --git a/gnu/packages/rust.scm b/gnu/packages/rust.scm
index 25472fefb0..759bf9a631 100644
--- a/gnu/packages/rust.scm
+++ b/gnu/packages/rust.scm
@@ -169,14 +169,6 @@
        ("zlib" ,zlib)))
     (native-inputs
      `(("bison" ,bison)
-       ;; A compiler bug in gcc 10/11/12/13 prevents us from using gcc-10.4. See:
-       ;; https://github.com/thepowersgang/mrustc/issues/266
-       ;; https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105860
-       ("gcc" ,gcc-9)
-       ;; TODO: STARTFILE_PREFIX_SPEC is fixed on gcc<10 on core-updates.
-       ,@(if (target-riscv64?)
-           `(("gcc:lib" ,gcc-9 "lib"))
-           '())
        ("flex" ,flex)
        ("pkg-config" ,pkg-config)
        ;; Required for the libstd sources.