| // run |
| |
| // Copyright 2017 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 |
| |
| import "runtime/debug" |
| |
| type T struct { |
| // >= 16 bytes to avoid tiny alloc. |
| a, b int |
| } |
| |
| func main() { |
| debug.SetGCPercent(1) |
| for i := 0; i < 100000; i++ { |
| m := make(map[*T]struct{}, 0) |
| for j := 0; j < 20; j++ { |
| // During the call to mapassign_fast64, the key argument |
| // was incorrectly treated as a uint64. If the stack was |
| // scanned during that call, the only pointer to k was |
| // missed, leading to *k being collected prematurely. |
| k := new(T) |
| m[k] = struct{}{} |
| } |
| } |
| } |