aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/simplify.c
diff options
context:
space:
mode:
authorTobias Burnus <burnus@net-b.de>2007-12-20 09:13:09 +0100
committerTobias Burnus <burnus@gcc.gnu.org>2007-12-20 09:13:09 +0100
commitc7abc45c7f097a501a93d0778cfa445745b74d22 (patch)
treec1105d7d38643842a8a83544615c0aaec01a6b80 /gcc/fortran/simplify.c
parentf411364823c12f94105779db7f8e812b6acbe1a8 (diff)
downloadgcc-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.c15
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");
}