Merge pull request #3147 from fyfyrchik/fix-big-uint64

compiler: Fix emitting big uint64 constants
This commit is contained in:
Roman Khimov 2023-10-05 22:34:07 +03:00 committed by GitHub
commit b78bea17c0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 13 additions and 1 deletions

View file

@ -9,6 +9,7 @@ import (
"go/token"
"go/types"
"math"
"math/big"
"sort"
"strings"
@ -208,9 +209,12 @@ func (c *codegen) emitLoadConst(t types.TypeAndValue) {
case types.Int, types.UntypedInt, types.Uint,
types.Int8, types.Uint8,
types.Int16, types.Uint16,
types.Int32, types.Uint32, types.Int64, types.Uint64:
types.Int32, types.Uint32, types.Int64:
val, _ := constant.Int64Val(t.Value)
emit.Int(c.prog.BinWriter, val)
case types.Uint64:
val, _ := constant.Int64Val(t.Value)
emit.BigInt(c.prog.BinWriter, new(big.Int).SetUint64(uint64(val)))
case types.String, types.UntypedString:
val := constant.StringVal(t.Value)
emit.String(c.prog.BinWriter, val)

View file

@ -18,6 +18,14 @@ var numericTestCases = []testCase{
`,
big.NewInt(6),
},
{
"shift uint64",
`package foo
func Main() uint64 {
return 1 << 63
}`,
new(big.Int).SetUint64(1 << 63),
},
}
func TestNumericExprs(t *testing.T) {