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.master
parent
b3fb4ed0b0
commit
8a2b5f3f58
|
@ -1125,6 +1125,7 @@ dist_patch_DATA = \
|
||||||
%D%/packages/patches/gcc-12-strmov-store-file-names.patch \
|
%D%/packages/patches/gcc-12-strmov-store-file-names.patch \
|
||||||
%D%/packages/patches/gcc-10-cross-environment-variables.patch \
|
%D%/packages/patches/gcc-10-cross-environment-variables.patch \
|
||||||
%D%/packages/patches/gcc-12-cross-environment-variables.patch \
|
%D%/packages/patches/gcc-12-cross-environment-variables.patch \
|
||||||
|
%D%/packages/patches/gcc-10-tree-sra-union-handling.patch \
|
||||||
%D%/packages/patches/gcolor3-update-libportal-usage.patch \
|
%D%/packages/patches/gcolor3-update-libportal-usage.patch \
|
||||||
%D%/packages/patches/gd-fix-tests-on-i686.patch \
|
%D%/packages/patches/gd-fix-tests-on-i686.patch \
|
||||||
%D%/packages/patches/gd-brect-bounds.patch \
|
%D%/packages/patches/gd-brect-bounds.patch \
|
||||||
|
|
|
@ -665,7 +665,8 @@ It also includes runtime support libraries for these languages.")
|
||||||
(base32
|
(base32
|
||||||
"1wg4xdizkksmwi66mvv2v4pk3ja8x64m7v9gzhykzd3wrmdpsaf9"))
|
"1wg4xdizkksmwi66mvv2v4pk3ja8x64m7v9gzhykzd3wrmdpsaf9"))
|
||||||
(patches (search-patches "gcc-9-strmov-store-file-names.patch"
|
(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)))
|
(modules '((guix build utils)))
|
||||||
(snippet gcc-canadian-cross-objdump-snippet)))
|
(snippet gcc-canadian-cross-objdump-snippet)))
|
||||||
(properties
|
(properties
|
||||||
|
@ -686,7 +687,8 @@ It also includes runtime support libraries for these languages.")
|
||||||
(base32
|
(base32
|
||||||
"0fdclcwf728wbq52vphfcjywzhpsjp3kifzj3pib3xcihs0z4z5l"))
|
"0fdclcwf728wbq52vphfcjywzhpsjp3kifzj3pib3xcihs0z4z5l"))
|
||||||
(patches (search-patches "gcc-9-strmov-store-file-names.patch"
|
(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)))
|
(modules '((guix build utils)))
|
||||||
(snippet gcc-canadian-cross-objdump-snippet)))
|
(snippet gcc-canadian-cross-objdump-snippet)))
|
||||||
|
|
||||||
|
|
|
@ -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))
|
|
@ -169,14 +169,6 @@
|
||||||
("zlib" ,zlib)))
|
("zlib" ,zlib)))
|
||||||
(native-inputs
|
(native-inputs
|
||||||
`(("bison" ,bison)
|
`(("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)
|
("flex" ,flex)
|
||||||
("pkg-config" ,pkg-config)
|
("pkg-config" ,pkg-config)
|
||||||
;; Required for the libstd sources.
|
;; Required for the libstd sources.
|
||||||
|
|
Reference in New Issue