aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCuong Manh Le <cuong.manhle.vn@gmail.com>2024-07-03 13:13:05 +0700
committerGopher Robot <gobot@golang.org>2024-07-03 13:03:08 +0000
commit71f9dbb1e409a28680f40c60fad5a386ed92a096 (patch)
tree1096da567864464b7d647852132284c53361d417
parent148755a27b50134d1db72c3c0bdf500815569531 (diff)
downloadgo-71f9dbb1e409a28680f40c60fad5a386ed92a096.tar.xz
cmd/compile: emit error message on mismatch import path
Fixes #54542 Change-Id: I16cfb84fc54892923106d0a6f0b3ba810886d077 Reviewed-on: https://go-review.googlesource.com/c/go/+/596396 Auto-Submit: Cuong Manh Le <cuong.manhle.vn@gmail.com> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: David Chase <drchase@google.com> Reviewed-by: Than McIntosh <thanm@google.com>
-rw-r--r--src/cmd/compile/internal/noder/unified.go6
-rw-r--r--test/fixedbugs/issue54542.go67
2 files changed, 72 insertions, 1 deletions
diff --git a/src/cmd/compile/internal/noder/unified.go b/src/cmd/compile/internal/noder/unified.go
index 22d6f71329..6bc23cc5f9 100644
--- a/src/cmd/compile/internal/noder/unified.go
+++ b/src/cmd/compile/internal/noder/unified.go
@@ -7,6 +7,7 @@ package noder
import (
"fmt"
"internal/pkgbits"
+ "internal/types/errors"
"io"
"runtime"
"sort"
@@ -403,7 +404,10 @@ func readPackage(pr *pkgReader, importpkg *types.Pkg, localStub bool) {
r := pr.newReader(pkgbits.RelocMeta, pkgbits.PublicRootIdx, pkgbits.SyncPublic)
pkg := r.pkg()
- base.Assertf(pkg == importpkg, "have package %q (%p), want package %q (%p)", pkg.Path, pkg, importpkg.Path, importpkg)
+ if pkg != importpkg {
+ base.ErrorfAt(base.AutogeneratedPos, errors.BadImportPath, "mismatched import path, have %q (%p), want %q (%p)", pkg.Path, pkg, importpkg.Path, importpkg)
+ base.ErrorExit()
+ }
r.Bool() // TODO(mdempsky): Remove; was "has init"
diff --git a/test/fixedbugs/issue54542.go b/test/fixedbugs/issue54542.go
new file mode 100644
index 0000000000..165bcc582e
--- /dev/null
+++ b/test/fixedbugs/issue54542.go
@@ -0,0 +1,67 @@
+// run
+
+//go:build !js && !wasip1
+
+// Copyright 2024 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 (
+ "bytes"
+ "fmt"
+ "os"
+ "os/exec"
+ "path/filepath"
+)
+
+const aSrc = `package a
+
+func A() { println("a") }
+`
+
+const mainSrc = `package main
+
+import "a"
+
+func main() { a.A() }
+`
+
+var srcs = map[string]string{
+ "a.go": aSrc,
+ "main.go": mainSrc,
+}
+
+func main() {
+ dir, err := os.MkdirTemp("", "issue54542")
+ if err != nil {
+ panic(err)
+ }
+ defer os.RemoveAll(dir)
+
+ for fn, src := range srcs {
+ if err := os.WriteFile(filepath.Join(dir, fn), []byte(src), 0644); err != nil {
+ panic(err)
+ }
+ }
+
+ if _, err := runInDir(dir, "tool", "compile", "-p=lie", "a.go"); err != nil {
+ panic(err)
+ }
+
+ out, err := runInDir(dir, "tool", "compile", "-I=.", "-p=main", "main.go")
+ if err == nil {
+ panic("compiling succeed unexpectedly")
+ }
+
+ if bytes.Contains(out, []byte("internal compiler error:")) {
+ panic(fmt.Sprintf("unexpected ICE:\n%s", string(out)))
+ }
+}
+
+func runInDir(dir string, args ...string) ([]byte, error) {
+ cmd := exec.Command("go", args...)
+ cmd.Dir = dir
+ return cmd.CombinedOutput()
+}