// $G $D/$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.

package main

import _ "fmt"

var call string

type T struct {
	_, _, _ int;
}

func (T) _() {
}

func (T) _() {
}

const (
	c0 = iota;
	_;
	_;
	_;
	c4;
)

var ints = []string {
	"1",
	"2",
	"3"
}

func f() (int, int) {
	call += "f";
	return 1,2
}

func g() (float, float) {
	call += "g";
	return 3,4
}

func h(_ int, _ float) {
}

func i() int {
	call += "i";
	return 23;
}

func main() {
	_, _ = f();
	a, _ := f();
	if a != 1 {panic(a)}
	b, _ := g();
	if b != 3 {panic(b)}
	_, a = f();
	if a != 2 {panic(a)}
	_, b = g();
	if b != 4 {panic(b)}
	_ = i();
	if call != "ffgfgi" {panic(call)}
	if c4 != 4 {panic(c4)}

	out := "";
	for _, s := range ints {
		out += s;
	}
	if out != "123" {panic(out)}

	sum := 0;
	for s, _ := range ints {
		sum += s;
	}
	if sum != 3 {panic(sum)}

	h(a,b);
}

// useless but legal
var _ int = 1;
var _ = 2;
var _, _ = 3, 4;
const _ = 3;
const _, _ = 4, 5;
type _ int;
func _() {
	panic("oops")
}

func ff() {
	var _ int = 1;
}
