From 97bc039c9cf127bd1bee9442eb1bc23aa63bf4ff Mon Sep 17 00:00:00 2001 From: Cuong Manh Le Date: Fri, 30 Aug 2019 00:42:38 +0700 Subject: [PATCH] cmd/compile: emit error message for broken type The original report in #5172 was that cmd/compile was generating bogus follow-on error messages when typechecking a struct failed. Instead of fixing those follow-on error messages, golang.org/cl/9614044 suppress all follow-on error messages after struct typecheck fails. We should continue emitting error messages instead. While at it, also add the test case for original report. Fixes #33947 Change-Id: I4a5c6878977128abccd704350a12df743631c7bf Reviewed-on: https://go-review.googlesource.com/c/go/+/191944 Run-TryBot: Cuong Manh Le TryBot-Result: Gobot Gobot Reviewed-by: Matthew Dempsky --- src/cmd/compile/internal/gc/typecheck.go | 7 +------ test/fixedbugs/issue5172.go | 11 +++++++++-- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/cmd/compile/internal/gc/typecheck.go b/src/cmd/compile/internal/gc/typecheck.go index 03c5528c3d..b50f23da82 100644 --- a/src/cmd/compile/internal/gc/typecheck.go +++ b/src/cmd/compile/internal/gc/typecheck.go @@ -503,12 +503,7 @@ func typecheck1(n *Node, top int) (res *Node) { case OTSTRUCT: ok |= Etype - t := tostruct(n.List.Slice()) - if t.Broke() { - n.Type = nil - return n - } - setTypeNode(n, t) + setTypeNode(n, tostruct(n.List.Slice())) n.List.Set(nil) case OTINTER: diff --git a/test/fixedbugs/issue5172.go b/test/fixedbugs/issue5172.go index a6acbd3db7..0339935b64 100644 --- a/test/fixedbugs/issue5172.go +++ b/test/fixedbugs/issue5172.go @@ -12,8 +12,15 @@ type foo struct { x bar // ERROR "undefined" } +type T struct{} + +func (t T) Bar() {} + func main() { var f foo - go f.bar() // GCCGO_ERROR "undefined" - defer f.bar() // GCCGO_ERROR "undefined" + go f.bar() // ERROR "undefined" + defer f.bar() // ERROR "undefined" + + t := T{1} // ERROR "too many values" + go t.Bar() } -- 2.51.0