diff options
author | Tobias Burnus <burnus@net-b.de> | 2007-12-20 09:13:09 +0100 |
---|---|---|
committer | Tobias Burnus <burnus@gcc.gnu.org> | 2007-12-20 09:13:09 +0100 |
commit | c7abc45c7f097a501a93d0778cfa445745b74d22 (patch) | |
tree | c1105d7d38643842a8a83544615c0aaec01a6b80 /gcc/fortran/simplify.c | |
parent | f411364823c12f94105779db7f8e812b6acbe1a8 (diff) | |
download | gcc-c7abc45c7f097a501a93d0778cfa445745b74d22.zip gcc-c7abc45c7f097a501a93d0778cfa445745b74d22.tar.gz gcc-c7abc45c7f097a501a93d0778cfa445745b74d22.tar.bz2 |
re PR fortran/34482 (FAIL: gfortran.dg/nan_4.f90 -O tests for errors)
2007-12-20 Tobias Burnus <burnus@net-b.de>
PR fortran/34482
* gfortran.texi (BOZ): Document behavior for complex
numbers.
* target-memory.h (gfc_convert_boz): Update prototype.
* target-memory.c (gfc_convert_boz): Add error check
and convert BOZ to smallest possible bit size.
* resolve.c (resolve_ordinary_assign): Check return value.
* expr.c (gfc_check_assign): Ditto.
* simplify.c (simplify_cmplx, gfc_simplify_dble,
gfc_simplify_float, gfc_simplify_real): Ditto.
2007-12-20 Tobias Burnus <burnus@net-b.de>
PR fortran/34482
* gfortran.dg/boz_8.f90: Add error-check check.
* gfortran.dg/boz_9.f90: Shorten BOZ where needed, replace
stop by call abort.
From-SVN: r131098
Diffstat (limited to 'gcc/fortran/simplify.c')
-rw-r--r-- | gcc/fortran/simplify.c | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/gcc/fortran/simplify.c b/gcc/fortran/simplify.c index abcff3c..be0b18f 100644 --- a/gcc/fortran/simplify.c +++ b/gcc/fortran/simplify.c @@ -781,7 +781,8 @@ simplify_cmplx (const char *name, gfc_expr *x, gfc_expr *y, int kind) gfc_typespec ts; ts.kind = result->ts.kind; ts.type = BT_REAL; - gfc_convert_boz (x, &ts); + if (!gfc_convert_boz (x, &ts)) + return &gfc_bad_expr; mpfr_set (result->value.complex.r, x->value.real, GFC_RND_MODE); } @@ -790,7 +791,8 @@ simplify_cmplx (const char *name, gfc_expr *x, gfc_expr *y, int kind) gfc_typespec ts; ts.kind = result->ts.kind; ts.type = BT_REAL; - gfc_convert_boz (y, &ts); + if (!gfc_convert_boz (y, &ts)) + return &gfc_bad_expr; mpfr_set (result->value.complex.i, y->value.real, GFC_RND_MODE); } @@ -961,7 +963,8 @@ gfc_simplify_dble (gfc_expr *e) ts.type = BT_REAL; ts.kind = gfc_default_double_kind; result = gfc_copy_expr (e); - gfc_convert_boz (result, &ts); + if (!gfc_convert_boz (result, &ts)) + return &gfc_bad_expr; } return range_check (result, "DBLE"); @@ -1150,7 +1153,8 @@ gfc_simplify_float (gfc_expr *a) ts.kind = gfc_default_real_kind; result = gfc_copy_expr (a); - gfc_convert_boz (result, &ts); + if (!gfc_convert_boz (result, &ts)) + return &gfc_bad_expr; } else result = gfc_int2real (a, gfc_default_real_kind); @@ -3019,7 +3023,8 @@ gfc_simplify_real (gfc_expr *e, gfc_expr *k) ts.type = BT_REAL; ts.kind = kind; result = gfc_copy_expr (e); - gfc_convert_boz (result, &ts); + if (!gfc_convert_boz (result, &ts)) + return &gfc_bad_expr; } return range_check (result, "REAL"); } |