PR tree-optimization/86274 - SEGFAULT when logging std::to_string(NAN)
[official-gcc.git] / libgo / go / cmd / vet / testdata / lostcancel.go
blobb7549c00511127819183818ba3895b5c03536ba8
1 // Copyright 2016 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
5 package testdata
7 import (
8 "context"
9 "log"
10 "os"
11 "testing"
14 // Check the three functions and assignment forms (var, :=, =) we look for.
15 // (Do these early: line numbers are fragile.)
16 func _() {
17 var ctx, cancel = context.WithCancel() // ERROR "the cancel function is not used on all paths \(possible context leak\)"
18 } // ERROR "this return statement may be reached without using the cancel var defined on line 17"
20 func _() {
21 ctx, cancel2 := context.WithDeadline() // ERROR "the cancel2 function is not used..."
22 } // ERROR "may be reached without using the cancel2 var defined on line 21"
24 func _() {
25 var ctx context.Context
26 var cancel3 func()
27 ctx, cancel3 = context.WithTimeout() // ERROR "function is not used..."
28 } // ERROR "this return statement may be reached without using the cancel3 var defined on line 27"
30 func _() {
31 ctx, _ := context.WithCancel() // ERROR "the cancel function returned by context.WithCancel should be called, not discarded, to avoid a context leak"
32 ctx, _ = context.WithTimeout() // ERROR "the cancel function returned by context.WithTimeout should be called, not discarded, to avoid a context leak"
33 ctx, _ = context.WithDeadline() // ERROR "the cancel function returned by context.WithDeadline should be called, not discarded, to avoid a context leak"
36 func _() {
37 ctx, cancel := context.WithCancel()
38 defer cancel() // ok
41 func _() {
42 ctx, cancel := context.WithCancel() // ERROR "not used on all paths"
43 if condition {
44 cancel()
46 return // ERROR "this return statement may be reached without using the cancel var"
49 func _() {
50 ctx, cancel := context.WithCancel()
51 if condition {
52 cancel()
53 } else {
54 // ok: infinite loop
55 for {
56 print(0)
61 func _() {
62 ctx, cancel := context.WithCancel() // ERROR "not used on all paths"
63 if condition {
64 cancel()
65 } else {
66 for i := 0; i < 10; i++ {
67 print(0)
70 } // ERROR "this return statement may be reached without using the cancel var"
72 func _() {
73 ctx, cancel := context.WithCancel()
74 // ok: used on all paths
75 switch someInt {
76 case 0:
77 new(testing.T).FailNow()
78 case 1:
79 log.Fatal()
80 case 2:
81 cancel()
82 case 3:
83 print("hi")
84 fallthrough
85 default:
86 os.Exit(1)
90 func _() {
91 ctx, cancel := context.WithCancel() // ERROR "not used on all paths"
92 switch someInt {
93 case 0:
94 new(testing.T).FailNow()
95 case 1:
96 log.Fatal()
97 case 2:
98 cancel()
99 case 3:
100 print("hi") // falls through to implicit return
101 default:
102 os.Exit(1)
104 } // ERROR "this return statement may be reached without using the cancel var"
106 func _(ch chan int) int {
107 ctx, cancel := context.WithCancel() // ERROR "not used on all paths"
108 select {
109 case <-ch:
110 new(testing.T).FailNow()
111 case y <- ch:
112 print("hi") // falls through to implicit return
113 case ch <- 1:
114 cancel()
115 default:
116 os.Exit(1)
118 } // ERROR "this return statement may be reached without using the cancel var"
120 func _(ch chan int) int {
121 ctx, cancel := context.WithCancel()
122 // A blocking select must execute one of its cases.
123 select {
124 case <-ch:
125 panic()
129 func _() {
130 go func() {
131 ctx, cancel := context.WithCancel() // ERROR "not used on all paths"
132 print(ctx)
133 }() // ERROR "may be reached without using the cancel var"
136 var condition bool
137 var someInt int
139 // Regression test for Go issue 16143.
140 func _() {
141 var x struct{ f func() }
142 x.f()
145 // Regression test for Go issue 16230.
146 func _() (ctx context.Context, cancel func()) {
147 ctx, cancel = context.WithCancel()
148 return // a naked return counts as a load of the named result values
151 // Same as above, but for literal function.
152 var _ = func() (ctx context.Context, cancel func()) {
153 ctx, cancel = context.WithCancel()
154 return