diff mbox

Fix failure of ACATS c45503c at -O2

Message ID 2100616.AKovr9yibX@polaris
State New
Headers show

Commit Message

Eric Botcazou Oct. 21, 2015, 1:06 p.m. UTC
> Maybe add the comments to tree.def instead.

Good idea, revised patch attached.


	* tree.def (CEIL_DIV_EXPR, FLOOR_DIV_EXPR, ROUND_DIV_EXPR): Tweak
	comments.
	(TRUNC_MOD_EXPR, CEIL_MOD_EXPR, FLOOR_MOD_EXPR, ROUND_MOD_EXPR):
	Add comments on sign of the result.
        * fold-const.c (tree_binary_nonnegative_warnv_p) <FLOOR_MOD_EXPR>:
        Recurse on operand #1 instead of operand #0.
        <CEIL_MOD_EXPR>: Do not recurse.
        <ROUND_MOD_EXPR>: Likewise.

Comments

Richard Biener Oct. 21, 2015, 1:14 p.m. UTC | #1
On Wed, Oct 21, 2015 at 3:06 PM, Eric Botcazou <ebotcazou@adacore.com> wrote:
>> Maybe add the comments to tree.def instead.
>
> Good idea, revised patch attached.

Ok.

Thanks,
Richard.

>
>         * tree.def (CEIL_DIV_EXPR, FLOOR_DIV_EXPR, ROUND_DIV_EXPR): Tweak
>         comments.
>         (TRUNC_MOD_EXPR, CEIL_MOD_EXPR, FLOOR_MOD_EXPR, ROUND_MOD_EXPR):
>         Add comments on sign of the result.
>         * fold-const.c (tree_binary_nonnegative_warnv_p) <FLOOR_MOD_EXPR>:
>         Recurse on operand #1 instead of operand #0.
>         <CEIL_MOD_EXPR>: Do not recurse.
>         <ROUND_MOD_EXPR>: Likewise.
>
> --
> Eric Botcazou
Richard Sandiford Oct. 21, 2015, 9:09 p.m. UTC | #2
Eric Botcazou <ebotcazou@adacore.com> writes:
>> Maybe add the comments to tree.def instead.
>
> Good idea, revised patch attached.
>
>
> 	* tree.def (CEIL_DIV_EXPR, FLOOR_DIV_EXPR, ROUND_DIV_EXPR): Tweak
> 	comments.
> 	(TRUNC_MOD_EXPR, CEIL_MOD_EXPR, FLOOR_MOD_EXPR, ROUND_MOD_EXPR):
> 	Add comments on sign of the result.
>         * fold-const.c (tree_binary_nonnegative_warnv_p) <FLOOR_MOD_EXPR>:
>         Recurse on operand #1 instead of operand #0.
>         <CEIL_MOD_EXPR>: Do not recurse.
>         <ROUND_MOD_EXPR>: Likewise.

Thanks for fixing this and sorry for the breakage.  I do normally test
Ada but must have used the wrong baseline.

Thanks,
Richard
diff mbox

Patch

Index: tree.def
===================================================================
--- tree.def	(revision 229123)
+++ tree.def	(working copy)
@@ -685,19 +685,27 @@  DEFTREECODE (MULT_HIGHPART_EXPR, "mult_h
 /* Division for integer result that rounds the quotient toward zero.  */
 DEFTREECODE (TRUNC_DIV_EXPR, "trunc_div_expr", tcc_binary, 2)
 
-/* Division for integer result that rounds the quotient toward infinity.  */
+/* Division for integer result that rounds it toward plus infinity.  */
 DEFTREECODE (CEIL_DIV_EXPR, "ceil_div_expr", tcc_binary, 2)
 
-/* Division for integer result that rounds toward minus infinity.  */
+/* Division for integer result that rounds it toward minus infinity.  */
 DEFTREECODE (FLOOR_DIV_EXPR, "floor_div_expr", tcc_binary, 2)
 
-/* Division for integer result that rounds toward nearest integer.  */
+/* Division for integer result that rounds it toward nearest integer.  */
 DEFTREECODE (ROUND_DIV_EXPR, "round_div_expr", tcc_binary, 2)
 
-/* Four kinds of remainder that go with the four kinds of division.  */
+/* Four kinds of remainder that go with the four kinds of division:  */
+
+/* The sign of the remainder is that of the dividend.  */
 DEFTREECODE (TRUNC_MOD_EXPR, "trunc_mod_expr", tcc_binary, 2)
+
+/* The sign of the remainder is the opposite of that of the divisor.  */
 DEFTREECODE (CEIL_MOD_EXPR, "ceil_mod_expr", tcc_binary, 2)
+
+/* The sign of the remainder is that of the divisor.  */
 DEFTREECODE (FLOOR_MOD_EXPR, "floor_mod_expr", tcc_binary, 2)
+
+/* The sign of the remainder is not predictable.  */
 DEFTREECODE (ROUND_MOD_EXPR, "round_mod_expr", tcc_binary, 2)
 
 /* Division for real result.  */
Index: fold-const.c
===================================================================
--- fold-const.c	(revision 229123)
+++ fold-const.c	(working copy)
@@ -12929,11 +12929,13 @@  tree_binary_nonnegative_warnv_p (enum tr
       return RECURSE (op0) && RECURSE (op1);
 
     case TRUNC_MOD_EXPR:
-    case CEIL_MOD_EXPR:
-    case FLOOR_MOD_EXPR:
-    case ROUND_MOD_EXPR:
       return RECURSE (op0);
 
+    case FLOOR_MOD_EXPR:
+      return RECURSE (op1);
+
+    case CEIL_MOD_EXPR:
+    case ROUND_MOD_EXPR:
     default:
       return tree_simple_nonnegative_warnv_p (code, type);
     }