cmd/compile: don't use ."" as a pkg prefix

This results in names to unexported fields like
net.(*Dialer)."".deadline instead of net.(*Dialer).deadline.

Fixes #18419.

Change-Id: I0415c68b77cc16125c2401320f56308060ac3f25
Reviewed-on: https://go-review.googlesource.com/44070
Run-TryBot: Daniel Martí <mvdan@mvdan.cc>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
This commit is contained in:
Daniel Martí 2017-05-24 11:34:56 +01:00
parent 504b8d15d6
commit e5e0e5fc3e
4 changed files with 34 additions and 1 deletions

View file

@ -899,7 +899,7 @@ func methodsym(nsym *types.Sym, t0 *types.Type, iface bool) *types.Sym {
spkg = s.Pkg
}
pkgprefix := ""
if (spkg == nil || nsym.Pkg != spkg) && !exportname(nsym.Name) {
if (spkg == nil || nsym.Pkg != spkg) && !exportname(nsym.Name) && nsym.Pkg.Prefix != `""` {
pkgprefix = "." + nsym.Pkg.Prefix
}
var p string

View file

@ -0,0 +1,11 @@
// Copyright 2017 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 other
type Exported struct {
Member int
}
func (e *Exported) member() int { return 1 }

View file

@ -0,0 +1,15 @@
// errorcheck -0 -m -l
// Copyright 2017 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 "./other"
func InMyCode(e *other.Exported) {
e.member() // ERROR "e\.member undefined .cannot refer to unexported field or method other\.\(\*Exported\)\.member."
}
func main() {}

View file

@ -0,0 +1,7 @@
// errorcheckdir
// Copyright 2015 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 ignored