https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87672

--- Comment #10 from Bernd Edlinger <bernd.edlinger at hotmail dot de> ---
untested patch:

Index: gcc/gimple-fold.c
===================================================================
--- gcc/gimple-fold.c   (revision 265240)
+++ gcc/gimple-fold.c   (working copy)
@@ -2715,6 +2715,7 @@ gimple_fold_builtin_stxcpy_chk (gimple_stmt_iterat
                return false;

              gimple_seq stmts = NULL;
+             len = force_gimple_operand (len, &stmts, true, NULL_TREE);
              len = gimple_convert (&stmts, loc, size_type_node, len);
              len = gimple_build (&stmts, loc, PLUS_EXPR, size_type_node, len,
                                  build_int_cst (size_type_node, 1));
Index: gcc/tree-ssa-strlen.c
===================================================================
--- gcc/tree-ssa-strlen.c       (revision 265240)
+++ gcc/tree-ssa-strlen.c       (working copy)
@@ -2602,6 +2602,13 @@ handle_builtin_strcat (enum built_in_function bcod
       len = force_gimple_operand_gsi (gsi, len, true, NULL_TREE, true,
                                      GSI_SAME_STMT);
     }
+  if (objsz)
+    {
+      objsz = fold_build2_loc (loc, MINUS_EXPR, TREE_TYPE (objsz),
+                              objsz, unshare_expr (dstlen));
+      objsz = force_gimple_operand_gsi (gsi, objsz, true, NULL_TREE, true,
+                                       GSI_SAME_STMT);
+    }
   if (endptr)
     dst = fold_convert_loc (loc, TREE_TYPE (dst), unshare_expr (endptr));
   else

Reply via email to