honnef.co/go/tools@v0.4.7/staticcheck/testdata/src/example.com/CheckCyclicFinalizer/CheckCyclicFinalizer.go (about)

     1  package pkg
     2  
     3  import (
     4  	"fmt"
     5  	"runtime"
     6  )
     7  
     8  func fn() {
     9  	var x *int
    10  	foo := func(y *int) { fmt.Println(x) }
    11  	runtime.SetFinalizer(x, foo) //@ diag(re`the finalizer closes over the object, preventing the finalizer from ever running \(at .+:10:9`)
    12  	runtime.SetFinalizer(x, nil)
    13  	runtime.SetFinalizer(x, func(_ *int) { //@ diag(re`the finalizer closes over the object, preventing the finalizer from ever running \(at .+:13:26`)
    14  		fmt.Println(x)
    15  	})
    16  
    17  	foo = func(y *int) { fmt.Println(y) }
    18  	runtime.SetFinalizer(x, foo)
    19  	runtime.SetFinalizer(x, func(y *int) {
    20  		fmt.Println(y)
    21  	})
    22  }