aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/compile/internal/types2/conversions.go
diff options
context:
space:
mode:
authorRobert Griesemer <gri@golang.org>2020-11-23 17:15:00 -0800
committerRobert Griesemer <gri@golang.org>2020-11-24 01:34:16 +0000
commita324aebb7ddc38c8d52165df4db75bf7ea63480e (patch)
tree410b7ed1a2cf6c667deede5b35a563937796f645 /src/cmd/compile/internal/types2/conversions.go
parent8fbdacf64c982b9a7f8cb27754bb01cedffa53c7 (diff)
downloadgo-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.go16
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):