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.