]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: verify that rangefunc assigning to no vars works
authorDavid Chase <drchase@google.com>
Tue, 2 Jul 2024 16:45:30 +0000 (12:45 -0400)
committerDavid Chase <drchase@google.com>
Tue, 30 Jul 2024 15:02:02 +0000 (15:02 +0000)
This adds a test for
   for range seq2rangefunc { ... }
and
   for onevar := range seq2rangefunc { ... }

For #65236.

Change-Id: I083f8e4c19eb4ba0d6024d5314ac29d941141778
Reviewed-on: https://go-review.googlesource.com/c/go/+/596135
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Keith Randall <khr@google.com>
Reviewed-by: Keith Randall <khr@golang.org>
src/cmd/compile/internal/rangefunc/rangefunc_test.go

index 97ab254395332ac7659dd586b7a1931ccb72867a..1d0bed05c8fbdf264bad767fc999e9d69c0910a4 100644 (file)
@@ -285,6 +285,26 @@ var fail []error = []error{
        errorString(CERR_MISSING),
 }
 
+// TestNoVars ensures that versions of rangefunc that use zero or one
+// iteration variable (instead of two) run the proper number of times
+// and in the one variable case supply the proper values.
+// For #65236.
+func TestNoVars(t *testing.T) {
+       i, k := 0, 0
+       for range Check2(OfSliceIndex([]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10})) {
+               i++
+       }
+       for j := range Check2(OfSliceIndex([]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10})) {
+               k += j
+       }
+       if i != 10 {
+               t.Errorf("Expected 10, got %d", i)
+       }
+       if k != 45 {
+               t.Errorf("Expected 45, got %d", k)
+       }
+}
+
 func TestCheck(t *testing.T) {
        i := 0
        defer func() {