// errorcheck -0 -l -m=2 // Copyright 2019 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 test makes sure that -m=2's escape analysis diagnostics don't // go into an infinite loop when handling negative dereference // cycles. The critical thing being tested here is that compilation // succeeds ("errorcheck -0"), not any particular diagnostic output, // hence the very lax ERROR patterns below. package p type Node struct { Orig *Node } var sink *Node func f1() { var n Node // ERROR "." n.Orig = &n m := n // ERROR "." sink = &m } func f2() { var n1, n2 Node // ERROR "." n1.Orig = &n2 n2 = n1 m := n2 // ERROR "." sink = &m } func f3() { var n1, n2 Node // ERROR "." n1.Orig = &n1 n1.Orig = &n2 sink = n1.Orig.Orig }