1// run
2
3// Copyright 2011 The Go Authors. All rights reserved.
4// Use of this source code is governed by a BSD-style
5// license that can be found in the LICENSE file.
6
7// Test run-time error detection for interface values containing types
8// that cannot be compared for equality.
9
10package main
11
12func main() {
13	cmp(1)
14
15	var (
16		m map[int]int
17		s struct{ x []int }
18		f func()
19	)
20	noCmp(m)
21	noCmp(s)
22	noCmp(f)
23}
24
25func cmp(x interface{}) bool {
26	return x == x
27}
28
29func noCmp(x interface{}) {
30	shouldPanic(func() { cmp(x) })
31}
32
33func shouldPanic(f func()) {
34	defer func() {
35		if recover() == nil {
36			panic("function should panic")
37		}
38	}()
39	f()
40}
41