]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/cgo: add import path to hash
authorIan Lance Taylor <iant@golang.org>
Wed, 13 Jun 2018 22:49:52 +0000 (15:49 -0700)
committerIan Lance Taylor <iant@golang.org>
Wed, 13 Jun 2018 23:36:03 +0000 (23:36 +0000)
This avoids name conflicts when two identical packages use cgo.
This can happen in practice when the same package is vendored multiple
times in a single build.

Fixes #23555

Change-Id: I9f0ec6db9165dcf9cdf3d314c668fee8ada18f9c
Reviewed-on: https://go-review.googlesource.com/118739
Run-TryBot: Ian Lance Taylor <iant@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>

misc/cgo/test/issue23555.go [new file with mode: 0644]
misc/cgo/test/issue23555a/a.go [new file with mode: 0644]
misc/cgo/test/issue23555b/a.go [new file with mode: 0644]
src/cmd/cgo/main.go

diff --git a/misc/cgo/test/issue23555.go b/misc/cgo/test/issue23555.go
new file mode 100644 (file)
index 0000000..5fa44e6
--- /dev/null
@@ -0,0 +1,11 @@
+// Copyright 2018 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.
+
+// Test that we can have two identical cgo packages in a single binary.
+// No runtime test; just make sure it compiles.
+
+package cgotest
+
+import _ "./issue23555a"
+import _ "./issue23555b"
diff --git a/misc/cgo/test/issue23555a/a.go b/misc/cgo/test/issue23555a/a.go
new file mode 100644 (file)
index 0000000..cb6626b
--- /dev/null
@@ -0,0 +1,12 @@
+// Copyright 2018 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 issue23555
+
+// #include <stdlib.h>
+import "C"
+
+func X() {
+       C.free(C.malloc(10))
+}
diff --git a/misc/cgo/test/issue23555b/a.go b/misc/cgo/test/issue23555b/a.go
new file mode 100644 (file)
index 0000000..cb6626b
--- /dev/null
@@ -0,0 +1,12 @@
+// Copyright 2018 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 issue23555
+
+// #include <stdlib.h>
+import "C"
+
+func X() {
+       C.free(C.malloc(10))
+}
index ce20948cbece0c15ee92c49af3a5f9dee196a005..246898ab778ed3a8f4ad1d6a7d47271a80b91073 100644 (file)
@@ -17,6 +17,7 @@ import (
        "go/ast"
        "go/printer"
        "go/token"
+       "io"
        "io/ioutil"
        "os"
        "path/filepath"
@@ -279,6 +280,7 @@ func main() {
        // concern is other cgo wrappers for the same functions.
        // Use the beginning of the md5 of the input to disambiguate.
        h := md5.New()
+       io.WriteString(h, *importPath)
        fs := make([]*File, len(goFiles))
        for i, input := range goFiles {
                if *srcDir != "" {