]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/gc: fix confusing error with broken types and defer/go
authorDaniel Morsing <daniel.morsing@gmail.com>
Tue, 21 May 2013 16:35:47 +0000 (18:35 +0200)
committerDaniel Morsing <daniel.morsing@gmail.com>
Tue, 21 May 2013 16:35:47 +0000 (18:35 +0200)
Fixes #5172.

R=golang-dev, bradfitz, r
CC=golang-dev
https://golang.org/cl/9614044

src/cmd/gc/typecheck.c
test/fixedbugs/issue5172.go [new file with mode: 0644]

index 40eecd337c1854b8af22ed3987d10ba35a5b85fa..12839009e332f749c45833fce4fc9ce6811125b3 100644 (file)
@@ -1793,6 +1793,11 @@ checkdefergo(Node *n)
                break;
        default:
        conv:
+               // type is broken or missing, most likely a method call on a broken type
+               // we will warn about the broken type elsewhere. no need to emit a potentially confusing error
+               if(n->left->type == T || n->left->type->broke)
+                       break;
+
                if(!n->diag) {
                        // The syntax made sure it was a call, so this must be
                        // a conversion.
diff --git a/test/fixedbugs/issue5172.go b/test/fixedbugs/issue5172.go
new file mode 100644 (file)
index 0000000..2dd542a
--- /dev/null
@@ -0,0 +1,19 @@
+// errorcheck
+
+// Copyright 2013 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.
+
+// issue 5172: spurious warn about type conversion on broken type inside go and defer
+
+package main
+
+type foo struct {
+       x bar // ERROR "undefined"
+}
+
+func main() {
+       var f foo
+       go f.bar()
+       defer f.bar()
+}