mirror of
https://github.com/golang/go
synced 2024-11-13 17:10:21 -07:00
e710a1fb2e
Previously, we used a single "untyped number" type for all untyped numeric constants. This led to vague error messages like "string(1.0)" reporting that "1 (type untyped number)" can't be converted to string, even though "string(1)" is valid. This CL makes cmd/compile more like go/types by utilizing types.Ideal{int,rune,float,complex} instead of types.Types[TIDEAL], and keeping n.Type in sync with n.Val().Ctype() during constant folding. Thanks to K Heller for looking into this issue, and for the included test case. Fixes #21979. Change-Id: Ibfea88c05704bc3c0a502a455d018a375589754d Reviewed-on: https://go-review.googlesource.com/c/go/+/194019 Reviewed-by: Robert Griesemer <gri@golang.org>
26 lines
552 B
Go
26 lines
552 B
Go
// errorcheck
|
|
|
|
// Copyright 2017 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.
|
|
|
|
// Issue 20185: type switching on untyped values (e.g. nil or consts)
|
|
// caused an internal compiler error.
|
|
|
|
package p
|
|
|
|
func F() {
|
|
switch t := nil.(type) { // ERROR "cannot type switch on non-interface value nil"
|
|
default:
|
|
_ = t
|
|
}
|
|
}
|
|
|
|
const x = 1
|
|
|
|
func G() {
|
|
switch t := x.(type) { // ERROR "cannot type switch on non-interface value x \(type untyped int\)"
|
|
default:
|
|
}
|
|
}
|