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.

Reply via email to