// $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 x() (s string) {
	a, b, s := f3();
	return	// tests that result var is in scope for redeclaration
}

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();
	}
	if x() != "3" {
		println("x() failed");
	}
}
