// run

// Copyright 2015 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 zeroing range loops have the requisite side-effects.

package main

import (
	"fmt"
	"os"
)

func check(n int) {
	// When n == 0, i is untouched by the range loop.
	// Picking an initial value of -1 for i makes the
	// "want" calculation below correct in all cases.
	i := -1
	s := make([]byte, n)
	for i = range s {
		s[i] = 0
	}
	if want := n - 1; i != want {
		fmt.Printf("index after range with side-effect = %d want %d\n", i, want)
		os.Exit(1)
	}

	i = n + 1
	// i is shadowed here, so its value should be unchanged.
	for i := range s {
		s[i] = 0
	}
	if want := n + 1; i != want {
		fmt.Printf("index after range without side-effect = %d want %d\n", i, want)
		os.Exit(1)
	}

	// Index variable whose evaluation has side-effects
	var x int
	f := func() int {
		x++
		return 0
	}
	var a [1]int
	for a[f()] = range s {
		s[a[f()]] = 0
	}
	if want := n * 2; x != want {
		fmt.Printf("index function calls = %d want %d\n", x, want)
		os.Exit(1)
	}

	// Range expression whose evaluation has side-effects
	x = 0
	b := [1][]byte{s}
	for i := range b[f()] {
		b[f()][i] = 0
	}
	if want := n + 1; x != n+1 {
		fmt.Printf("range expr function calls = %d want %d\n", x, want)
		os.Exit(1)
	}
}

func main() {
	check(0)
	check(1)
	check(15)
}
