summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRob Pike <r@golang.org>2009-04-18 17:21:00 -0700
committerRob Pike <r@golang.org>2009-04-18 17:21:00 -0700
commitdccbbf401cc34b01d0c5d7d4657f161d3c491a88 (patch)
treeb8fc9a1edd33965ce67aafc5472c1df9ba685028
parent87ce757eee55aafbe35b03b2cad734d9631fe6cb (diff)
downloadgolang-dccbbf401cc34b01d0c5d7d4657f161d3c491a88.tar.gz
tests for redeclaration in :=
R=ken DELTA=71 (71 added, 0 deleted, 0 changed) OCL=27616 CL=27616
-rw-r--r--test/decl.go29
-rw-r--r--test/declbad.go50
2 files changed, 79 insertions, 0 deletions
diff --git a/test/decl.go b/test/decl.go
new file mode 100644
index 000000000..6229db9b1
--- /dev/null
+++ b/test/decl.go
@@ -0,0 +1,29 @@
+// $G $F.go && $L $F.$A && ./$A.out
+
+// Copyright 2009 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.
+
+// Correct short declarations and redeclarations.
+
+package main
+
+func f1() int { return 1 }
+func f2() (float, int) { return 1, 2 }
+func f3() (float, int, string) { return 1, 2, "3" }
+
+func main() {
+ i, f, s := f3();
+ j, f := f2(); // redeclare f
+ k := f1();
+ m, g, s := f3();
+ m, h, s := f3();
+ {
+ // new block should be ok.
+ i, f, s := f3();
+ j, f := f2(); // redeclare f
+ k := f1();
+ m, g, s := f3();
+ m, h, s := f3();
+ }
+}
diff --git a/test/declbad.go b/test/declbad.go
new file mode 100644
index 000000000..8115b2cf6
--- /dev/null
+++ b/test/declbad.go
@@ -0,0 +1,50 @@
+// errchk $G -e $F.go
+
+// Copyright 2009 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.
+
+// Incorrect short declarations and redeclarations.
+
+package main
+
+func f1() int { return 1 }
+func f2() (float, int) { return 1, 2 }
+func f3() (float, int, string) { return 1, 2, "3" }
+
+func main() {
+ {
+ // simple redeclaration
+ i := f1();
+ i := f1(); // ERROR "redeclared"
+ {
+ // change of type for f
+ i, f, s := f3();
+ f, g, t := f3(); // ERROR "redeclared"
+ }
+ {
+ // change of type for i
+ i, f, s := f3();
+ j, i, t := f3(); // ERROR "redeclared"
+ }
+ {
+ // no new variables
+ i, f, s := f3();
+ i, f := f2(); // ERROR "redeclared"
+ }
+ {
+ // single redeclaration
+ i, f, s := f3();
+ i := f1(); // ERROR "redeclared"
+ }
+ // double redeclaration
+ {
+ i, f, s := f3();
+ i, f := f2(); // ERROR "redeclared"
+ }
+ {
+ // triple redeclaration
+ i, f, s := f3();
+ i, f, s := f3(); // ERROR "redeclared"
+ }
+}