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
+}