diff options
Diffstat (limited to 'sys-devel/gcc/files')
-rw-r--r-- | sys-devel/gcc/files/gcc-13.0.1_pre20230402-PR109304-ICE-python3.12.patch | 72 |
1 files changed, 72 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 |