aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/simplify.c
diff options
context:
space:
mode:
authorJerry DeLisle <jvdelisle@gcc.gnu.org>2006-06-18 06:36:45 +0000
committerJerry DeLisle <jvdelisle@gcc.gnu.org>2006-06-18 06:36:45 +0000
commit545548257d8ad0c0663f70c61a1fd189eaf896b8 (patch)
tree9f73b7afa27dd254cb18534c5d1ceda6349bf744 /gcc/fortran/simplify.c
parent37b4da102f718345282ca7f9b5c7bf9be857fd47 (diff)
downloadgcc-545548257d8ad0c0663f70c61a1fd189eaf896b8.zip
gcc-545548257d8ad0c0663f70c61a1fd189eaf896b8.tar.gz
gcc-545548257d8ad0c0663f70c61a1fd189eaf896b8.tar.bz2
re PR fortran/19310 ([4.1 Only] unnecessary error for overflowing results)
2006-06-18 Jerry DeLisle <jvdelisle@gcc.gnu.org> 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
Diffstat (limited to 'gcc/fortran/simplify.c')
-rw-r--r--gcc/fortran/simplify.c25
1 files changed, 22 insertions, 3 deletions
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;
}