https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94001
Jakub Jelinek <jakub at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |ASSIGNED Assignee|unassigned at gcc dot gnu.org |jakub at gcc dot gnu.org --- Comment #4 from Jakub Jelinek <jakub at gcc dot gnu.org> --- --- gcc/tree-tailcall.c.jj 2020-01-12 11:54:38.517381665 +0100 +++ gcc/tree-tailcall.c 2020-03-03 20:22:17.324133660 +0100 @@ -339,7 +339,8 @@ process_assignment (gassign *stmt, && (non_ass_var = independent_of_stmt_p (op1, stmt, call, to_move))) ; - else if (op1 == *ass_var + else if (*ass_var + && op1 == *ass_var && (non_ass_var = independent_of_stmt_p (op0, stmt, call, to_move))) ; For the void calls *ass_var is NULL and if we have an UNARY_RHS assignment, op1 is also NULL and so will appear to match, while it shouldn't.