github.com/amarpal/go-tools@v0.0.0-20240422043104-40142f59f616/staticcheck/sa5007/testdata/src/example.com/CheckInfiniteRecursion/CheckInfiniteRecursion.go (about) 1 package pkg 2 3 func fn1(x int) bool { 4 println(x) 5 return fn1(x + 1) //@ diag(`infinite recursive call`) 6 return true 7 } 8 9 func fn2(x int) bool { 10 println(x) 11 if x > 10 { 12 return true 13 } 14 return fn2(x + 1) 15 } 16 17 func fn3(x int) bool { 18 println(x) 19 if x > 10 { 20 goto l1 21 } 22 return fn3(x + 1) 23 l1: 24 println(x) 25 return true 26 } 27 28 func fn4(p *int, n int) { 29 if n == 0 { 30 return 31 } 32 x := 0 33 fn4(&x, n-1) 34 if x != n { 35 panic("stack is corrupted") 36 } 37 } 38 39 func fn5(p *int, n int) { 40 x := 0 41 fn5(&x, n-1) //@ diag(`infinite recursive call`) 42 if x != n { 43 panic("stack is corrupted") 44 } 45 } 46 47 func fn6() { 48 go fn6() 49 } 50 51 type T struct { 52 n int 53 } 54 55 func (t T) Fn1() { 56 t.Fn1() //@ diag(`infinite recursive call`) 57 } 58 59 func (t T) Fn2() { 60 x := T{} 61 x.Fn2() //@ diag(`infinite recursive call`) 62 } 63 64 func (t T) Fn3() { 65 if t.n == 0 { 66 return 67 } 68 t.Fn1() 69 }