@@ -1,3 +1,9 @@
+2017-02-21 Jeff Law <law@redhat.com>
+
+ PR tree-optimization/79621
+ * gimple-ssa-isolate-paths.c (find_implicit_erroneous_behavior): Ignore
+ blocks with edges to themselves.
+
2017-02-21 Jakub Jelinek <jakub@redhat.com>
PR target/79570
@@ -35,6 +35,7 @@ along with GCC; see the file COPYING3. If not see
#include "tree-ssa.h"
#include "cfgloop.h"
#include "tree-cfg.h"
+#include "cfganal.h"
#include "intl.h"
@@ -352,6 +353,16 @@ find_implicit_erroneous_behavior (void)
if (has_abnormal_or_eh_outgoing_edge_p (bb))
continue;
+
+ /* If BB has an edge to itself, then duplication of BB below
+ could result in reallocation of BB's PHI nodes. If that happens
+ then the loop below over the PHIs would use the old PHI and
+ thus invalid information. We don't have a good way to know
+ if a PHI has been reallocated, so just avoid isolation in
+ this case. */
+ if (find_edge (bb, bb))
+ continue;
+
/* First look for a PHI which sets a pointer to NULL and which
is then dereferenced within BB. This is somewhat overly
conservative, but probably catches most of the interesting
@@ -1,3 +1,8 @@
+2017-02-21 Jeff Law <law@redhat.com>
+
+ PR tree-optimization/79621
+ * gcc.c-torture/compile/pr79621.c: New test.
+
2017-02-21 Jakub Jelinek <jakub@redhat.com>
PR target/79570
new file mode 100644
@@ -0,0 +1,18 @@
+int b5;
+
+void
+h6 (int zb, int e7)
+{
+ while (b5 > 0)
+ {
+ int gv;
+
+ for (gv = 1; gv < 4; ++gv)
+ {
+ ((zb != 0) ? b5 : gv) && (b5 /= e7);
+ zb = 0;
+ }
+ e7 = 0;
+ }
+}
+