diff options
-rw-r--r-- | gcc/fortran/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/fortran/simplify.c | 4 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/pr66864.f90 | 16 |
4 files changed, 26 insertions, 3 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 0a2734b..b13f67f 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,8 @@ +2015-07-14 Steven G. Kargl <kargl@gcc.gnu.org> + + * simplify.c (gfc_simplify_floor): Set precision of temporary to + that of arg. + 2015-07-13 Andre Vehreschild <vehre@gcc.gnu.org> PR fortran/64589 diff --git a/gcc/fortran/simplify.c b/gcc/fortran/simplify.c index bc3ec3f..3fb9887 100644 --- a/gcc/fortran/simplify.c +++ b/gcc/fortran/simplify.c @@ -2351,9 +2351,7 @@ gfc_simplify_floor (gfc_expr *e, gfc_expr *k) if (e->expr_type != EXPR_CONSTANT) return NULL; - gfc_set_model_kind (kind); - - mpfr_init (floor); + mpfr_init2 (floor, mpfr_get_prec (e->value.real)); mpfr_floor (floor, e->value.real); result = gfc_get_constant_expr (BT_INTEGER, kind, &e->where); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 45df0cc..801e462 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2015-07-14 Steven G. Kargl <kargl@gcc.gnu.org> + + gfortran.dg/pr66864.f90: New test. + 2015-07-14 Vladimir Makarov <vmakarov@redhat.com> PR rtl-optimization/66626 diff --git a/gcc/testsuite/gfortran.dg/pr66864.f90 b/gcc/testsuite/gfortran.dg/pr66864.f90 new file mode 100644 index 0000000..ebea99b --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr66864.f90 @@ -0,0 +1,16 @@ +! { dg-do run } +! PR fortran/66864 +! +program t + implicit none + real(8) x + x = 2.0d0**26.5d0 + if (floor(x) /= 94906265) call abort + if (floor(2.0d0**26.5d0)/= 94906265) call abort + x = 777666555.6d0 + if (floor(x) /= 777666555) call abort + if (floor(777666555.6d0) /= 777666555) call abort + x = 2000111222.6d0 + if (floor(x) /= 2000111222) call abort + if (floor(2000111222.6d0) /= 2000111222) call abort +end program t |