cmd/vet: fix shadow assignment check with complex rhs
This change fixes shadow assignment check in cases when RHS is not an identifier
or a type assertion.
Fixes #12188
Change-Id: I0940df8d9c237ab8b8d3272eb6895e676c75c115
Reviewed-on: https://go-review.googlesource.com/16038
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
diff --git a/src/cmd/vet/shadow.go b/src/cmd/vet/shadow.go
index 2149e70..5d0d6b5 100644
--- a/src/cmd/vet/shadow.go
+++ b/src/cmd/vet/shadow.go
@@ -155,6 +155,8 @@
return false
}
}
+ default:
+ return false
}
}
return true
diff --git a/src/cmd/vet/testdata/shadow.go b/src/cmd/vet/testdata/shadow.go
index 34a6806..241109f 100644
--- a/src/cmd/vet/testdata/shadow.go
+++ b/src/cmd/vet/testdata/shadow.go
@@ -25,8 +25,9 @@
_ = i
}
if f != nil {
+ x := one() // ERROR "declaration of x shadows declaration at testdata/shadow.go:14"
var _, err = f.Read(buf) // ERROR "declaration of err shadows declaration at testdata/shadow.go:13"
- if err != nil {
+ if x == 1 && err != nil {
return err
}
}
@@ -52,3 +53,7 @@
_, _ = err, x
return
}
+
+func one() int {
+ return 1
+}