...
Run Format

Source file test/ddd1.go

Documentation: test

  // errorcheck
  
  // Copyright 2010 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.
  
  // Verify that illegal uses of ... are detected.
  // Does not compile.
  
  package main
  
  import "unsafe"
  
  func sum(args ...int) int { return 0 }
  
  var (
  	_ = sum(1, 2, 3)
  	_ = sum()
  	_ = sum(1.0, 2.0)
  	_ = sum(1.5)      // ERROR "integer"
  	_ = sum("hello")  // ERROR ".hello. .type string. as type int|incompatible"
  	_ = sum([]int{1}) // ERROR "\[\]int literal.*as type int|incompatible"
  )
  
  func sum3(int, int, int) int { return 0 }
  func tuple() (int, int, int) { return 1, 2, 3 }
  
  var (
  	_ = sum(tuple())
  	_ = sum(tuple()...) // ERROR "multiple-value"
  	_ = sum3(tuple())
  	_ = sum3(tuple()...) // ERROR "multiple-value" "not enough"
  )
  
  type T []T
  
  func funny(args ...T) int { return 0 }
  
  var (
  	_ = funny(nil)
  	_ = funny(nil, nil)
  	_ = funny([]T{}) // ok because []T{} is a T; passes []T{[]T{}}
  )
  
  func Foo(n int) {}
  
  func bad(args ...int) {
  	print(1, 2, args...)	// ERROR "[.][.][.]"
  	println(args...)	// ERROR "[.][.][.]"
  	ch := make(chan int)
  	close(ch...)	// ERROR "[.][.][.]"
  	_ = len(args...)	// ERROR "[.][.][.]"
  	_ = new(int...)	// ERROR "[.][.][.]"
  	n := 10
  	_ = make([]byte, n...)	// ERROR "[.][.][.]"
  	// TODO(rsc): enable after gofmt bug is fixed
  	//	_ = make([]byte, 10 ...)	// error "[.][.][.]"
  	var x int
  	_ = unsafe.Pointer(&x...)	// ERROR "[.][.][.]"
  	_ = unsafe.Sizeof(x...)	// ERROR "[.][.][.]"
  	_ = [...]byte("foo") // ERROR "[.][.][.]"
  	_ = [...][...]int{{1,2,3},{4,5,6}}	// ERROR "[.][.][.]"
  
  	Foo(x...) // ERROR "invalid use of [.][.][.] in call"
  }
  

View as plain text