Go frontend: ensure mpfr exponent range is large enough for Go
authorIan Lance Taylor <iant@golang.org>
Tue, 22 Dec 2020 00:17:23 +0000 (16:17 -0800)
committerIan Lance Taylor <iant@golang.org>
Tue, 22 Dec 2020 00:18:02 +0000 (16:18 -0800)
PR go/98402
* go-lang.c (go_langhook_init): Force MPFR exponent range to be
large enough to support Go constants.

gcc/go/go-lang.c

index 08c1f38a2c1f7cad627cb41f62a37c42cf964404..9c0e7af7b841e4dd65196bc06daa3614f226850a 100644 (file)
@@ -131,6 +131,16 @@ go_langhook_init (void)
      eventually be controllable by a command line option.  */
   mpfr_set_default_prec (256);
 
+  /* If necessary, override GCC's choice of minimum and maximum
+     exponents.  This should only affect GCC middle-end
+     compilation-time, not correctness.  */
+  mpfr_exp_t exp = mpfr_get_emax ();
+  if (exp < (1 << 16) - 1)
+    mpfr_set_emax ((1 << 16) - 1);
+  exp = mpfr_get_emin ();
+  if (exp > - ((1 << 16) - 1))
+    mpfr_set_emin (- ((1 << 16) - 1));
+
   /* Go uses exceptions.  */
   using_eh_for_cleanups ();