diff options
author | Sam James <sam@gentoo.org> | 2023-04-05 02:10:58 +0100 |
---|---|---|
committer | Sam James <sam@gentoo.org> | 2023-04-05 02:10:58 +0100 |
commit | f5200bf6e1bf373bc4a04128746ad64ca29d2626 (patch) | |
tree | c0e8a8f79baec5266cf54237b726a6332e9da840 /sys-devel | |
parent | dev-python/cffi: fix tests w/ python3.11 (diff) | |
download | gentoo-f5200bf6e1bf373bc4a04128746ad64ca29d2626.tar.gz gentoo-f5200bf6e1bf373bc4a04128746ad64ca29d2626.tar.bz2 gentoo-f5200bf6e1bf373bc4a04128746ad64ca29d2626.zip |
sys-devel/gcc: backport 13 fix for Python 3.12 ICE
Closes: https://bugs.gentoo.org/903245
Signed-off-by: Sam James <sam@gentoo.org>
Diffstat (limited to 'sys-devel')
-rw-r--r-- | sys-devel/gcc/files/gcc-13.0.1_pre20230402-PR109304-ICE-python3.12.patch | 72 | ||||
-rw-r--r-- | sys-devel/gcc/gcc-13.0.1_pre20230402-r1.ebuild | 57 |
2 files changed, 129 insertions, 0 deletions
diff --git a/sys-devel/gcc/files/gcc-13.0.1_pre20230402-PR109304-ICE-python3.12.patch b/sys-devel/gcc/files/gcc-13.0.1_pre20230402-PR109304-ICE-python3.12.patch new file mode 100644 index 000000000000..8b6baea37b70 --- /dev/null +++ b/sys-devel/gcc/files/gcc-13.0.1_pre20230402-PR109304-ICE-python3.12.patch @@ -0,0 +1,72 @@ +https://bugs.gentoo.org/903245 +https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109304 +https://gcc.gnu.org/git/gitweb.cgi?p=gcc.git;h=d0b961b802dd7d9d555ff4515835a479329326e9 + +From d0b961b802dd7d9d555ff4515835a479329326e9 Mon Sep 17 00:00:00 2001 +From: Richard Biener <rguenther@suse.de> +Date: Tue, 28 Mar 2023 08:06:12 +0000 +Subject: [PATCH] tree-optimization/109304 - properly handle instrumented + aliases + +When adjusting calls to reflect instrumentation we failed to handle +calls to aliases since they appear to have no body. Instead resort +to symtab node availability. The patch also avoids touching +internal function calls in a more obvious way (builtins might +have a body available). + +profiledbootstrap & regtest running on x86_64-unknown-linux-gnu. + +Honza - does this look OK? + + PR tree-optimization/109304 + * tree-profile.cc (tree_profiling): Use symtab node + availability to decide whether to skip adjusting calls. + Do not adjust calls to internal functions. + + * gcc.dg/pr109304.c: New testcase. +--- /dev/null ++++ b/gcc/testsuite/gcc.dg/pr109304.c +@@ -0,0 +1,12 @@ ++/* { dg-do compile } */ ++/* { dg-require-profiling "-fprofile-generate" } */ ++/* { dg-require-effective-target fpic } */ ++/* { dg-options "-O3 -fprofile-generate -fPIC -fno-semantic-interposition" } */ ++ ++int PyUnicode_FindChar_i; ++int PyUnicode_FindChar() ++{ ++ while (PyUnicode_FindChar_i) ++ if (PyUnicode_FindChar()) ++ break; ++} +--- a/gcc/tree-profile.cc ++++ b/gcc/tree-profile.cc +@@ -808,7 +808,7 @@ tree_profiling (void) + { + if (!gimple_has_body_p (node->decl) + || !(!node->clone_of +- || node->decl != node->clone_of->decl)) ++ || node->decl != node->clone_of->decl)) + continue; + + /* Don't profile functions produced for builtin stuff. */ +@@ -842,12 +842,15 @@ tree_profiling (void) + for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi)) + { + gcall *call = dyn_cast <gcall *> (gsi_stmt (gsi)); +- if (!call) ++ if (!call || gimple_call_internal_p (call)) + continue; + + /* We do not clear pure/const on decls without body. */ + tree fndecl = gimple_call_fndecl (call); +- if (fndecl && !gimple_has_body_p (fndecl)) ++ cgraph_node *callee; ++ if (fndecl ++ && (callee = cgraph_node::get (fndecl)) ++ && callee->get_availability (node) == AVAIL_NOT_AVAILABLE) + continue; + + /* Drop the const attribute from the call type (the pure +-- +2.31.1 diff --git a/sys-devel/gcc/gcc-13.0.1_pre20230402-r1.ebuild b/sys-devel/gcc/gcc-13.0.1_pre20230402-r1.ebuild new file mode 100644 index 000000000000..004f9937b489 --- /dev/null +++ b/sys-devel/gcc/gcc-13.0.1_pre20230402-r1.ebuild @@ -0,0 +1,57 @@ +# Copyright 1999-2023 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +TOOLCHAIN_PATCH_DEV="sam" +PATCH_VER="9" +PATCH_GCC_VER="13.1.0" +MUSL_VER="1" +MUSL_GCC_VER="13.1.0" + +if [[ $(ver_cut 3) == 9999 ]] ; then + MY_PV_2=$(ver_cut 2) + MY_PV_3=$(($(ver_cut 3) - 9998)) + if [[ ${MY_PV_2} == 0 ]] ; then + MY_PV_2=0 + MY_PV_3=0 + else + MY_PV_2=$(($(ver_cut 2) - 1)) + fi + + # e.g. 12.2.9999 -> 12.1.1 + TOOLCHAIN_GCC_PV=$(ver_cut 1).${MY_PV_2}.${MY_PV_3} +fi + +inherit toolchain +# Needs to be after inherit (for now?), bug #830908 +EGIT_BRANCH=master + +# Don't keyword live ebuilds +if ! tc_is_live && [[ -z ${TOOLCHAIN_USE_GIT_PATCHES} ]] ; then +# KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~loong ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86" + KEYWORDS="~loong" +fi + +if [[ ${CATEGORY} != cross-* ]] ; then + # Technically only if USE=hardened *too* right now, but no point in complicating it further. + # If GCC is enabling CET by default, we need glibc to be built with support for it. + # bug #830454 + RDEPEND="elibc_glibc? ( sys-libs/glibc[cet(-)?] )" + DEPEND="${RDEPEND}" + BDEPEND=">=${CATEGORY}/binutils-2.30[cet(-)?]" +fi + +src_prepare() { + local p upstreamed_patches=( + # add them here + ) + for p in "${upstreamed_patches[@]}"; do + rm -v "${WORKDIR}/patch/${p}" || die + done + + toolchain_src_prepare + + eapply "${FILESDIR}"/${P}-PR109304-ICE-python3.12.patch + eapply_user +} |