|  | // errorcheck -0 -m -l | 
|  |  | 
|  | // 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. | 
|  |  | 
|  | // Test escape analysis for goto statements. | 
|  |  | 
|  | package escape | 
|  |  | 
|  | var x bool | 
|  |  | 
|  | func f1() { | 
|  | var p *int | 
|  | loop: | 
|  | if x { | 
|  | goto loop | 
|  | } | 
|  | // BAD: We should be able to recognize that there | 
|  | // aren't any more "goto loop" after here. | 
|  | p = new(int) // ERROR "escapes to heap" | 
|  | _ = p | 
|  | } | 
|  |  | 
|  | func f2() { | 
|  | var p *int | 
|  | if x { | 
|  | loop: | 
|  | goto loop | 
|  | } else { | 
|  | p = new(int) // ERROR "does not escape" | 
|  | } | 
|  | _ = p | 
|  | } | 
|  |  | 
|  | func f3() { | 
|  | var p *int | 
|  | if x { | 
|  | loop: | 
|  | goto loop | 
|  | } | 
|  | p = new(int) // ERROR "does not escape" | 
|  | _ = p | 
|  | } |