mirror of
https://github.com/golang/go
synced 2024-11-23 07:50:05 -07:00
cmd/compile: fix error msg mentioning different packages with same name
This is a regression from 1.6. The respective code in importimport (export.go) was not exactly replicated with the new importer. Also copied over the missing cyclic import check. Added test cases. Fixes #16133. Change-Id: I1e0a39ff1275ca62a8054874294d400ed83fb26a Reviewed-on: https://go-review.googlesource.com/24312 Reviewed-by: Ian Lance Taylor <iant@golang.org> Run-TryBot: Robert Griesemer <gri@golang.org>
This commit is contained in:
parent
845992eeed
commit
1f446432dd
@ -239,14 +239,20 @@ func (p *importer) pkg() *Pkg {
|
|||||||
Fatalf("importer: package path %q for pkg index %d", path, len(p.pkgList))
|
Fatalf("importer: package path %q for pkg index %d", path, len(p.pkgList))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// see importimport (export.go)
|
||||||
pkg := importpkg
|
pkg := importpkg
|
||||||
if path != "" {
|
if path != "" {
|
||||||
pkg = mkpkg(path)
|
pkg = mkpkg(path)
|
||||||
}
|
}
|
||||||
if pkg.Name == "" {
|
if pkg.Name == "" {
|
||||||
pkg.Name = name
|
pkg.Name = name
|
||||||
|
numImport[name]++
|
||||||
} else if pkg.Name != name {
|
} else if pkg.Name != name {
|
||||||
Fatalf("importer: conflicting package names %s and %s for path %q", pkg.Name, name, path)
|
Yyerror("importer: conflicting package names %s and %s for path %q", pkg.Name, name, path)
|
||||||
|
}
|
||||||
|
if incannedimport == 0 && myimportpath != "" && path == myimportpath {
|
||||||
|
Yyerror("import %q: package depends on %q (import cycle)", importpkg.Path, path)
|
||||||
|
errorexit()
|
||||||
}
|
}
|
||||||
p.pkgList = append(p.pkgList, pkg)
|
p.pkgList = append(p.pkgList, pkg)
|
||||||
|
|
||||||
|
@ -479,6 +479,10 @@ func pkgtype(s *Sym) *Type {
|
|||||||
return s.Def.Type
|
return s.Def.Type
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// numImport tracks how often a package with a given name is imported.
|
||||||
|
// It is used to provide a better error message (by using the package
|
||||||
|
// path to disambiguate) if a package that appears multiple times with
|
||||||
|
// the same name appears in an error message.
|
||||||
var numImport = make(map[string]int)
|
var numImport = make(map[string]int)
|
||||||
|
|
||||||
func importimport(s *Sym, path string) {
|
func importimport(s *Sym, path string) {
|
||||||
|
7
test/fixedbugs/issue16133.dir/a1.go
Normal file
7
test/fixedbugs/issue16133.dir/a1.go
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
package a
|
||||||
|
|
||||||
|
type X string
|
||||||
|
|
||||||
|
func NewX() X {
|
||||||
|
return ""
|
||||||
|
}
|
7
test/fixedbugs/issue16133.dir/a2.go
Normal file
7
test/fixedbugs/issue16133.dir/a2.go
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
package a
|
||||||
|
|
||||||
|
type X string
|
||||||
|
|
||||||
|
func NewX() X {
|
||||||
|
return ""
|
||||||
|
}
|
7
test/fixedbugs/issue16133.dir/b.go
Normal file
7
test/fixedbugs/issue16133.dir/b.go
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
package b
|
||||||
|
|
||||||
|
import "./a2"
|
||||||
|
|
||||||
|
type T struct {
|
||||||
|
X a.X
|
||||||
|
}
|
10
test/fixedbugs/issue16133.dir/c.go
Normal file
10
test/fixedbugs/issue16133.dir/c.go
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
package p
|
||||||
|
|
||||||
|
import (
|
||||||
|
"./a1"
|
||||||
|
"./b"
|
||||||
|
)
|
||||||
|
|
||||||
|
var _ = b.T{
|
||||||
|
X: a.NewX(), // ERROR `cannot use "a1"\.NewX\(\)`
|
||||||
|
}
|
10
test/fixedbugs/issue16133.go
Normal file
10
test/fixedbugs/issue16133.go
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
// errorcheckdir -s
|
||||||
|
|
||||||
|
// Copyright 2016 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.
|
||||||
|
|
||||||
|
// Verify error messages referring to multiple different
|
||||||
|
// packages with the same package name.
|
||||||
|
|
||||||
|
package ignored
|
Loading…
Reference in New Issue
Block a user