trans.c (gnat_to_gnu): Adjust comment.
authorEric Botcazou <ebotcazou@adacore.com>
Tue, 11 Oct 2016 10:03:49 +0000 (10:03 +0000)
committerEric Botcazou <ebotcazou@gcc.gnu.org>
Tue, 11 Oct 2016 10:03:49 +0000 (10:03 +0000)
* gcc-interface/trans.c (gnat_to_gnu) <N_Op_Add>: Adjust comment.
<N_Op_Minus>: Add comment and missing guard.
* gcc-interface/trans.c (build_binary_op_trapv): Use an explicit test.

From-SVN: r240976

gcc/ada/ChangeLog
gcc/ada/gcc-interface/trans.c

index 7022201405b0c4aff6f600b60aba27003e2a570c..62a6d5ca589f23bed63c5a076b797008a945e17b 100644 (file)
@@ -1,3 +1,9 @@
+2016-10-11  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * gcc-interface/trans.c (gnat_to_gnu) <N_Op_Add>: Adjust comment.
+       <N_Op_Minus>: Add comment and missing guard.
+       * gcc-interface/trans.c (build_binary_op_trapv): Use an explicit test.
+
 2016-10-11  Eric Botcazou  <ebotcazou@adacore.com>
 
        * gcc-interface/utils.c (type_unsigned_for_rm): New predicate.
index b5be373a847b1c778b7a4d686f0fd6e0e1e6b657..930725b911d4fc223a3a7b619e68588674d8ec7b 100644 (file)
@@ -6680,10 +6680,7 @@ gnat_to_gnu (Node_Id gnat_node)
 
        /* Instead of expanding overflow checks for addition, subtraction
           and multiplication itself, the front end will leave this to
-          the back end when Backend_Overflow_Checks_On_Target is set.
-          As the back end itself does not know yet how to properly
-          do overflow checking, do it here.  The goal is to push
-          the expansions further into the back end over time.  */
+          the back end when Backend_Overflow_Checks_On_Target is set.  */
        if (Do_Overflow_Check (gnat_node)
            && Backend_Overflow_Checks_On_Target
            && (code == PLUS_EXPR || code == MINUS_EXPR || code == MULT_EXPR)
@@ -6754,7 +6751,11 @@ gnat_to_gnu (Node_Id gnat_node)
       gnu_expr = gnat_to_gnu (Right_Opnd (gnat_node));
       gnu_result_type = get_unpadded_type (Etype (gnat_node));
 
+      /* Instead of expanding overflow checks for negation and absolute
+        value itself, the front end will leave this to the back end
+        when Backend_Overflow_Checks_On_Target is set.  */
       if (Do_Overflow_Check (gnat_node)
+         && Backend_Overflow_Checks_On_Target
          && !TYPE_UNSIGNED (gnu_result_type)
          && !FLOAT_TYPE_P (gnu_result_type))
        gnu_result
@@ -8937,8 +8938,9 @@ build_binary_op_trapv (enum tree_code code, tree gnu_type, tree left,
                                        lhs, rhs);
       tree tgt = save_expr (call);
       gnu_expr = build1 (REALPART_EXPR, gnu_type, tgt);
-      check
-       = convert (boolean_type_node, build1 (IMAGPART_EXPR, gnu_type, tgt));
+      check = fold_build2 (NE_EXPR, boolean_type_node,
+                          build1 (IMAGPART_EXPR, gnu_type, tgt),
+                          build_int_cst (gnu_type, 0));
       return
        emit_check (check, gnu_expr, CE_Overflow_Check_Failed, gnat_node);
    }