aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteven G. Kargl <kargl@gcc.gnu.org>2015-07-14 21:44:46 +0000
committerSteven G. Kargl <kargl@gcc.gnu.org>2015-07-14 21:44:46 +0000
commit4fb16d719f6ec75668ec1a1062b61646817f3dc7 (patch)
treebe0c833ab43339dfe5bcb5d62d90379dd934ef43
parent12787be74e166256322233d339bf0e36bd6c752c (diff)
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-14 Steven G. Kargl <kargl@gcc.gnu.org> gfortran.dg/pr66864.f90: New test. git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@225790 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/fortran/ChangeLog5
-rw-r--r--gcc/fortran/simplify.c4
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gfortran.dg/pr66864.f9016
4 files changed, 26 insertions, 3 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 0a2734b6695..b13f67f75fb 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 bc3ec3f8a60..3fb98873709 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 45df0cc0095..801e46285a9 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 00000000000..ebea99b3892
--- /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