]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: fix print/println when input is uint
authorAnfernee Yongkun Gui <anfernee.gui@gmail.com>
Fri, 15 Sep 2017 06:06:20 +0000 (23:06 -0700)
committerIan Lance Taylor <iant@golang.org>
Tue, 26 Sep 2017 04:08:38 +0000 (04:08 +0000)
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: David Crawshaw <crawshaw@golang.org>
src/cmd/compile/internal/gc/walk.go
test/fixedbugs/issue21887.go [new file with mode: 0644]
test/fixedbugs/issue21887.out [new file with mode: 0644]
test/print.go
test/print.out

index 393842d67687941599c21347c607dd3f752e8038..48e6319e439f670667c967b13648c843023a5b4e 100644 (file)
@@ -2127,13 +2127,13 @@ func walkprint(nn *Node, init *Nodes) *Node {
                case TSLICE:
                        on = syslook("printslice")
                        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" {
                                on = syslook("printhex")
                        } else {
                                on = syslook("printuint")
                        }
-               case TINT, TUINT, TUINTPTR, TINT8, TUINT8, TINT16, TUINT16, TINT32, TUINT32, TINT64:
+               case TINT, TINT8, TINT16, TINT32, TINT64:
                        on = syslook("printint")
                case TFLOAT32, TFLOAT64:
                        on = syslook("printfloat")
diff --git a/test/fixedbugs/issue21887.go b/test/fixedbugs/issue21887.go
new file mode 100644 (file)
index 0000000..9e3e91f
--- /dev/null
@@ -0,0 +1,25 @@
+// 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))
+       }
+}
diff --git a/test/fixedbugs/issue21887.out b/test/fixedbugs/issue21887.out
new file mode 100644 (file)
index 0000000..664b67d
--- /dev/null
@@ -0,0 +1,2 @@
+4294967295
+18446744073709551615
index 466e19f1bf217d1040c7e9044587a7c94aefe3d7..b7f3db0a41ba775a93041f28bff8adfd82234a4c 100644 (file)
@@ -19,6 +19,11 @@ func main() {
        println(([]int)(nil))       // printslice
        println(int64(-7))          // printint
        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(complex(9.0, 10.0)) // printcomplex
        println(true)               // printbool
@@ -28,11 +33,18 @@ func main() {
 
        // test goprintf
        defer println((interface{})(nil))
-       defer println((interface{f()})(nil))
+       defer println((interface {
+               f()
+       })(nil))
        defer println((map[int]int)(nil))
        defer println(([]int)(nil))
        defer println(int64(-11))
        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(complex(14.0, 15.0))
        defer println(true)
index 266fe5d6b0196c08a6b072f23d4937a705e259e8..85376af0c78eadf51ffcc0eb60b2e9fbe505c83d 100644 (file)
@@ -4,6 +4,11 @@
 [0/0]0x0
 -7
 7
+7
+7
+7
+7
+7
 +8.000000e+000
 (+9.000000e+000+1.000000e+001i)
 true
@@ -17,6 +22,11 @@ true
 (+1.400000e+001+1.500000e+001i)
 +1.300000e+001
 12
+12
+12
+12
+12
+12
 -11
 [0/0]0x0
 0x0