import (
"fmt"
"internal/pkgbits"
+ "internal/types/errors"
"io"
"runtime"
"sort"
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"
--- /dev/null
+// 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()
+}