From 545548257d8ad0c0663f70c61a1fd189eaf896b8 Mon Sep 17 00:00:00 2001 From: Jerry DeLisle Date: Sun, 18 Jun 2006 06:36:45 +0000 Subject: re PR fortran/19310 ([4.1 Only] unnecessary error for overflowing results) 2006-06-18 Jerry DeLisle PR fortran/19310 * arith.c (gfc_range_check): Return ARITH_OK if -fno-range-check. Add return of ARITH_NAN, ARITH_UNDERFLOW, and ARITH_OVERFLOW. (gfc_arith_divide): If -fno-range-check allow mpfr to divide by zero. * gfortran.h (gfc_option_t): Add new flag. * invoke.texi: Document new flag. * lang.opt: Add option -frange-check. * options.c (gfc_init_options): Initialize new flag. (gfc_handle_options): Set flag if invoked. * simplify.c (range_check): Add error messages for overflow, underflow, and other errors. * trans-const.c (gfc_conv_mpfr_to_tree): Build NaN and Inf from mpfr result. From-SVN: r114752 --- gcc/fortran/simplify.c | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) (limited to 'gcc/fortran/simplify.c') diff --git a/gcc/fortran/simplify.c b/gcc/fortran/simplify.c index b40d026..f8bf372 100644 --- a/gcc/fortran/simplify.c +++ b/gcc/fortran/simplify.c @@ -95,10 +95,29 @@ static int xascii_table[256]; static gfc_expr * range_check (gfc_expr * result, const char *name) { - if (gfc_range_check (result) == ARITH_OK) - return result; - gfc_error ("Result of %s overflows its kind at %L", name, &result->where); + switch (gfc_range_check (result)) + { + case ARITH_OK: + return result; + + case ARITH_OVERFLOW: + gfc_error ("Result of %s overflows its kind at %L", name, &result->where); + break; + + case ARITH_UNDERFLOW: + gfc_error ("Result of %s underflows its kind at %L", name, &result->where); + break; + + case ARITH_NAN: + gfc_error ("Result of %s is NaN at %L", name, &result->where); + break; + + default: + gfc_error ("Result of %s gives range error for its kind at %L", name, &result->where); + break; + } + gfc_free_expr (result); return &gfc_bad_expr; } -- cgit v1.1