diff --git a/gcc.spec b/gcc.spec index 1fcaa56..f2ac97e 100644 --- a/gcc.spec +++ b/gcc.spec @@ -266,6 +266,7 @@ Patch11: gcc11-rh1574936.patch Patch12: gcc11-d-shared-libphobos.patch Patch13: gcc11-pr99341-revert.patch Patch14: gcc11-pr100379.patch +Patch15: gcc11-pr100566.patch Patch100: gcc11-fortran-fdec-duplicates.patch Patch101: gcc11-fortran-flogical-as-integer.patch @@ -790,6 +791,7 @@ to NVidia PTX capable devices if available. %patch12 -p0 -b .d-shared-libphobos~ %patch13 -p0 -b .pr99341-revert~ %patch14 -p0 -b .pr100379~ +%patch15 -p0 -b .pr100566~ %if 0%{?rhel} >= 9 %patch100 -p1 -b .fortran-fdec-duplicates~ @@ -3145,6 +3147,7 @@ end tree-optimization/100253, tree-optimization/100278, tree-optimization/100329, tree-optimization/100414 - fix build with removed linux/cyclades.h header (PR sanitizer/100379) +- fix up mausezahn miscompilation (#1958887, PR tree-optimization/100566) * Wed Apr 28 2021 Jakub Jelinek 11.1.1-1 - update from releases/gcc-11-branch diff --git a/gcc11-pr100566.patch b/gcc11-pr100566.patch new file mode 100644 index 0000000..6134be2 --- /dev/null +++ b/gcc11-pr100566.patch @@ -0,0 +1,69 @@ +2021-05-12 Richard Biener + + PR tree-optimization/100566 + * tree-ssa-sccvn.c (dominated_by_p_w_unex): Properly handle + allow_back for all edge queries. + + * gcc.dg/torture/pr100566.c: New testcase. + +--- gcc/tree-ssa-sccvn.c ++++ gcc/tree-ssa-sccvn.c +@@ -4529,7 +4529,8 @@ dominated_by_p_w_unex (basic_block bb1, basic_block bb2, bool allow_back) + /* Iterate to the single executable bb2 successor. */ + edge succe = NULL; + FOR_EACH_EDGE (e, ei, bb2->succs) +- if (e->flags & EDGE_EXECUTABLE) ++ if ((e->flags & EDGE_EXECUTABLE) ++ || (!allow_back && (e->flags & EDGE_DFS_BACK))) + { + if (succe) + { +@@ -4547,7 +4548,8 @@ dominated_by_p_w_unex (basic_block bb1, basic_block bb2, bool allow_back) + { + FOR_EACH_EDGE (e, ei, succe->dest->preds) + if (e != succe +- && (e->flags & EDGE_EXECUTABLE)) ++ && ((e->flags & EDGE_EXECUTABLE) ++ || (!allow_back && (e->flags & EDGE_DFS_BACK)))) + { + succe = NULL; + break; +--- gcc/testsuite/gcc.dg/torture/pr100566.c ++++ gcc/testsuite/gcc.dg/torture/pr100566.c +@@ -0,0 +1,36 @@ ++/* { dg-do run } */ ++ ++volatile int s, c; ++ ++__attribute__((noipa)) void ++foo (void) ++{ ++ if (c++ > 1) ++ __builtin_abort (); ++} ++ ++__attribute__((noipa)) int ++bar (void) ++{ ++ int i = 0, j = s; ++ if (j == 0) ++ goto lab; ++ for (i = 0; i < j; i++) ++ { ++ lab: ++ foo (); ++ if (!j) ++ goto lab; ++ } ++ return 0; ++} ++ ++int ++main () ++{ ++ s = 1; ++ bar (); ++ if (c != 1) ++ __builtin_abort (); ++ return 0; ++}