|  | // run | 
|  |  | 
|  | // Copyright 2022 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. | 
|  |  | 
|  | package main | 
|  |  | 
|  | func main() { | 
|  | for i := 0; i < 10000; i++ { | 
|  | h(i) | 
|  | sink = make([]byte, 1024) // generate some garbage | 
|  | } | 
|  | } | 
|  |  | 
|  | func h(iter int) { | 
|  | var x [32]byte | 
|  | for i := 0; i < 32; i++ { | 
|  | x[i] = 99 | 
|  | } | 
|  | g(&x) | 
|  | if x == ([32]byte{}) { | 
|  | return | 
|  | } | 
|  | for i := 0; i < 32; i++ { | 
|  | println(x[i]) | 
|  | } | 
|  | panic(iter) | 
|  | } | 
|  |  | 
|  | //go:noinline | 
|  | func g(x interface{}) { | 
|  | switch e := x.(type) { | 
|  | case *[32]byte: | 
|  | var c [32]byte | 
|  | *e = c | 
|  | case *[3]*byte: | 
|  | var c [3]*byte | 
|  | *e = c | 
|  | } | 
|  | } | 
|  |  | 
|  | var sink []byte |