rtl-ssa: Avoid using a stale splay tree root [PR116009]

In the fix for PR115928, I'd failed to notice that "root" was used
later in the function, so needed to be updated.

gcc/
	PR rtl-optimization/116009
	* rtl-ssa/accesses.cc (function_info::add_def): Set the root
	local variable after removing the old clobber group.

gcc/testsuite/
	PR rtl-optimization/116009
	* gcc.c-torture/compile/pr116009.c: New test.
This commit is contained in:
Richard Sandiford 2024-07-22 16:42:16 +01:00
parent e62988b777
commit 34f33ea801
2 changed files with 25 additions and 1 deletions

View file

@ -946,7 +946,8 @@ function_info::add_def (def_info *def)
prev = split_clobber_group (group, insn);
next = prev->next_def ();
tree.remove_root ();
last->set_splay_root (tree.root ());
root = tree.root ();
last->set_splay_root (root);
}
// COMPARISON is < 0 if DEF comes before ROOT or > 0 if DEF comes
// after ROOT.

View file

@ -0,0 +1,23 @@
int tt, tt1;
int y6;
void ff(void);
int ttt;
void g(int var) {
do {
int t1 = var == 45 || var == 3434;
if (tt != 0)
if (t1)
ff();
if (tt < 0)
break;
if (t1)
ff();
if (tt < 0)
break;
ff();
if (tt1)
var = y6;
if (t1)
ff();
} while(1);
}