]> Cypherpunks.ru repositories - gostls13.git/commitdiff
cmd/internal/gc: omit non-explicit capacity in errors with map/chan make
authorChris Manghane <cmang@golang.org>
Tue, 9 Dec 2014 03:17:37 +0000 (19:17 -0800)
committerChris Manghane <cmang@golang.org>
Wed, 25 Feb 2015 20:04:22 +0000 (20:04 +0000)
Fixes #9083.

Change-Id: Ifbdebafb39a73a1dacf7e67171e8e88028d1f10b
Reviewed-on: https://go-review.googlesource.com/1219
Reviewed-by: Russ Cox <rsc@golang.org>
Run-TryBot: Chris Manghane <cmang@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>

src/cmd/internal/gc/fmt.go
test/escape2.go
test/escape2n.go
test/fixedbugs/issue9083.go [new file with mode: 0644]

index 5ad607e04eb45cf6929f9343d3ded5d9daca6277..97907229d4803c243becd09f21b0c695ee2357d9 100644 (file)
@@ -1639,7 +1639,7 @@ func exprfmt(n *Node, prec int) string {
                        f += fmt.Sprintf("make(%v, %v, %v)", Tconv(n.Type, 0), Nconv(n.Left, 0), Nconv(n.Right, 0))
                        return f
                }
-               if n.Left != nil {
+               if n.Left != nil && (n.Op == OMAKESLICE || !isideal(n.Left.Type)) {
                        var f string
                        f += fmt.Sprintf("make(%v, %v)", Tconv(n.Type, 0), Nconv(n.Left, 0))
                        return f
index ca9f61481b7002d71f13e4a83f684aef017a86f2..3fd62d1dfca1d03f197fe3ee3486b075503ec000 100644 (file)
@@ -1753,7 +1753,7 @@ func slicerunetostring2() {
 }
 
 func makemap0() {
-       m := make(map[int]int) // ERROR "make\(map\[int\]int\, 0\) does not escape"
+       m := make(map[int]int) // ERROR "make\(map\[int\]int\) does not escape"
        m[0] = 0
        m[1]++
        delete(m, 1)
@@ -1761,10 +1761,10 @@ func makemap0() {
 }
 
 func makemap1() map[int]int {
-       return make(map[int]int) // ERROR "make\(map\[int\]int\, 0\) escapes to heap"
+       return make(map[int]int) // ERROR "make\(map\[int\]int\) escapes to heap"
 }
 
 func makemap2() {
-       m := make(map[int]int) // ERROR "make\(map\[int\]int\, 0\) escapes to heap"
+       m := make(map[int]int) // ERROR "make\(map\[int\]int\) escapes to heap"
        sink = m
 }
index ddd56934851c85e5805eb2e2f3c471288f39ea33..e9dd7b984e5d18563d046e9347abaa48b24659a6 100644 (file)
@@ -1753,7 +1753,7 @@ func slicerunetostring2() {
 }
 
 func makemap0() {
-       m := make(map[int]int) // ERROR "make\(map\[int\]int\, 0\) does not escape"
+       m := make(map[int]int) // ERROR "make\(map\[int\]int\) does not escape"
        m[0] = 0
        m[1]++
        delete(m, 1)
@@ -1761,10 +1761,10 @@ func makemap0() {
 }
 
 func makemap1() map[int]int {
-       return make(map[int]int) // ERROR "make\(map\[int\]int\, 0\) escapes to heap"
+       return make(map[int]int) // ERROR "make\(map\[int\]int\) escapes to heap"
 }
 
 func makemap2() {
-       m := make(map[int]int) // ERROR "make\(map\[int\]int\, 0\) escapes to heap"
+       m := make(map[int]int) // ERROR "make\(map\[int\]int\) escapes to heap"
        sink = m
 }
diff --git a/test/fixedbugs/issue9083.go b/test/fixedbugs/issue9083.go
new file mode 100644 (file)
index 0000000..c92c0a6
--- /dev/null
@@ -0,0 +1,22 @@
+// errorcheck
+
+// Copyright 2014 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 9083: map/chan error messages show non-explicit capacity.
+
+package main
+
+// untyped constant
+const zero = 0
+
+func main() {
+       var x int
+       x = make(map[int]int) // ERROR "cannot use make\(map\[int\]int\)|incompatible"
+       x = make(map[int]int, 0) // ERROR "cannot use make\(map\[int\]int, 0\)|incompatible"
+       x = make(map[int]int, zero) // ERROR "cannot use make\(map\[int\]int, zero\)|incompatible"
+       x = make(chan int) // ERROR "cannot use make\(chan int\)|incompatible"
+       x = make(chan int, 0) // ERROR "cannot use make\(chan int, 0\)|incompatible"
+       x = make(chan int, zero) // ERROR "cannot use make\(chan int, zero\)|incompatible"
+}