mirror of
https://github.com/golang/go
synced 2024-11-26 20:11:26 -07:00
cmd/compile: do not add invalid key to constSet
After CL 272654, the compiler now use go/constant.Value to represent constant nodes. That makes ir.ConstantValue requires node type to correctly return value for untyped int node. But untyped int node can have nil type after typechecked, e.g: using int value as key for map[string]int, that makes the compiler crashes. To fix it, just don't add the invalid key to constSet, since when it's not important to report duplicated keys when they aren't valid. For #43311 Fixes #44432 Change-Id: I44d8f2b95f5cb339e77e8a705a94bcb16e62beb9 Reviewed-on: https://go-review.googlesource.com/c/go/+/294034 Trust: Cuong Manh Le <cuong.manhle.vn@gmail.com> Run-TryBot: Cuong Manh Le <cuong.manhle.vn@gmail.com> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Matthew Dempsky <mdempsky@google.com>
This commit is contained in:
parent
4b8b2c5864
commit
1d0256a989
@ -794,7 +794,7 @@ func (s *constSet) add(pos src.XPos, n ir.Node, what, where string) {
|
||||
}
|
||||
}
|
||||
|
||||
if !ir.IsConstNode(n) {
|
||||
if !ir.IsConstNode(n) || n.Type() == nil {
|
||||
return
|
||||
}
|
||||
if n.Type().IsUntyped() {
|
||||
|
13
test/fixedbugs/issue44432.go
Normal file
13
test/fixedbugs/issue44432.go
Normal file
@ -0,0 +1,13 @@
|
||||
// errorcheck -G=0 -d=panic
|
||||
|
||||
// Copyright 2021 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
|
||||
|
||||
var m = map[string]int{
|
||||
"a": 1,
|
||||
1: 1, // ERROR "cannot use 1.*as type string in map key"
|
||||
2: 2, // ERROR "cannot use 2.*as type string in map key"
|
||||
}
|
Loading…
Reference in New Issue
Block a user