diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 1c95c96f1a27e0bccae758ec283db000b1cad8a0..7d9fdfe981637f95aa5b9411a1abffd1716c5829 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,7 @@
+2004-08-24  Richard Henderson  <rth@redhat.com>
+
+	* trans-const.c (gfc_conv_mpz_to_tree): Fix 64-bit shift warning.
+
 2004-08-24  Tobias Schlueter  <tobias.schlueter@physik.uni-muenchen.de>
 
 	* resolve.c (merge_argument_lists): Revert unintentionally 
diff --git a/gcc/fortran/trans-const.c b/gcc/fortran/trans-const.c
index c2a68b7732a6afa477fc474af93d7e0868d45abc..110c0db4237e2ef1aa3aa4bedf10795e67e29acc 100644
--- a/gcc/fortran/trans-const.c
+++ b/gcc/fortran/trans-const.c
@@ -187,21 +187,22 @@ gfc_conv_mpz_to_tree (mpz_t i, int kind)
       else if (sizeof (mp_limb_t) == 2 * sizeof (HOST_WIDE_INT))
 	{
 	  mp_limb_t limb0 = mpz_getlimbn (i, 0);
-	  int count = (sizeof (mp_limb_t) - sizeof (HOST_WIDE_INT)) * CHAR_BIT;
+	  int shift = (sizeof (mp_limb_t) - sizeof (HOST_WIDE_INT)) * CHAR_BIT;
 	  low = limb0;
-	  high = limb0 >> count;
+	  high = limb0 >> shift;
 	}
       else if (sizeof (mp_limb_t) < sizeof (HOST_WIDE_INT))
 	{
+	  int shift = sizeof (mp_limb_t) * CHAR_BIT;
 	  int n, count = sizeof (HOST_WIDE_INT) / sizeof (mp_limb_t);
 	  for (low = n = 0; n < count; ++n)
 	    {
-	      low <<= sizeof (mp_limb_t) * CHAR_BIT;
+	      low <<= shift;
 	      low |= mpz_getlimbn (i, n);
 	    }
-	  for (high = 0; n < 2*count; ++n)
+	  for (high = 0, n = count; n < 2*count; ++n)
 	    {
-	      high <<= sizeof (mp_limb_t) * CHAR_BIT;
+	      high <<= shift;
 	      high |= mpz_getlimbn (i, n);
 	    }
 	}