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

--- Comment #3 from Tobias Burnus <burnus at gcc dot gnu.org> ---
The code in handle_builtin_memcmp looks as follows:


  FOR_EACH_IMM_USE_FAST (use_p, iter, res)
    {
      gimple *ustmt = USE_STMT (use_p);
      if (gimple_code (ustmt) == GIMPLE_ASSIGN)
        ...
      else if (gimple_code (ustmt) == GIMPLE_COND)
        ...
      else
        return true;
    }

Note the "else return true;". I wonder whether it should be removed for good -
or whether it makes indeed sense to abort with "true" after the first loop
iteration.

In any case, with debug symbols, I get a bunch of GIMPLE_DEBUG statements
before the the GIMPLE_COND. Hence, the debug compare issue is fixed by the
following patch:

diff --git a/gcc/tree-ssa-strlen.c b/gcc/tree-ssa-strlen.c
index 5e2d7db..bb90339 100644
--- a/gcc/tree-ssa-strlen.c
+++ b/gcc/tree-ssa-strlen.c
@@ -1883,5 +1883,5 @@ handle_builtin_memcmp (gimple_stmt_iterator *gsi)
            return true;
        }
-      else
+      else if (gimple_code (ustmt) != GIMPLE_DEBUG)
        return true;
     }

Reply via email to