1
0
mirror of https://github.com/golang/go synced 2024-11-17 12:54:47 -07:00
go/test/fixedbugs/bug251.go
Matthew Dempsky 07de3465be cmd/compile/internal/gc: handle recursive interfaces better
Previously, we handled recursive interfaces by deferring typechecking
of interface methods, while eagerly expanding interface embeddings.

This CL switches to eagerly evaluating interface methods, and
deferring expanding interface embeddings to dowidth. This allows us to
detect recursive interface embeddings with the same mechanism used for
detecting recursive struct embeddings.

Updates #16369.

Change-Id: If4c0320058047f8a2d9b52b9a79de47eb9887f95
Reviewed-on: https://go-review.googlesource.com/38391
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Robert Griesemer <gri@golang.org>
2017-03-21 01:56:25 +00:00

26 lines
605 B
Go

// errorcheck
// Copyright 2010 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
type I1 interface { // GC_ERROR "invalid recursive type"
m() I2
// TODO(mdempsky): The duplicate method error is silly
// and redundant, but tricky to prevent as it's actually
// being emitted against the underlying interface type
// literal, not I1 itself.
I2 // ERROR "loop|interface|duplicate method m"
}
type I2 interface {
I1 // GCCGO_ERROR "loop|interface"
}
var i1 I1 = i2
var i2 I2
var i2a I2 = i1