The following makes sure to convert the correct argument, not the
one we already converted.  Currently we end up folding
ptr-type - integer-type.  Oops.  Fails spectacularly on 
match-and-simplify where this is the first strip-nops
missed-optimization (on bogus input, that is).

I'm considering this is obvious but will include it in a bootstrap/regtest
anyway.

Thanks,
Richard.

2014-10-23  Richard Biener  <rguent...@suse.de>

        * fold-const.c (fold_binary_loc): Fix copy-and-pasto.

Index: gcc/fold-const.c
===================================================================
--- gcc/fold-const.c    (revision 216546)
+++ gcc/fold-const.c    (working copy)
@@ -10596,8 +10596,9 @@ fold_binary_loc (location_t loc,
                                             TREE_OPERAND (arg1, 0));
              tree arg11 = fold_convert_loc (loc, type,
                                             TREE_OPERAND (arg1, 1));
-             tree tmp = fold_binary_loc (loc, MINUS_EXPR, type, arg0,
-                                         fold_convert_loc (loc, type, arg10));
+             tree tmp = fold_binary_loc (loc, MINUS_EXPR, type,
+                                         fold_convert_loc (loc, type, arg0),
+                                         arg10);
              if (tmp)
                return fold_build2_loc (loc, MINUS_EXPR, type, tmp, arg11);
            }

Reply via email to