From 8a2b5f3f587459c11c037b9d372b4070263baae9 Mon Sep 17 00:00:00 2001 From: Marius Bakke Date: Mon, 25 Jul 2022 03:23:31 +0200 Subject: 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. --- .../patches/gcc-10-tree-sra-union-handling.patch | 33 ++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 gnu/packages/patches/gcc-10-tree-sra-union-handling.patch (limited to 'gnu/packages/patches/gcc-10-tree-sra-union-handling.patch') 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)) -- cgit v1.2.3