go/test/fixedbugs/issue16949.go
Martin Möhrmann 8895a99c9f cmd/compile: disallow typed non-integer constant len and cap make arguments
make(T, n, m) returns a slice of type T with length n and capacity m
where "The size arguments n and m must be of integer type or untyped."
https://tip.golang.org/ref/spec#Making_slices_maps_and_channels

The failure to reject typed non-integer size arguments in make
during compile time was uncovered after https://golang.org/cl/27851
changed the generation of makeslice calls.

Fixes   #16940
Updates #16949

Change-Id: Ib1e3576f0e6ad199c9b16b7a50c2db81290c63b4
Reviewed-on: https://go-review.googlesource.com/28301
Reviewed-by: Joe Tsai <thebrokentoaster@gmail.com>
Reviewed-by: Josh Bleecher Snyder <josharian@gmail.com>
2016-09-01 20:29:03 +00:00

31 lines
949 B
Go

// errorcheck
// Copyright 2016 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.
// Ensure that typed non-integer len and cap make arguments are not accepted.
package main
var sink []byte
func main() {
sink = make([]byte, 1.0)
sink = make([]byte, float32(1.0)) // ERROR "non-integer.*len"
sink = make([]byte, float64(1.0)) // ERROR "non-integer.*len"
sink = make([]byte, 0, 1.0)
sink = make([]byte, 0, float32(1.0)) // ERROR "non-integer.*cap"
sink = make([]byte, 0, float64(1.0)) // ERROR "non-integer.*cap"
sink = make([]byte, 1+0i)
sink = make([]byte, complex64(1+0i)) // ERROR "non-integer.*len"
sink = make([]byte, complex128(1+0i)) // ERROR "non-integer.*len"
sink = make([]byte, 0, 1+0i)
sink = make([]byte, 0, complex64(1+0i)) // ERROR "non-integer.*cap"
sink = make([]byte, 0, complex128(1+0i)) // ERROR "non-integer.*cap"
}