mirror of
https://github.com/golang/go
synced 2024-09-05 16:04:50 +00:00
cmd/compile: fix infinite recursion in isdirectiface
Fixes #22904. Change-Id: Id504504eda7275c10d3c665add8b7ccd23f65820 Reviewed-on: https://go-review.googlesource.com/80301 Run-TryBot: Matthew Dempsky <mdempsky@google.com> Reviewed-by: Emmanuel Odeke <emm.odeke@gmail.com> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
This commit is contained in:
parent
08b19a1c59
commit
71a9c4430f
|
@ -2022,6 +2022,10 @@ func checknil(x *Node, init *Nodes) {
|
|||
// Can this type be stored directly in an interface word?
|
||||
// Yes, if the representation is a single pointer.
|
||||
func isdirectiface(t *types.Type) bool {
|
||||
if t.Broke() {
|
||||
return false
|
||||
}
|
||||
|
||||
switch t.Etype {
|
||||
case TPTR32,
|
||||
TPTR64,
|
||||
|
|
19
test/fixedbugs/issue22904.go
Normal file
19
test/fixedbugs/issue22904.go
Normal file
|
@ -0,0 +1,19 @@
|
|||
// errorcheck
|
||||
|
||||
// Copyright 2017 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 22904: Make sure the compiler emits a proper error message about
|
||||
// invalid recursive types rather than crashing.
|
||||
|
||||
package p
|
||||
|
||||
type a struct{ b }
|
||||
type b struct{ a } // ERROR "invalid recursive type"
|
||||
|
||||
var x interface{}
|
||||
|
||||
func f() {
|
||||
x = a{}
|
||||
}
|
Loading…
Reference in a new issue