--- /dev/null
+// Copyright 2020 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.
+
+// This file contains tests for the ifaceassert checker.
+
+package a
+
+import "io"
+
+func InterfaceAssertionTest() {
+ var (
+ a io.ReadWriteSeeker
+ b interface {
+ Read()
+ Write()
+ }
+ )
+ _ = a.(io.Reader)
+ _ = a.(io.ReadWriter)
+ _ = b.(io.Reader) // want `^impossible type assertion: no type can implement both interface{Read\(\); Write\(\)} and io.Reader \(conflicting types for Read method\)$`
+ _ = b.(interface { // want `^impossible type assertion: no type can implement both interface{Read\(\); Write\(\)} and interface{Read\(p \[\]byte\) \(n int, err error\)} \(conflicting types for Read method\)$`
+ Read(p []byte) (n int, err error)
+ })
+
+ switch a.(type) {
+ case io.ReadWriter:
+ case interface { // want `^impossible type assertion: no type can implement both io.ReadWriteSeeker and interface{Write\(\)} \(conflicting types for Write method\)$`
+ Write()
+ }:
+ default:
+ }
+
+ switch b := b.(type) {
+ case io.ReadWriter, interface{ Read() }: // want `^impossible type assertion: no type can implement both interface{Read\(\); Write\(\)} and io.ReadWriter \(conflicting types for Read method\)$`
+ case io.Writer: // want `^impossible type assertion: no type can implement both interface{Read\(\); Write\(\)} and io.Writer \(conflicting types for Write method\)$`
+ default:
+ _ = b
+ }
+}