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 <blomqvist.janne@gmail.com> * trans-intrinsic.c (gfc_conv_intrinsic_minmaxval): Delete HONOR_SIGNED_ZEROS checks. From-SVN: r263802
This commit is contained in:
parent
0aa2934aaa
commit
9c44db9f23
@ -1,4 +1,9 @@
|
||||
2017-08-23 Paul Thomas <pault@gcc.gnu.org>
|
||||
2018-08-23 Janne Blomqvist <blomqvist.janne@gmail.com>
|
||||
|
||||
* trans-intrinsic.c (gfc_conv_intrinsic_minmaxval): Delete
|
||||
HONOR_SIGNED_ZEROS checks.
|
||||
|
||||
2018-08-23 Paul Thomas <pault@gcc.gnu.org>
|
||||
|
||||
PR fortran/86863
|
||||
* resolve.c (resolve_typebound_call): If the TBP is not marked
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user