diff options
| author | Robert Griesemer <gri@golang.org> | 2016-01-30 14:29:02 -0800 |
|---|---|---|
| committer | Robert Griesemer <gri@golang.org> | 2016-02-01 20:29:19 +0000 |
| commit | d37d76af43f590935b13f2d33b07ef51c2976354 (patch) | |
| tree | e2c3ea8d89fed0dc96630a07615df10f6bbe893f /src | |
| parent | af15beeab5ff9cde411c3db086ca9a24ace4c898 (diff) | |
| download | go-d37d76af43f590935b13f2d33b07ef51c2976354.tar.xz | |
cmd/compile: fix parsing of inlined interface types with unexported methods
Fixes #14164.
Change-Id: Ib1d1d29674c99cf88e0ae12724823a31f5dbb95c
Reviewed-on: https://go-review.googlesource.com/19087
Run-TryBot: Robert Griesemer <gri@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Russ Cox <rsc@golang.org>
Diffstat (limited to 'src')
| -rw-r--r-- | src/cmd/compile/internal/gc/parser.go | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/src/cmd/compile/internal/gc/parser.go b/src/cmd/compile/internal/gc/parser.go index 282e855b37..054cf73656 100644 --- a/src/cmd/compile/internal/gc/parser.go +++ b/src/cmd/compile/internal/gc/parser.go @@ -2501,6 +2501,24 @@ func (p *parser) interfacedcl() *Node { ifacedcl(meth) return meth + case '@', '?': + // newname indcl + // We arrive here when parsing an interface type declared inside + // an exported and inlineable function and the interface declares + // unexported methods (which are then package-qualified). + // + // Since the compiler always flattens embedded interfaces, we + // will never see an embedded package-qualified interface in export + // data; i.e., when we reach here we know it must be a method. + // + // See also issue 14164. + mname := newname(p.sym()) + sig := p.indcl() + + meth := Nod(ODCLFIELD, mname, sig) + ifacedcl(meth) + return meth + case '(': p.next() pname := p.packname(nil) |
