Commit 2da9c3e0 authored by K. "pestophagous" Heller's avatar K. "pestophagous" Heller Committed by Robert Griesemer

cmd/compile: improve errors for invalid conversions of consts

Follow-up to Change-Id: If6e52c59eab438599d641ecf6f110ebafca740a9

This addresses the remaining tech debt on issue 21979.

The aforementioned previous CL silenced one of two mostly redundant
compiler errors. However, the silenced error was the more expressive
error. This CL now imbues the surviving error with the same level
of expressiveness as the old semi-redundant error.

Fixes #21979

Change-Id: I3273d48c88bbab073fabe53421d801df621ce321
Reviewed-on: https://go-review.googlesource.com/c/go/+/191079
Run-TryBot: Robert Griesemer <gri@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: default avatarRobert Griesemer <gri@golang.org>
parent a3ceb57f
......@@ -413,16 +413,20 @@ func convlit1(n *Node, t *types.Type, explicit bool, reuse canReuseNode) *Node {
return n
bad:
reportErr := false
if !n.Diag() {
if !t.Broke() {
yyerror("cannot convert %L to type %v", n, t)
}
reportErr = !t.Broke()
n.SetDiag(true)
}
if n.Type.IsUntyped() {
n = defaultlitreuse(n, nil, reuse)
}
if reportErr {
yyerror("cannot convert %L to type %v", n, t)
}
return n
}
......
// errorcheck
// Copyright 2019 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
func f() {
// old error: "(type untyped string)"
_ = bool("") // ERROR "cannot convert .. \(type string\) to type bool"
// old error: "(type untyped number)"
_ = bool(1) // ERROR "cannot convert 1 \(type int\) to type bool"
// old error: "(type untyped number)"
_ = bool(1.0) // ERROR "cannot convert 1 \(type float64\) to type bool"
// old error: "(type untyped number)"
_ = bool(-4 + 2i) // ERROR "cannot convert -4 \+ 2i \(type complex128\) to type bool"
// old error: "(type untyped bool)"
_ = string(true) // ERROR "cannot convert true \(type bool\) to type string"
_ = string(-1)
// old error: "(type untyped number)"
_ = string(1.0) // ERROR "cannot convert 1 \(type float64\) to type string"
// old error: "(type untyped number)"
_ = string(-4 + 2i) // ERROR "cannot convert -4 \+ 2i \(type complex128\) to type string"
// old error: "(type untyped string)"
_ = int("") // ERROR "cannot convert .. \(type string\) to type int"
// old error: "(type untyped bool)"
_ = int(true) // ERROR "cannot convert true \(type bool\) to type int"
_ = int(-1)
_ = int(1)
_ = int(1.0)
_ = int(-4 + 2i) // ERROR "truncated to integer"
// old error: "(type untyped string)"
_ = uint("") // ERROR "cannot convert .. \(type string\) to type uint"
// old error: "(type untyped bool)"
_ = uint(true) // ERROR "cannot convert true \(type bool\) to type uint"
_ = uint(-1) // ERROR "constant -1 overflows uint"
_ = uint(1)
_ = uint(1.0)
_ = uint(-4 + 2i) // ERROR "constant -4 overflows uint" "truncated to integer"
// old error: "(type untyped string)"
_ = float64("") // ERROR "cannot convert .. \(type string\) to type float64"
// old error: "(type untyped bool)"
_ = float64(true) // ERROR "cannot convert true \(type bool\) to type float64"
_ = float64(-1)
_ = float64(1)
_ = float64(1.0)
_ = float64(-4 + 2i) // ERROR "truncated to real"
// old error: "(type untyped string)"
_ = complex128("") // ERROR "cannot convert .. \(type string\) to type complex128"
// old error: "(type untyped bool)"
_ = complex128(true) // ERROR "cannot convert true \(type bool\) to type complex128"
_ = complex128(-1)
_ = complex128(1)
_ = complex128(1.0)
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment