mirror of
https://github.com/golang/go
synced 2024-09-05 16:04:50 +00:00
![Matthew Dempsky](/assets/img/avatar_default.png)
Updates #35518. Change-Id: Icd052c8c68aae32696b5831a29e04cc4cb224b06 Reviewed-on: https://go-review.googlesource.com/c/go/+/206820 Run-TryBot: Matthew Dempsky <mdempsky@google.com> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
45 lines
847 B
Go
45 lines
847 B
Go
// 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
|
|
}
|