1 // run 2 3 // Copyright 2017 The Go Authors. All rights reserved. 4 // Use of this source code is governed by a BSD-style 5 // license that can be found in the LICENSE file. 6 7 package main 8 9 import "runtime/debug" 10 11 type T struct { 12 // >= 16 bytes to avoid tiny alloc. 13 a, b int 14 } 15 16 func main() { 17 debug.SetGCPercent(1) 18 for i := 0; i < 100000; i++ { 19 m := make(map[*T]struct{}, 0) 20 for j := 0; j < 20; j++ { 21 // During the call to mapassign_fast64, the key argument 22 // was incorrectly treated as a uint64. If the stack was 23 // scanned during that call, the only pointer to k was 24 // missed, leading to *k being collected prematurely. 25 k := new(T) 26 m[k] = struct{}{} 27 } 28 } 29 } 30