src/cmd/compile/internal/gc: remove now unnecessary restriction on float exponent parsing

https://go-review.googlesource.com/#/c/13778/ fixed this issue in math/big.
Remove restriction in compiler.

Fixes #11326.

Change-Id: I1429d0dd0d79431706c65616413373fff58f081e
Reviewed-on: https://go-review.googlesource.com/14830
Reviewed-by: Rob Pike <r@golang.org>
diff --git a/src/cmd/compile/internal/gc/mparith3.go b/src/cmd/compile/internal/gc/mparith3.go
index bf37f2d..f91a64b 100644
--- a/src/cmd/compile/internal/gc/mparith3.go
+++ b/src/cmd/compile/internal/gc/mparith3.go
@@ -9,7 +9,6 @@
 	"cmd/internal/obj"
 	"fmt"
 	"math"
-	"strings"
 )
 
 /// implements float arihmetic
@@ -154,30 +153,6 @@
 		as = as[1:]
 	}
 
-	// The spec requires accepting exponents that fit in int32.
-	// Don't accept much more than that.
-	// Count digits in exponent and stop early if there are too many.
-	if i := strings.Index(as, "e"); i >= 0 {
-		i++
-		if i < len(as) && (as[i] == '-' || as[i] == '+') {
-			i++
-		}
-		for i < len(as) && as[i] == '0' {
-			i++
-		}
-		// TODO(rsc): This should be > 10, because we're supposed
-		// to accept any signed 32-bit int as an exponent.
-		// But that's not working terribly well, so we deviate from the
-		// spec in order to make sure that what we accept works.
-		// We can remove this restriction once those larger exponents work.
-		// See golang.org/issue/11326 and test/fixedbugs/issue11326*.go.
-		if len(as)-i > 8 {
-			Yyerror("malformed constant: %s (exponent too large)", as)
-			a.Val.SetUint64(0)
-			return
-		}
-	}
-
 	f, ok := a.Val.SetString(as)
 	if !ok {
 		// At the moment we lose precise error cause;
diff --git a/test/fixedbugs/issue11326.go b/test/fixedbugs/issue11326.go
index fd1fab3..bb19796 100644
--- a/test/fixedbugs/issue11326.go
+++ b/test/fixedbugs/issue11326.go
@@ -4,25 +4,20 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
+// Tests for golang.org/issue/11326.
+
 package main
 
-import "fmt"
-
 func main() {
-	var g = 1e81391777742999 // ERROR "exponent too large"
-	// The next should only cause a problem when converted to float64
-	// by the assignment, but instead the compiler rejects it outright,
-	// rather than mishandle it. Specifically, when handled, 'var h' prints:
-	//	issue11326.go:N: constant 0.93342e+536870911 overflows float64
-	// The rejection of 'var i' is just insurance. It seems to work correctly.
-	// See golang.org/issue/11326.
-	// var h = 1e2147483647     // should be "1.00000e+2147483647 overflows float64"
-	var h = 1e2147483647 // ERROR "exponent too large"
-	// var i = 1e214748364  // should be "1.00000e\+214748364 overflows float64"
-	var i = 1e214748364 // ERROR "exponent too large"
-	var j = 1e21474836  // ERROR "1.00000e\+21474836 overflows float64"
-	var k = 1e2147483   // ERROR "1.00000e\+2147483 overflows float64"
-	var l = 1e214748    // ERROR "1.00000e\+214748 overflows float64"
-	var m = 1e21474     // ERROR "1.00000e\+21474 overflows float64"
-	fmt.Println(g)
+	var _ = 1e2147483647 // ERROR "constant too large"
+	var _ = 1e646456993  // ERROR "constant too large"
+	var _ = 1e646456992  // ERROR "1.00000e\+646456992 overflows float64"
+	var _ = 1e64645699   // ERROR "1.00000e\+64645699 overflows float64"
+	var _ = 1e6464569    // ERROR "1.00000e\+6464569 overflows float64"
+	var _ = 1e646456     // ERROR "1.00000e\+646456 overflows float64"
+	var _ = 1e64645      // ERROR "1.00000e\+64645 overflows float64"
+	var _ = 1e6464       // ERROR "1.00000e\+6464 overflows float64"
+	var _ = 1e646        // ERROR "1.00000e\+646 overflows float64"
+	var _ = 1e309        // ERROR "1.00000e\+309 overflows float64"
+	var _ = 1e308
 }
diff --git a/test/fixedbugs/issue11326b.go b/test/fixedbugs/issue11326b.go
index 00effbc..6a6ae2f 100644
--- a/test/fixedbugs/issue11326b.go
+++ b/test/fixedbugs/issue11326b.go
@@ -6,36 +6,36 @@
 
 package main
 
+// Tests for golang.org/issue/11326.
+
 func main() {
-	/* TODO(rsc): Should work but does not. See golang.org/issue/11326.
 	{
-		const n = 1e2147483647
-		const d = 1e2147483646
+		const n = 1e646456992
+		const d = 1e646456991
 		x := n / d
 		if x != 10.0 {
 			println("incorrect value:", x)
 		}
 	}
 	{
-		const n = 1e214748364
-		const d = 1e214748363
-		x := n / d
-		if x != 10.0 {
-			println("incorrect value:", x)
-		}
-	}
-	*/
-	{
-		const n = 1e21474836
-		const d = 1e21474835
+		const n = 1e64645699
+		const d = 1e64645698
 		x := n / d
 		if x != 10.0 {
 			println("incorrect value:", x)
 		}
 	}
 	{
-		const n = 1e2147483
-		const d = 1e2147482
+		const n = 1e6464569
+		const d = 1e6464568
+		x := n / d
+		if x != 10.0 {
+			println("incorrect value:", x)
+		}
+	}
+	{
+		const n = 1e646456
+		const d = 1e646455
 		x := n / d
 		if x != 10.0 {
 			println("incorrect value:", x)