Commit c016fd32 by Ian Lance Taylor

runtime: don't assume that _ = *s will panic if s is nil

    
    With the gc toolchain apparently
            var s *string
            _ = *s
    is enough to panic with a nil pointer dereference. The gccgo compiler
    will simply discard the dereference, which I think is a reasonable and
    acceptable optimization. Change the tests to use an exported variable
    instead. The tests are not currently run, but they will be with a
    later patch to gotools.
    
    Reviewed-on: https://go-review.googlesource.com/46450

From-SVN: r249562
parent 3b0ddadf
b5c9fe259ec43f8079581c3bea0f1d12d85213a7 8804c912363320e0c229c5a471fb6f4b9e5965e6
The first line of this file holds the git revision number of the last The first line of this file holds the git revision number of the last
merge done from the gofrontend repository. merge done from the gofrontend repository.
...@@ -13,6 +13,8 @@ func init() { ...@@ -13,6 +13,8 @@ func init() {
register("Crash", Crash) register("Crash", Crash)
} }
var NilPointer *string
func test(name string) { func test(name string) {
defer func() { defer func() {
if x := recover(); x != nil { if x := recover(); x != nil {
...@@ -21,8 +23,7 @@ func test(name string) { ...@@ -21,8 +23,7 @@ func test(name string) {
fmt.Printf(" done\n") fmt.Printf(" done\n")
}() }()
fmt.Printf("%s:", name) fmt.Printf("%s:", name)
var s *string *NilPointer = name
_ = *s
fmt.Print("SHOULD NOT BE HERE") fmt.Print("SHOULD NOT BE HERE")
} }
......
...@@ -13,6 +13,8 @@ func init() { ...@@ -13,6 +13,8 @@ func init() {
register("Crash", Crash) register("Crash", Crash)
} }
var NilPointer *string
func test(name string) { func test(name string) {
defer func() { defer func() {
if x := recover(); x != nil { if x := recover(); x != nil {
...@@ -21,8 +23,7 @@ func test(name string) { ...@@ -21,8 +23,7 @@ func test(name string) {
fmt.Printf(" done\n") fmt.Printf(" done\n")
}() }()
fmt.Printf("%s:", name) fmt.Printf("%s:", name)
var s *string *NilPointer = name
_ = *s
fmt.Print("SHOULD NOT BE HERE") fmt.Print("SHOULD NOT BE HERE")
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment