Commit fcff3ba7 authored by Shenghou Ma's avatar Shenghou Ma Committed by Minux Ma

cmd/gc: don't recurse infinitely when a recursive type references itself more than once

Fixes #9432

Change-Id: I08c92481afa7c7fac890aa780efc1cb2fabad528
Reviewed-on: https://go-review.googlesource.com/2115Reviewed-by: 's avatarJosh Bleecher Snyder <josharian@gmail.com>
Reviewed-by: 's avatarRuss Cox <rsc@golang.org>
parent 301ad790
...@@ -137,6 +137,11 @@ dowidth(Type *t) ...@@ -137,6 +137,11 @@ dowidth(Type *t)
return; return;
} }
// break infinite recursion if the broken recursive type
// is referenced again
if(t->broke && t->width == 0)
return;
// defer checkwidth calls until after we're done // defer checkwidth calls until after we're done
defercalc++; defercalc++;
......
// errorcheck
// Copyright 2014 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.
// gc used to recurse infinitely when dowidth is applied
// to a broken recursive type again.
// See golang.org/issue/9432.
package p
type foo struct { // GCCGO_ERROR "invalid recursive type"
bar foo
blah foo
} // ERROR "invalid recursive type foo"
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment