mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
go/types, types2: better error message for bad assignment
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>
This commit is contained in:
parent
a5350558e6
commit
26899ef3ee
3 changed files with 15 additions and 2 deletions
|
|
@ -222,7 +222,7 @@ func (check *Checker) lhsVar(lhs syntax.Expr) Type {
|
||||||
return Typ[Invalid]
|
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]
|
return Typ[Invalid]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -221,7 +221,7 @@ func (check *Checker) lhsVar(lhs ast.Expr) Type {
|
||||||
return Typ[Invalid]
|
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]
|
return Typ[Invalid]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
13
src/internal/types/testdata/fixedbugs/issue3117.go
vendored
Normal file
13
src/internal/types/testdata/fixedbugs/issue3117.go
vendored
Normal file
|
|
@ -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
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue