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