mirror of
https://github.com/golang/go
synced 2024-11-15 07:30:28 -07:00
44 lines
644 B
Go
44 lines
644 B
Go
|
// 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
|