OSDN Git Service

PR c/8639
authorrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 25 Nov 2002 19:04:57 +0000 (19:04 +0000)
committerrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 25 Nov 2002 19:04:57 +0000 (19:04 +0000)
        * fold-const.c (extract_muldiv): Don't propagate division unless
        both arguments are multiples of C.
* gcc.c-torture/execute/20021119-1.c: New.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@59466 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/fold-const.c
gcc/testsuite/gcc.c-torture/execute/20021119-1.c [new file with mode: 0644]

index dd51dfd..967ba8d 100644 (file)
@@ -1,3 +1,9 @@
+2002-11-25  Christian Ehrhardt  <ehrhardt@mathematik.uni-ulm.de>
+
+       PR c/8639
+       * fold-const.c (extract_muldiv): Don't propagate division unless
+       both arguments are multiples of C.
+
 2002-11-25  Andrew Haley  <aph@redhat.com>
 
         * libgcc-std.ver (_Unwind_Find_Enclosing_Function): Add.
index c4095e4..a7556f4 100644 (file)
@@ -4178,10 +4178,10 @@ extract_muldiv (t, c, code, wide_type)
       t2 = extract_muldiv (op1, c, code, wide_type);
       if (t1 != 0 && t2 != 0
          && (code == MULT_EXPR
-             /* If not multiplication, we can only do this if either operand
-                is divisible by c.  */
-             || multiple_of_p (ctype, op0, c)
-             || multiple_of_p (ctype, op1, c)))
+             /* If not multiplication, we can only do this if both operands
+                are divisible by c.  */
+             || (multiple_of_p (ctype, op0, c)
+                 && multiple_of_p (ctype, op1, c))))
        return fold (build (tcode, ctype, convert (ctype, t1),
                            convert (ctype, t2)));
 
diff --git a/gcc/testsuite/gcc.c-torture/execute/20021119-1.c b/gcc/testsuite/gcc.c-torture/execute/20021119-1.c
new file mode 100644 (file)
index 0000000..c4ef460
--- /dev/null
@@ -0,0 +1,17 @@
+/* PR 8639.  */
+
+extern void abort(void);
+
+int foo (int i)
+{
+  int r;
+  r = (80 - 4 * i) / 20;
+  return r;
+}
+    
+int main ()
+{
+  if (foo (1) != 3)
+    abort ();
+  return 0;
+}