diff options
author | Robert Griesemer <gri@golang.org> | 2020-11-23 17:15:00 -0800 |
---|---|---|
committer | Robert Griesemer <gri@golang.org> | 2020-11-24 01:34:16 +0000 |
commit | a324aebb7ddc38c8d52165df4db75bf7ea63480e (patch) | |
tree | 410b7ed1a2cf6c667deede5b35a563937796f645 /src/cmd/compile/internal/types2/conversions.go | |
parent | 8fbdacf64c982b9a7f8cb27754bb01cedffa53c7 (diff) | |
download | go-a324aebb7ddc38c8d52165df4db75bf7ea63480e.tar.gz go-a324aebb7ddc38c8d52165df4db75bf7ea63480e.zip |
[dev.typeparams] go/types, cmd/compile/internal/types2: fix incorrect string(int) conversion (regression)
This is a 1:1 port of the go/types changes in
https://golang.org/cl/272666 (master branch).
Updates #42790.
Change-Id: I5da372961df48129b25777ed705b84d7201393ec
Reviewed-on: https://go-review.googlesource.com/c/go/+/272669
Trust: Robert Griesemer <gri@golang.org>
Run-TryBot: Robert Griesemer <gri@golang.org>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Diffstat (limited to 'src/cmd/compile/internal/types2/conversions.go')
-rw-r--r-- | src/cmd/compile/internal/types2/conversions.go | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/src/cmd/compile/internal/types2/conversions.go b/src/cmd/compile/internal/types2/conversions.go index 9ff548593f..0f6a990935 100644 --- a/src/cmd/compile/internal/types2/conversions.go +++ b/src/cmd/compile/internal/types2/conversions.go @@ -7,7 +7,10 @@ package types2 -import "go/constant" +import ( + "go/constant" + "unicode" +) // Conversion type-checks the conversion T(x). // The result is in x. @@ -22,14 +25,11 @@ func (check *Checker) conversion(x *operand, T Type) { case representableConst(x.val, check, t, &x.val): ok = true case isInteger(x.typ) && isString(t): - codepoint := int64(-1) - if i, ok := constant.Int64Val(x.val); ok { - codepoint = i + codepoint := unicode.ReplacementChar + if i, ok := constant.Uint64Val(x.val); ok && i <= unicode.MaxRune { + codepoint = rune(i) } - // If codepoint < 0 the absolute value is too large (or unknown) for - // conversion. This is the same as converting any other out-of-range - // value - let string(codepoint) do the work. - x.val = constant.MakeString(string(rune(codepoint))) + x.val = constant.MakeString(string(codepoint)) ok = true } case x.convertibleTo(check, T): |