mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +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
2 changed files with 23 additions and 0 deletions
|
|
@ -2022,6 +2022,10 @@ func checknil(x *Node, init *Nodes) {
|
||||||
// Can this type be stored directly in an interface word?
|
// Can this type be stored directly in an interface word?
|
||||||
// Yes, if the representation is a single pointer.
|
// Yes, if the representation is a single pointer.
|
||||||
func isdirectiface(t *types.Type) bool {
|
func isdirectiface(t *types.Type) bool {
|
||||||
|
if t.Broke() {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
switch t.Etype {
|
switch t.Etype {
|
||||||
case TPTR32,
|
case TPTR32,
|
||||||
TPTR64,
|
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…
Add table
Add a link
Reference in a new issue