diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-28 13:14:23 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-28 13:14:23 +0000 |
commit | 73df946d56c74384511a194dd01dbe099584fd1a (patch) | |
tree | fd0bcea490dd81327ddfbb31e215439672c9a068 /test/ddd1.go | |
parent | Initial commit. (diff) | |
download | golang-1.16-73df946d56c74384511a194dd01dbe099584fd1a.tar.xz golang-1.16-73df946d56c74384511a194dd01dbe099584fd1a.zip |
Adding upstream version 1.16.10.upstream/1.16.10upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'test/ddd1.go')
-rw-r--r-- | test/ddd1.go | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/test/ddd1.go b/test/ddd1.go new file mode 100644 index 0000000..01b9c0e --- /dev/null +++ b/test/ddd1.go @@ -0,0 +1,64 @@ +// 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 untyped string. as type int|incompatible" + _ = sum([]int{1}) // ERROR "\[\]int{...}.*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" +) + +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 "[.][.][.]" + _ = 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 .*[.][.][.]" +} |