// 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{}{} } } }