0
1
mirror of https://github.com/golang/go synced 2025-04-12 00:29:42 +00:00
Files
Keith Randall eb6c433eb3 cmd/compile: don't convert non-Go-constants to OLITERALs
Don't convert values that aren't Go constants, like
uintptr(unsafe.Pointer(nil)), to a literal constant. This avoids
assuming they are constants for things like indexing, array sizes,
case duplication, etc.

Also, nil is an allowed duplicate in switches. CTNILs aren't Go constants.

Fixes 
Fixes 

Change-Id: I9ab8af47098651ea09ef10481787eae2ae2fb445
Reviewed-on: https://go-review.googlesource.com/c/151320
Run-TryBot: Keith Randall <khr@golang.org>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
2018-11-27 01:21:41 +00:00

35 lines
572 B
Go

// compile
// Copyright 2018 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.
// Non-constant duplicate keys/cases should not be reported
// as errors by the compiler.
package p
import "unsafe"
func f() {
_ = map[uintptr]int{
0: 0,
uintptr(unsafe.Pointer(nil)): 0,
}
switch uintptr(0) {
case 0:
case uintptr(unsafe.Pointer(nil)):
}
switch interface{}(nil) {
case nil:
case nil:
}
_ = map[interface{}]int{
nil: 0,
nil: 0,
}
}