cmd/gc: fix ... escape analysis bug

If the ... element type contained no pointers,
then the escape analysis did not track the ... itself.
This manifested in an escaping ...byte being treated
as non-escaping.

Fixes #7934.

LGTM=iant
R=golang-codereviews, iant
CC=golang-codereviews
https://golang.org/cl/100310043
diff --git a/test/escape2.go b/test/escape2.go
index 047adf5..220f9d9 100644
--- a/test/escape2.go
+++ b/test/escape2.go
@@ -80,7 +80,7 @@
 	xxx = yyy
 }
 
-// Must treat yyy as leaking because *yyy leaks, and the escape analysis 
+// Must treat yyy as leaking because *yyy leaks, and the escape analysis
 // summaries in exported metadata do not distinguish these two cases.
 func foo13(yyy **int) { // ERROR "leaking param: yyy"
 	*xxx = *yyy
@@ -1294,15 +1294,15 @@
 func G() {
 	var buf1 [10]byte
 	F1(buf1[:]) // ERROR "buf1 does not escape"
-	
+
 	var buf2 [10]byte // ERROR "moved to heap: buf2"
-	F2(buf2[:]) // ERROR "buf2 escapes to heap"
+	F2(buf2[:])       // ERROR "buf2 escapes to heap"
 
 	var buf3 [10]byte
 	F3(buf3[:]) // ERROR "buf3 does not escape"
-	
+
 	var buf4 [10]byte // ERROR "moved to heap: buf4"
-	F4(buf4[:]) // ERROR "buf4 escapes to heap"
+	F4(buf4[:])       // ERROR "buf4 escapes to heap"
 }
 
 type Tm struct {
@@ -1314,9 +1314,9 @@
 
 func foo141() {
 	var f func()
-	
+
 	t := new(Tm) // ERROR "escapes to heap"
-	f = t.M // ERROR "t.M does not escape"
+	f = t.M      // ERROR "t.M does not escape"
 	_ = f
 }
 
@@ -1324,7 +1324,7 @@
 
 func foo142() {
 	t := new(Tm) // ERROR "escapes to heap"
-	gf = t.M // ERROR "t.M escapes to heap"
+	gf = t.M     // ERROR "t.M escapes to heap"
 }
 
 // issue 3888.
@@ -1399,3 +1399,15 @@
 		}
 	}
 }
+
+// issue 7934: missed ... if element type had no pointers
+
+var save150 []byte
+
+func foo150(x ...byte) { // ERROR "leaking param: x"
+	save150 = x
+}
+
+func bar150() {
+	foo150(1, 2, 3) // ERROR "[.][.][.] argument escapes to heap"
+}