aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRobert Griesemer <gri@golang.org>2016-01-30 14:29:02 -0800
committerRobert Griesemer <gri@golang.org>2016-02-01 20:29:19 +0000
commitd37d76af43f590935b13f2d33b07ef51c2976354 (patch)
treee2c3ea8d89fed0dc96630a07615df10f6bbe893f /src
parentaf15beeab5ff9cde411c3db086ca9a24ace4c898 (diff)
downloadgo-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.go18
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)