summaryrefslogtreecommitdiff
path: root/libgo/misc/cgo
diff options
context:
space:
mode:
authorIan Lance Taylor <iant@golang.org>2021-04-12 14:15:16 -0700
committerIan Lance Taylor <iant@golang.org>2021-04-12 15:23:16 -0700
commiteb49f7de9341cb464327234c3a673ce3ef642e01 (patch)
tree44682a0f81f3aeef685487c61e375abe6a0904d5 /libgo/misc/cgo
parent84081e2c6bd43a6790f751755865cf4227adac7c (diff)
libgo: update to Go1.16.3 release
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/309490
Diffstat (limited to 'libgo/misc/cgo')
-rw-r--r--libgo/misc/cgo/testplugin/plugin_test.go7
-rw-r--r--libgo/misc/cgo/testplugin/testdata/issue44956/base/base.go7
-rw-r--r--libgo/misc/cgo/testplugin/testdata/issue44956/main.go47
-rw-r--r--libgo/misc/cgo/testplugin/testdata/issue44956/plugin1.go9
-rw-r--r--libgo/misc/cgo/testplugin/testdata/issue44956/plugin2.go11
5 files changed, 81 insertions, 0 deletions
diff --git a/libgo/misc/cgo/testplugin/plugin_test.go b/libgo/misc/cgo/testplugin/plugin_test.go
index 2d991012c82..8869528015d 100644
--- a/libgo/misc/cgo/testplugin/plugin_test.go
+++ b/libgo/misc/cgo/testplugin/plugin_test.go
@@ -209,3 +209,10 @@ func TestMethod2(t *testing.T) {
goCmd(t, "build", "-o", "method2.exe", "./method2/main.go")
run(t, "./method2.exe")
}
+
+func TestIssue44956(t *testing.T) {
+ goCmd(t, "build", "-buildmode=plugin", "-o", "issue44956p1.so", "./issue44956/plugin1.go")
+ goCmd(t, "build", "-buildmode=plugin", "-o", "issue44956p2.so", "./issue44956/plugin2.go")
+ goCmd(t, "build", "-o", "issue44956.exe", "./issue44956/main.go")
+ run(t, "./issue44956.exe")
+}
diff --git a/libgo/misc/cgo/testplugin/testdata/issue44956/base/base.go b/libgo/misc/cgo/testplugin/testdata/issue44956/base/base.go
new file mode 100644
index 00000000000..609aa0dff4e
--- /dev/null
+++ b/libgo/misc/cgo/testplugin/testdata/issue44956/base/base.go
@@ -0,0 +1,7 @@
+// Copyright 2021 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 base
+
+var X = &map[int]int{123: 456}
diff --git a/libgo/misc/cgo/testplugin/testdata/issue44956/main.go b/libgo/misc/cgo/testplugin/testdata/issue44956/main.go
new file mode 100644
index 00000000000..287a60585e0
--- /dev/null
+++ b/libgo/misc/cgo/testplugin/testdata/issue44956/main.go
@@ -0,0 +1,47 @@
+// Copyright 2021 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.
+
+// Issue 44956: writable static temp is not exported correctly.
+// In the test below, package base is
+//
+// X = &map{...}
+//
+// which compiles to
+//
+// X = &stmp // static
+// stmp = makemap(...) // in init function
+//
+// plugin1 and plugin2 both import base. plugin1 doesn't use
+// base.X, so that symbol is deadcoded in plugin1.
+//
+// plugin1 is loaded first. base.init runs at that point, which
+// initialize base.stmp.
+//
+// plugin2 is then loaded. base.init already ran, so it doesn't run
+// again. When base.stmp is not exported, plugin2's base.X points to
+// its own private base.stmp, which is not initialized, fail.
+
+package main
+
+import "plugin"
+
+func main() {
+ _, err := plugin.Open("issue44956p1.so")
+ if err != nil {
+ panic("FAIL")
+ }
+
+ p2, err := plugin.Open("issue44956p2.so")
+ if err != nil {
+ panic("FAIL")
+ }
+ f, err := p2.Lookup("F")
+ if err != nil {
+ panic("FAIL")
+ }
+ x := f.(func() *map[int]int)()
+ if x == nil || (*x)[123] != 456 {
+ panic("FAIL")
+ }
+}
diff --git a/libgo/misc/cgo/testplugin/testdata/issue44956/plugin1.go b/libgo/misc/cgo/testplugin/testdata/issue44956/plugin1.go
new file mode 100644
index 00000000000..499fa31abf8
--- /dev/null
+++ b/libgo/misc/cgo/testplugin/testdata/issue44956/plugin1.go
@@ -0,0 +1,9 @@
+// Copyright 2021 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 _ "testplugin/issue44956/base"
+
+func main() {}
diff --git a/libgo/misc/cgo/testplugin/testdata/issue44956/plugin2.go b/libgo/misc/cgo/testplugin/testdata/issue44956/plugin2.go
new file mode 100644
index 00000000000..a73542ca716
--- /dev/null
+++ b/libgo/misc/cgo/testplugin/testdata/issue44956/plugin2.go
@@ -0,0 +1,11 @@
+// Copyright 2021 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 "testplugin/issue44956/base"
+
+func F() *map[int]int { return base.X }
+
+func main() {}