diff --git a/SOURCES/gcc8-pr100508.patch b/SOURCES/gcc8-pr100508.patch new file mode 100644 index 0000000..7504ae5 --- /dev/null +++ b/SOURCES/gcc8-pr100508.patch @@ -0,0 +1,74 @@ +commit ba374dfb937a8ac1c7c4740913331951a924f88b +Author: Jakub Jelinek +Date: Wed May 12 10:38:35 2021 +0200 + + expand: Don't reuse DEBUG_EXPRs with vector type if they have different modes [PR100508] + + The inliner doesn't remap DEBUG_EXPR_DECLs, so the same decls can appear + in multiple functions. + Furthermore, expansion reuses corresponding DEBUG_EXPRs too, so they again + can be reused in multiple functions. + Neither of that is a major problem, DEBUG_EXPRs are just magic value holders + and what value they stand for is independent in each function and driven by + what debug stmts or DEBUG_INSNs they are bound to. + Except for DEBUG_EXPR*s with vector types, TYPE_MODE can be either BLKmode + or some vector mode depending on whether current function's enabled ISAs + support that vector mode or not. On the following testcase, we expand it + first in foo function without AVX2 enabled and so the DEBUG_EXPR is + BLKmode, but later the same DEBUG_EXPR_DECL is used in a simd clone with + AVX2 enabled and expansion ICEs because of a mode mismatch. + + The following patch fixes that by forcing recreation of a DEBUG_EXPR if + there is a mode mismatch for vector typed DEBUG_EXPR_DECL, DEBUG_EXPRs + will be still reused in between functions otherwise and within the same + function the mode should be always the same. + + 2021-05-12 Jakub Jelinek + + PR middle-end/100508 + * cfgexpand.c (expand_debug_expr): For DEBUG_EXPR_DECL with vector + type, don't reuse DECL_RTL if it has different mode, instead force + creation of a new DEBUG_EXPR. + + * gcc.dg/gomp/pr100508.c: New test. + + (cherry picked from commit 19040050aa2c8ee890fc58dda48639fc91bf0af0) + +diff --git a/gcc/cfgexpand.c b/gcc/cfgexpand.c +index b1535e15d28..a7d05202184 100644 +--- a/gcc/cfgexpand.c ++++ b/gcc/cfgexpand.c +@@ -4358,7 +4358,12 @@ expand_debug_expr (tree exp) + op0 = DECL_RTL_IF_SET (exp); + + if (op0) +- return op0; ++ { ++ if (GET_MODE (op0) != mode) ++ gcc_assert (VECTOR_TYPE_P (TREE_TYPE (exp))); ++ else ++ return op0; ++ } + + op0 = gen_rtx_DEBUG_EXPR (mode); + DEBUG_EXPR_TREE_DECL (op0) = exp; +diff --git a/gcc/testsuite/gcc.dg/gomp/pr100508.c b/gcc/testsuite/gcc.dg/gomp/pr100508.c +new file mode 100644 +index 00000000000..c3fa2fc258e +--- /dev/null ++++ b/gcc/testsuite/gcc.dg/gomp/pr100508.c +@@ -0,0 +1,14 @@ ++/* PR middle-end/100508 */ ++/* { dg-do compile } */ ++/* { dg-options "-O2 -g -fopenmp-simd" } */ ++ ++typedef int __attribute__((__vector_size__(32))) V; ++V j; ++ ++#pragma omp declare simd ++int ++foo (void) ++{ ++ V m = j; ++ return 0; ++} diff --git a/SPECS/gcc.spec b/SPECS/gcc.spec index e2721a9..f89815b 100644 --- a/SPECS/gcc.spec +++ b/SPECS/gcc.spec @@ -4,7 +4,7 @@ %global gcc_major 8 # Note, gcc_release must be integer, if you want to add suffixes to # %%{release}, append them after %%{gcc_release} on Release: line. -%global gcc_release 23 +%global gcc_release 24 %global nvptx_tools_gitrev c28050f60193b3b95a18866a96f03334e874e78f %global nvptx_newlib_gitrev aadc8eb0ec43b7cd0dd2dfb484bae63c8b05ef24 %global _unpackaged_files_terminate_build 0 @@ -307,6 +307,7 @@ Patch46: gcc8-pr87723.patch Patch47: gcc8-pr111039.patch Patch48: gcc8-pr111070.patch Patch49: gcc8-RHEL-32886.patch +Patch50: gcc8-pr100508.patch Patch1000: nvptx-tools-no-ptxas.patch Patch1001: nvptx-tools-build.patch @@ -931,6 +932,7 @@ so that there cannot be any synchronization problems. %patch47 -p1 -b .pr111039~ %patch48 -p1 -b .pr111070~ %patch49 -p0 -b .32886~ +%patch50 -p1 -b .pr100508~ cd nvptx-tools-%{nvptx_tools_gitrev} %patch1000 -p1 -b .nvptx-tools-no-ptxas~ @@ -3338,6 +3340,9 @@ fi %{ANNOBIN_GCC_PLUGIN_DIR}/gcc-annobin.so.0.0.0 %changelog +* Mon Feb 24 2025 Marek Polacek 8.5.0-24 +- don't reuse DEBUG_EXPRs with vector type (PR middle-end/100508, RHEL-79501) + * Fri Feb 7 2025 Marek Polacek 8.5.0-23 - rebuild for CVE-2020-11023 (RHEL-78274)