]> Cypherpunks repositories - gostls13.git/commitdiff
go/types, types2: better error message for bad assignment
authorRobert Griesemer <gri@golang.org>
Fri, 5 May 2023 00:01:53 +0000 (17:01 -0700)
committerGopher Robot <gobot@golang.org>
Fri, 5 May 2023 19:07:50 +0000 (19:07 +0000)
If the LHS of an assignment is neither addressable nor a map expression
(and not the blank identifier), explicitly say so for a better error
message.

For #3117.

Change-Id: I4bffc35574fe390a0567e89182b23585eb5a90de
Reviewed-on: https://go-review.googlesource.com/c/go/+/492875
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Robert Findley <rfindley@google.com>
Run-TryBot: Robert Griesemer <gri@google.com>
Reviewed-by: Robert Griesemer <gri@google.com>
Auto-Submit: Robert Griesemer <gri@google.com>

src/cmd/compile/internal/types2/assignments.go
src/go/types/assignments.go
src/internal/types/testdata/fixedbugs/issue3117.go [new file with mode: 0644]

index 15d2a89934d15edf1c12d8d78d289a7c9680e525..cba102e4f4d438ecd494fa14a389146a078452fc 100644 (file)
@@ -222,7 +222,7 @@ func (check *Checker) lhsVar(lhs syntax.Expr) Type {
                                return Typ[Invalid]
                        }
                }
-               check.errorf(&x, UnassignableOperand, "cannot assign to %s", &x)
+               check.errorf(&x, UnassignableOperand, "cannot assign to %s (neither addressable nor a map index expression)", x.expr)
                return Typ[Invalid]
        }
 
index b0d11dfb822a6c42bbde8054dc74927fb0d2c52d..1ea51142e0e3e6bc574978d076ac5b82d816e3d7 100644 (file)
@@ -221,7 +221,7 @@ func (check *Checker) lhsVar(lhs ast.Expr) Type {
                                return Typ[Invalid]
                        }
                }
-               check.errorf(&x, UnassignableOperand, "cannot assign to %s", &x)
+               check.errorf(&x, UnassignableOperand, "cannot assign to %s (neither addressable nor a map index expression)", x.expr)
                return Typ[Invalid]
        }
 
diff --git a/src/internal/types/testdata/fixedbugs/issue3117.go b/src/internal/types/testdata/fixedbugs/issue3117.go
new file mode 100644 (file)
index 0000000..16c0afc
--- /dev/null
@@ -0,0 +1,13 @@
+// Copyright 2023 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.
+
+package p
+
+type S struct {
+       a [1]int
+}
+
+func _(m map[int]S, key int) {
+       m /* ERROR "cannot assign to m[key].a[0] (neither addressable nor a map index expression)" */ [key].a[0] = 0
+}