From: Cuong Manh Le Date: Thu, 29 Aug 2019 17:42:38 +0000 (+0700) Subject: cmd/compile: emit error message for broken type X-Git-Tag: go1.14beta1~1271 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=97bc039c9cf127bd1bee9442eb1bc23aa63bf4ff;p=gostls13.git 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 --- 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() }