tree-optimization/109331 - make sure to clean up the CFG after forwprop

When forwprop discovers unreachable code or makes decisions based
on unreachable edges make sure to cleanup the CFG since otherwise
SSA form can become invalid.

	PR tree-optimization/109331
	* tree-ssa-forwprop.cc (pass_forwprop::execute): When we
	discover a taken edge make sure to cleanup the CFG.

	* gcc.dg/torture/pr109331.c: New testcase.
This commit is contained in:
Richard Biener 2023-03-29 11:59:16 +02:00
parent ad32fcb8e9
commit 86efc490ab
2 changed files with 21 additions and 1 deletions

View File

@ -0,0 +1,16 @@
/* { dg-do compile } */
char *ustol_dpp;
void ustol(int flags)
{
char *s;
if (s)
flags |= 3;
switch (flags & 3)
case 3:
while (*s)
case '+':
++s;
if (flags)
ustol_dpp = s;
}

View File

@ -4046,7 +4046,11 @@ pass_forwprop::execute (function *fun)
/* Mark outgoing exectuable edges. */
if (edge e = find_taken_edge (bb, NULL))
e->flags |= EDGE_EXECUTABLE;
{
e->flags |= EDGE_EXECUTABLE;
if (EDGE_COUNT (bb->succs) > 1)
cfg_changed = true;
}
else
{
FOR_EACH_EDGE (e, ei, bb->succs)