-
Notifications
You must be signed in to change notification settings - Fork 17.8k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
cmd/compile: reject large floating point exponents without math/big
For #11326 (but not a fix). Change-Id: Ic51814f5cd7357427c3fd990a5522775d05e7987 Reviewed-on: https://go-review.googlesource.com/11673 Reviewed-by: Robert Griesemer <[email protected]>
- Loading branch information
Showing
4 changed files
with
105 additions
and
4 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
// errorcheck | ||
|
||
// Copyright 2015 The Go Authors. All rights reserved. | ||
// Use of this source code is governed by a BSD-style | ||
// license that can be found in the LICENSE file. | ||
|
||
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) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
// run | ||
|
||
// Copyright 2015 The Go Authors. All rights reserved. | ||
// Use of this source code is governed by a BSD-style | ||
// license that can be found in the LICENSE file. | ||
|
||
package main | ||
|
||
func main() { | ||
/* TODO(rsc): Should work but does not. See golang.org/issue/11326. | ||
{ | ||
const n = 1e2147483647 | ||
const d = 1e2147483646 | ||
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 | ||
x := n / d | ||
if x != 10.0 { | ||
println("incorrect value:", x) | ||
} | ||
} | ||
{ | ||
const n = 1e2147483 | ||
const d = 1e2147482 | ||
x := n / d | ||
if x != 10.0 { | ||
println("incorrect value:", x) | ||
} | ||
} | ||
} |