aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEmmanuel Odeke <emm.odeke@gmail.com>2017-01-04 19:21:13 -0700
committerMatthew Dempsky <mdempsky@google.com>2017-01-05 22:09:25 +0000
commitb03dce927b30db5dc36747d009ffeb435eea9c20 (patch)
tree5d469f156804ea705aacabeec3e22fb70718cb8d
parentea53e61c6c7ba2c7528b3e0a8d4680475897d679 (diff)
downloadgo-b03dce927b30db5dc36747d009ffeb435eea9c20.tar.gz
go-b03dce927b30db5dc36747d009ffeb435eea9c20.zip
cmd/compile: avoid n.Right nil dereference on non-existent interface methods
Fixes #18392. Avoid nil dereferencing n.Right when dealing with non-existent self referenced interface methods e.g. type A interface{ Fn(A.Fn) } Instead, infer the symbol name from n.Sym itself. Change-Id: I60d5f8988e7318693e5c8da031285d8d7347b771 Reviewed-on: https://go-review.googlesource.com/34817 Run-TryBot: Matthew Dempsky <mdempsky@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Matthew Dempsky <mdempsky@google.com>
-rw-r--r--src/cmd/compile/internal/gc/typecheck.go2
-rw-r--r--test/fixedbugs/issue18392.go11
2 files changed, 12 insertions, 1 deletions
diff --git a/src/cmd/compile/internal/gc/typecheck.go b/src/cmd/compile/internal/gc/typecheck.go
index 23c60fa0d0..5ec1c9e2f2 100644
--- a/src/cmd/compile/internal/gc/typecheck.go
+++ b/src/cmd/compile/internal/gc/typecheck.go
@@ -859,7 +859,7 @@ OpSwitch:
}
if n.Type.Etype != TFUNC || !n.IsMethod() {
- yyerror("type %v has no method %S", n.Left.Type, n.Right.Sym)
+ yyerror("type %v has no method %S", n.Left.Type, n.Sym)
n.Type = nil
return n
}
diff --git a/test/fixedbugs/issue18392.go b/test/fixedbugs/issue18392.go
new file mode 100644
index 0000000000..ad64238983
--- /dev/null
+++ b/test/fixedbugs/issue18392.go
@@ -0,0 +1,11 @@
+// errorcheck
+
+// 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 p
+
+type A interface {
+ Fn(A.Fn) // ERROR "type A has no method A.Fn"
+}