From 9c44db9f23e7f3ce713a7b78195fc91b002ead11 Mon Sep 17 00:00:00 2001 From: Janne Blomqvist Date: Thu, 23 Aug 2018 11:35:17 +0300 Subject: [PATCH] Signed zero for {max,min}val intrinsics The Fortran standard specifies (e.g. F2018 7.4.3.2) that intrinsic procedures shall treat positive and negative real zero as equivalent, unless it is explicitly specified otherwise. For {max,min}val there is no such explicit mention. Thus, remove code to handle signed zeros. 2018-08-23 Janne Blomqvist * trans-intrinsic.c (gfc_conv_intrinsic_minmaxval): Delete HONOR_SIGNED_ZEROS checks. From-SVN: r263802 --- gcc/fortran/ChangeLog | 7 ++++++- gcc/fortran/trans-intrinsic.c | 26 ++++++-------------------- 2 files changed, 12 insertions(+), 21 deletions(-) diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 4cbdc68289a..c58e12c45ec 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,4 +1,9 @@ -2017-08-23 Paul Thomas +2018-08-23 Janne Blomqvist + + * trans-intrinsic.c (gfc_conv_intrinsic_minmaxval): Delete + HONOR_SIGNED_ZEROS checks. + +2018-08-23 Paul Thomas PR fortran/86863 * resolve.c (resolve_typebound_call): If the TBP is not marked diff --git a/gcc/fortran/trans-intrinsic.c b/gcc/fortran/trans-intrinsic.c index 387cf80b921..b2cea93742a 100644 --- a/gcc/fortran/trans-intrinsic.c +++ b/gcc/fortran/trans-intrinsic.c @@ -5511,22 +5511,10 @@ gfc_conv_intrinsic_minmaxval (gfc_se * se, gfc_expr * expr, enum tree_code op) { /* MIN_EXPR/MAX_EXPR has unspecified behavior with NaNs or signed zeros. */ - if (HONOR_SIGNED_ZEROS (DECL_MODE (limit))) - { - tmp = fold_build2_loc (input_location, op, logical_type_node, - arrayse.expr, limit); - ifbody = build2_v (MODIFY_EXPR, limit, arrayse.expr); - tmp = build3_v (COND_EXPR, tmp, ifbody, - build_empty_stmt (input_location)); - gfc_add_expr_to_block (&block2, tmp); - } - else - { - tmp = fold_build2_loc (input_location, - op == GT_EXPR ? MAX_EXPR : MIN_EXPR, - type, arrayse.expr, limit); - gfc_add_modify (&block2, limit, tmp); - } + tmp = fold_build2_loc (input_location, + op == GT_EXPR ? MAX_EXPR : MIN_EXPR, + type, arrayse.expr, limit); + gfc_add_modify (&block2, limit, tmp); } if (fast) @@ -5535,8 +5523,7 @@ gfc_conv_intrinsic_minmaxval (gfc_se * se, gfc_expr * expr, enum tree_code op) /* MIN_EXPR/MAX_EXPR has unspecified behavior with NaNs or signed zeros. */ - if (HONOR_NANS (DECL_MODE (limit)) - || HONOR_SIGNED_ZEROS (DECL_MODE (limit))) + if (HONOR_NANS (DECL_MODE (limit))) { tmp = fold_build2_loc (input_location, op, logical_type_node, arrayse.expr, limit); @@ -5598,8 +5585,7 @@ gfc_conv_intrinsic_minmaxval (gfc_se * se, gfc_expr * expr, enum tree_code op) /* MIN_EXPR/MAX_EXPR has unspecified behavior with NaNs or signed zeros. */ - if (HONOR_NANS (DECL_MODE (limit)) - || HONOR_SIGNED_ZEROS (DECL_MODE (limit))) + if (HONOR_NANS (DECL_MODE (limit))) { tmp = fold_build2_loc (input_location, op, logical_type_node, arrayse.expr, limit); -- 2.30.2