http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59860

Richard Biener <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Priority|P3                          |P1
      Known to work|                            |4.8.2
            Summary|[4.8 Regression] ICE in     |[4.8/4.9 Regression] ICE in
                   |compute_may_aliases, at     |compute_may_aliases, at
                   |tree-ssa-structalias.c:6843 |tree-ssa-structalias.c:6843

--- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> ---
Hmm, on s390x we fold

  # iftmp.0_1 = PHI <".raw"(4), ".wav"(5)>
# .MEM_12 = VDEF <.MEM_2>
__builtin___strcat_chk (outfilename_9(D), iftmp.0_1, 18446744073709551615);

to

  _13 = __builtin_strlen (outfilename_9(D));
  _14 = outfilename_9(D) + _13;
  __builtin_memcpy (_14, iftmp.0_1, 5);

but not on other targets.  Oh.

static tree
fold_builtin_strcat (location_t loc ATTRIBUTE_UNUSED, tree dst, tree src)
{
...
      if (optimize_insn_for_speed_p ())
        {

That doesn't work when called from GIMPLE.

and then

          /* If we don't have a movstr we don't want to emit an strcpy
             call.  We have to do that if the length of the source string
             isn't computable (in that case we can use memcpy probably
             later expanding to a sequence of mov instructions).  If we
             have movstr instructions we can emit strcpy calls.  */
          if (!HAVE_movstr)
            {
              tree len = c_strlen (src, 1);
              if (! len || TREE_SIDE_EFFECTS (len))
                return NULL_TREE;
            }

that probably makes it s390 specific.

But it's a latent issue with folding stmts from object-size but not updating
SSA form there.

I'll fix it.

Reply via email to