Jason Merrill wrote:
> I think this broke g++.dg/ext/builtin10.C.

That's odd. It appears if you add a fold in gimple-fold.c, it no longer calls 
the
folding code in builtins.c. No idea what the idea behind that is (especially 
since
there are other builtins that appear in both files), but this simple patch 
fixes it:

If strchr can't be folded in gimple-fold.c, break so folding code in builtins.c 
is
also called.

OK for commit?

2016-09-28  Wilco Dijkstra  <wdijk...@arm.com>

        * gimple-fold.c (gimple_fold_builtin): After failing to fold
        strchr, also try the generic folding.
--
diff --git a/gcc/gimple-fold.c b/gcc/gimple-fold.c
index 
ddf4cf0ae68ef6708377fdb1a2b45575d90da799..b6802e81fd1a7fd0b309cb9aa0f984f7bacb6596
 100644
--- a/gcc/gimple-fold.c
+++ b/gcc/gimple-fold.c
@@ -2948,7 +2948,10 @@ gimple_fold_builtin (gimple_stmt_iterator *gsi)
     case BUILT_IN_STRNCAT:
       return gimple_fold_builtin_strncat (gsi);
     case BUILT_IN_STRCHR:
-      return gimple_fold_builtin_strchr (gsi);
+      if (gimple_fold_builtin_strchr (gsi))
+       return true;
+      /* Perform additional folding in builtin.c.  */
+      break;
     case BUILT_IN_FPUTS:
       return gimple_fold_builtin_fputs (gsi, gimple_call_arg (stmt, 0),
                                        gimple_call_arg (stmt, 1), false);

Reply via email to