From 87e25aac8e807189725dccbfd7569b0af21f577a Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Tue, 11 Oct 2016 10:03:49 +0000 Subject: [PATCH] trans.c (gnat_to_gnu): Adjust comment. * gcc-interface/trans.c (gnat_to_gnu) : Adjust comment. : Add comment and missing guard. * gcc-interface/trans.c (build_binary_op_trapv): Use an explicit test. From-SVN: r240976 --- gcc/ada/ChangeLog | 6 ++++++ gcc/ada/gcc-interface/trans.c | 14 ++++++++------ 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 7022201405b..62a6d5ca589 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,9 @@ +2016-10-11 Eric Botcazou + + * gcc-interface/trans.c (gnat_to_gnu) : Adjust comment. + : Add comment and missing guard. + * gcc-interface/trans.c (build_binary_op_trapv): Use an explicit test. + 2016-10-11 Eric Botcazou * gcc-interface/utils.c (type_unsigned_for_rm): New predicate. diff --git a/gcc/ada/gcc-interface/trans.c b/gcc/ada/gcc-interface/trans.c index b5be373a847..930725b911d 100644 --- a/gcc/ada/gcc-interface/trans.c +++ b/gcc/ada/gcc-interface/trans.c @@ -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); } -- 2.30.2