diff options
author | Tobias Burnus <burnus@net-b.de> | 2007-12-14 16:11:17 +0100 |
---|---|---|
committer | Tobias Burnus <burnus@gcc.gnu.org> | 2007-12-14 16:11:17 +0100 |
commit | 4956b1f14709e967ec5a374a4f9f5bcdadaea480 (patch) | |
tree | 5b92aa98aad961b67cdefffbc0c12ff912bfdcd0 /gcc/fortran/arith.c | |
parent | ae4dbd44baaea8b195e792c1865d02e8bf6c36b8 (diff) | |
download | gcc-4956b1f14709e967ec5a374a4f9f5bcdadaea480.zip gcc-4956b1f14709e967ec5a374a4f9f5bcdadaea480.tar.gz gcc-4956b1f14709e967ec5a374a4f9f5bcdadaea480.tar.bz2 |
re PR fortran/34398 (BOZ literals: Range checks)
2007-12-14 Tobias Burnus <burnus@net-b.de>
PR fortran/34398
* expr.c (gfc_check_assign): Add range checks for assignments of
* BOZs.
* resolve.c (resolve_ordinary_assign): Ditto.
* arith.c (gfc_range_check): Fix return value for complex
* numbers.
2007-12-14 Tobias Burnus <burnus@net-b.de>
PR fortran/34398
* gfortran.dg/nan_4.f90: New.
From-SVN: r130932
Diffstat (limited to 'gcc/fortran/arith.c')
-rw-r--r-- | gcc/fortran/arith.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/gcc/fortran/arith.c b/gcc/fortran/arith.c index 01d2989..b06aa07 100644 --- a/gcc/fortran/arith.c +++ b/gcc/fortran/arith.c @@ -532,6 +532,7 @@ arith gfc_range_check (gfc_expr *e) { arith rc; + arith rc2; switch (e->ts.type) { @@ -558,13 +559,16 @@ gfc_range_check (gfc_expr *e) if (rc == ARITH_NAN) mpfr_set_nan (e->value.complex.r); - rc = gfc_check_real_range (e->value.complex.i, e->ts.kind); + rc2 = gfc_check_real_range (e->value.complex.i, e->ts.kind); if (rc == ARITH_UNDERFLOW) mpfr_set_ui (e->value.complex.i, 0, GFC_RND_MODE); if (rc == ARITH_OVERFLOW) mpfr_set_inf (e->value.complex.i, mpfr_sgn (e->value.complex.i)); if (rc == ARITH_NAN) mpfr_set_nan (e->value.complex.i); + + if (rc == ARITH_OK) + rc = rc2; break; default: |