mirror of
https://github.com/golang/go
synced 2024-11-11 21:40:21 -07:00
cmd/gc: fix duplicate map key check
Do not compare nil and true. Fixes #7996. LGTM=r R=golang-codereviews, r CC=golang-codereviews https://golang.org/cl/91470043
This commit is contained in:
parent
fbd0915008
commit
ec38c6f5e3
@ -2415,23 +2415,19 @@ keydup(Node *n, Node *hash[], ulong nhash)
|
||||
for(a=hash[h]; a!=N; a=a->ntest) {
|
||||
cmp.op = OEQ;
|
||||
cmp.left = n;
|
||||
b = 0;
|
||||
if(a->op == OCONVIFACE && orign->op == OCONVIFACE) {
|
||||
if(a->left->type == n->type) {
|
||||
if(eqtype(a->left->type, n->type)) {
|
||||
cmp.right = a->left;
|
||||
evconst(&cmp);
|
||||
b = cmp.val.u.bval;
|
||||
}
|
||||
else {
|
||||
b = 0;
|
||||
}
|
||||
}
|
||||
else {
|
||||
} else if(eqtype(a->type, n->type)) {
|
||||
cmp.right = a;
|
||||
evconst(&cmp);
|
||||
b = cmp.val.u.bval;
|
||||
}
|
||||
if(b) {
|
||||
// too lazy to print the literal
|
||||
yyerror("duplicate key %N in map literal", n);
|
||||
return;
|
||||
}
|
||||
|
14
test/fixedbugs/issue7996.go
Normal file
14
test/fixedbugs/issue7996.go
Normal file
@ -0,0 +1,14 @@
|
||||
// compile
|
||||
|
||||
// Copyright 2014 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.
|
||||
|
||||
// /tmp/x.go:5: illegal constant expression: bool == interface {}
|
||||
|
||||
package p
|
||||
|
||||
var m = map[interface{}]struct{}{
|
||||
nil: {},
|
||||
true: {},
|
||||
}
|
Loading…
Reference in New Issue
Block a user