aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Griesemer <gri@golang.org>2017-06-07 13:10:05 -0700
committerRobert Griesemer <gri@golang.org>2017-06-07 21:22:58 +0000
commit660200528afbcf203d5cdc53a46fd3be7d2bd35c (patch)
tree062246e5e68b7e2529064b8c1984299e8da15a32
parentef0f7fb92b9458d7d35ee3c10ae853e3dc3077eb (diff)
downloadgo-660200528afbcf203d5cdc53a46fd3be7d2bd35c.tar.xz
cmd/compile: don't implicitly dereference pointer to arrays for real/imag
Fixes #20602. Change-Id: Iac1589484dec626c018314e0cea7efce091fd87d Reviewed-on: https://go-review.googlesource.com/45075 Reviewed-by: Matthew Dempsky <mdempsky@google.com>
-rw-r--r--src/cmd/compile/internal/gc/typecheck.go4
-rw-r--r--test/fixedbugs/issue20602.go14
2 files changed, 17 insertions, 1 deletions
diff --git a/src/cmd/compile/internal/gc/typecheck.go b/src/cmd/compile/internal/gc/typecheck.go
index b02bc659be..04efcc3d82 100644
--- a/src/cmd/compile/internal/gc/typecheck.go
+++ b/src/cmd/compile/internal/gc/typecheck.go
@@ -1349,7 +1349,9 @@ OpSwitch:
}
n.Left = typecheck(n.Left, Erv)
n.Left = defaultlit(n.Left, nil)
- n.Left = implicitstar(n.Left)
+ if n.Op == OCAP || n.Op == OLEN {
+ n.Left = implicitstar(n.Left)
+ }
l := n.Left
t := l.Type
if t == nil {
diff --git a/test/fixedbugs/issue20602.go b/test/fixedbugs/issue20602.go
new file mode 100644
index 0000000000..ca4ce095aa
--- /dev/null
+++ b/test/fixedbugs/issue20602.go
@@ -0,0 +1,14 @@
+// errorcheck
+
+// Copyright 2017 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.
+
+// Verify that the correct (not implicitly dereferenced)
+// type is reported in the error message.
+
+package p
+
+var p = &[1]complex128{0}
+var _ = real(p) // ERROR "type \*\[1\]complex128"
+var _ = imag(p) // ERROR "type \*\[1\]complex128"