Commit 4cff1047 authored by Anfernee Yongkun Gui's avatar Anfernee Yongkun Gui Committed by Ian Lance Taylor

cmd/compile: fix print/println when input is uint

Fixes #21887

Change-Id: I30e8e03ecfb67a2c4deedc2c8436da4c4782136d
Reviewed-on: https://go-review.googlesource.com/63971
Run-TryBot: Emmanuel Odeke <emm.odeke@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: 's avatarDavid Crawshaw <crawshaw@golang.org>
parent 7246585f
...@@ -2127,13 +2127,13 @@ func walkprint(nn *Node, init *Nodes) *Node { ...@@ -2127,13 +2127,13 @@ func walkprint(nn *Node, init *Nodes) *Node {
case TSLICE: case TSLICE:
on = syslook("printslice") on = syslook("printslice")
on = substArgTypes(on, n.Type) // any-1 on = substArgTypes(on, n.Type) // any-1
case TUINT64: case TUINT, TUINT8, TUINT16, TUINT32, TUINT64, TUINTPTR:
if isRuntimePkg(n.Type.Sym.Pkg) && n.Type.Sym.Name == "hex" { if isRuntimePkg(n.Type.Sym.Pkg) && n.Type.Sym.Name == "hex" {
on = syslook("printhex") on = syslook("printhex")
} else { } else {
on = syslook("printuint") on = syslook("printuint")
} }
case TINT, TUINT, TUINTPTR, TINT8, TUINT8, TINT16, TUINT16, TINT32, TUINT32, TINT64: case TINT, TINT8, TINT16, TINT32, TINT64:
on = syslook("printint") on = syslook("printint")
case TFLOAT32, TFLOAT64: case TFLOAT32, TFLOAT64:
on = syslook("printfloat") on = syslook("printfloat")
......
// cmpout
// 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 21887: println(^uint(0)) fails to compile
package main
import "strconv"
func main() {
if strconv.IntSize == 32 {
println(^uint(0))
} else {
println(^uint32(0))
}
if strconv.IntSize == 64 {
println(^uint(0))
} else {
println(^uint64(0))
}
}
4294967295
18446744073709551615
...@@ -19,6 +19,11 @@ func main() { ...@@ -19,6 +19,11 @@ func main() {
println(([]int)(nil)) // printslice println(([]int)(nil)) // printslice
println(int64(-7)) // printint println(int64(-7)) // printint
println(uint64(7)) // printuint println(uint64(7)) // printuint
println(uint32(7)) // printuint
println(uint16(7)) // printuint
println(uint8(7)) // printuint
println(uint(7)) // printuint
println(uintptr(7)) // printuint
println(8.0) // printfloat println(8.0) // printfloat
println(complex(9.0, 10.0)) // printcomplex println(complex(9.0, 10.0)) // printcomplex
println(true) // printbool println(true) // printbool
...@@ -28,11 +33,18 @@ func main() { ...@@ -28,11 +33,18 @@ func main() {
// test goprintf // test goprintf
defer println((interface{})(nil)) defer println((interface{})(nil))
defer println((interface{f()})(nil)) defer println((interface {
f()
})(nil))
defer println((map[int]int)(nil)) defer println((map[int]int)(nil))
defer println(([]int)(nil)) defer println(([]int)(nil))
defer println(int64(-11)) defer println(int64(-11))
defer println(uint64(12)) defer println(uint64(12))
defer println(uint32(12))
defer println(uint16(12))
defer println(uint8(12))
defer println(uint(12))
defer println(uintptr(12))
defer println(13.0) defer println(13.0)
defer println(complex(14.0, 15.0)) defer println(complex(14.0, 15.0))
defer println(true) defer println(true)
......
...@@ -4,6 +4,11 @@ ...@@ -4,6 +4,11 @@
[0/0]0x0 [0/0]0x0
-7 -7
7 7
7
7
7
7
7
+8.000000e+000 +8.000000e+000
(+9.000000e+000+1.000000e+001i) (+9.000000e+000+1.000000e+001i)
true true
...@@ -17,6 +22,11 @@ true ...@@ -17,6 +22,11 @@ true
(+1.400000e+001+1.500000e+001i) (+1.400000e+001+1.500000e+001i)
+1.300000e+001 +1.300000e+001
12 12
12
12
12
12
12
-11 -11
[0/0]0x0 [0/0]0x0
0x0 0x0
......
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