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);