trans.c (gnat_to_gnu): Adjust comment.

* 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
This commit is contained in:
Eric Botcazou 2016-10-11 10:03:49 +00:00 committed by Eric Botcazou
parent 9fd7cd44d6
commit 87e25aac8e
2 changed files with 14 additions and 6 deletions

View 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.

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