// errorcheck

// Copyright 2012 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.

// Issue 4463: test builtin functions in statement context and in
// go/defer functions.

package p

import "unsafe"

func F() {
	var a []int
	var c chan int
	var m map[int]int
	var s struct{ f int }

	append(a, 0)			// ERROR "not used"
	cap(a)				// ERROR "not used"
	complex(1, 2)			// ERROR "not used"
	imag(1i)			// ERROR "not used"
	len(a)				// ERROR "not used"
	make([]int, 10)			// ERROR "not used"
	new(int)			// ERROR "not used"
	real(1i)			// ERROR "not used"
	unsafe.Alignof(a)		// ERROR "not used"
	unsafe.Offsetof(s.f)		// ERROR "not used"
	unsafe.Sizeof(a)		// ERROR "not used"

	close(c)
	copy(a, a)
	delete(m, 0)
	panic(0)
	print("foo")
	println("bar")
	recover()

	(close(c))
	(copy(a, a))
	(delete(m, 0))
	(panic(0))
	(print("foo"))
	(println("bar"))
	(recover())

	go append(a, 0)			// ERROR "not used|discards result"
	go cap(a)			// ERROR "not used|discards result"
	go complex(1, 2)		// ERROR "not used|discards result"
	go imag(1i)			// ERROR "not used|discards result"
	go len(a)			// ERROR "not used|discards result"
	go make([]int, 10)		// ERROR "not used|discards result"
	go new(int)			// ERROR "not used|discards result"
	go real(1i)			// ERROR "not used|discards result"
	go unsafe.Alignof(a)		// ERROR "not used|discards result"
	go unsafe.Offsetof(s.f)		// ERROR "not used|discards result"
	go unsafe.Sizeof(a)		// ERROR "not used|discards result"

	go close(c)
	go copy(a, a)
	go delete(m, 0)
	go panic(0)
	go print("foo")
	go println("bar")
	go recover()

	defer append(a, 0)		// ERROR "not used|discards result"
	defer cap(a)			// ERROR "not used|discards result"
	defer complex(1, 2)		// ERROR "not used|discards result"
	defer imag(1i)			// ERROR "not used|discards result"
	defer len(a)			// ERROR "not used|discards result"
	defer make([]int, 10)		// ERROR "not used|discards result"
	defer new(int)			// ERROR "not used|discards result"
	defer real(1i)			// ERROR "not used|discards result"
	defer unsafe.Alignof(a)		// ERROR "not used|discards result"
	defer unsafe.Offsetof(s.f)	// ERROR "not used|discards result"
	defer unsafe.Sizeof(a)		// ERROR "not used|discards result"

	defer close(c)
	defer copy(a, a)
	defer delete(m, 0)
	defer panic(0)
	defer print("foo")
	defer println("bar")
	defer recover()
}
