cmd/gc: fix confusing error with broken types and defer/go

Fixes #5172.

R=golang-dev, bradfitz, r
CC=golang-dev
https://golang.org/cl/9614044
This commit is contained in:
Daniel Morsing 2013-05-21 18:35:47 +02:00
Родитель bea7b51872
Коммит 6f5af9c0b1
2 изменённых файлов: 24 добавлений и 0 удалений

Просмотреть файл

@ -1793,6 +1793,11 @@ checkdefergo(Node *n)
break; break;
default: default:
conv: 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) { if(!n->diag) {
// The syntax made sure it was a call, so this must be // The syntax made sure it was a call, so this must be
// a conversion. // a conversion.

Просмотреть файл

@ -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()
}