runtime: don't assume that _ = *s will panic if s is nil
authorIan Lance Taylor <ian@gcc.gnu.org>
Thu, 22 Jun 2017 14:46:12 +0000 (14:46 +0000)
committerIan Lance Taylor <ian@gcc.gnu.org>
Thu, 22 Jun 2017 14:46:12 +0000 (14:46 +0000)
    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

gcc/go/gofrontend/MERGE
libgo/go/runtime/testdata/testprog/crash.go
libgo/go/runtime/testdata/testprogcgo/crash.go

index 942752b10205c50d28bc72b0a9b681b6182e640b..296cd0f28901a14874e96f16cc82d82d8a21957d 100644 (file)
@@ -1,4 +1,4 @@
-b5c9fe259ec43f8079581c3bea0f1d12d85213a7
+8804c912363320e0c229c5a471fb6f4b9e5965e6
 
 The first line of this file holds the git revision number of the last
 merge done from the gofrontend repository.
index 4d83132198d27d3d8f4173dc7b701b4bbd9342e9..ed4ae7fcdbce90fc14e81f356a406510e6fb61d7 100644 (file)
@@ -13,6 +13,8 @@ func init() {
        register("Crash", Crash)
 }
 
+var NilPointer *string
+
 func test(name string) {
        defer func() {
                if x := recover(); x != nil {
@@ -21,8 +23,7 @@ func test(name string) {
                fmt.Printf(" done\n")
        }()
        fmt.Printf("%s:", name)
-       var s *string
-       _ = *s
+       *NilPointer = name
        fmt.Print("SHOULD NOT BE HERE")
 }
 
index 4d83132198d27d3d8f4173dc7b701b4bbd9342e9..ed4ae7fcdbce90fc14e81f356a406510e6fb61d7 100644 (file)
@@ -13,6 +13,8 @@ func init() {
        register("Crash", Crash)
 }
 
+var NilPointer *string
+
 func test(name string) {
        defer func() {
                if x := recover(); x != nil {
@@ -21,8 +23,7 @@ func test(name string) {
                fmt.Printf(" done\n")
        }()
        fmt.Printf("%s:", name)
-       var s *string
-       _ = *s
+       *NilPointer = name
        fmt.Print("SHOULD NOT BE HERE")
 }