How runtime.newobjcet is optimized in map access?

136 views
Skip to first unread message

Peng Gao

unread,
Aug 26, 2016, 6:02:56 AM8/26/16
to golang-nuts
I am doing a bench for my map-based cache.

the get implementation is the same
// Get an item from the cache. Returns the item or nil, and a bool indicating
// whether the key was found.
func (c *cache) Get(k string) (interface{}, bool) {
c.mu.RLock()
// "Inlining" of get and Expired
item, found := c.items[k]
if !found {
c.mu.RUnlock()
return nil, false
}
if item.Expiration > 0 {
if time.Now().UnixNano() > item.Expiration {
c.mu.RUnlock()
return nil, false
}
}
c.mu.RUnlock()
return item.Object, true
}

But value definition is not, cache1 has 

type Item struct {
 
Object     interface{}
 
Expiration int64
}


and cache2 has
type Item struct {
 
Object     int64
 
Expiration int64
}


When I do benchmark, there are a lot of runtime.mallogc calls in implementation of cache2, which deplay the response.

And I dump the file, i found cache1 has no newobject called between RLock and mapaccess2_faststr, but cache2 implementation has a newobject called which calls runtime.mallocgc. 

Why runtime.newobject is missing in map access ?


This is cache2 objfump
cache.go:111 0x71ec0 65488b0c25a0080000 GS MOVQ GS:0x8a0, CX
cache.go:111 0x71ec9 483b6110 CMPQ 0x10(CX), SP
cache.go:111 0x71ecd 0f863c010000 JBE 0x7200f
cache.go:111 0x71ed3 4883ec48 SUBQ $0x48, SP
cache.go:111 0x71ed7 48896c2440 MOVQ BP, 0x40(SP)
cache.go:111 0x71edc 488d6c2440 LEAQ 0x40(SP), BP
cache.go:112 0x71ee1 488b442450 MOVQ 0x50(SP), AX
cache.go:112 0x71ee6 8400 TESTB AL, 0(AX)
cache.go:112 0x71ee8 488d4810 LEAQ 0x10(AX), CX
cache.go:112 0x71eec 48894c2430 MOVQ CX, 0x30(SP)
cache.go:112 0x71ef1 48890c24 MOVQ CX, 0(SP)
cache.go:112 0x71ef5 e8564b0100 CALL sync.(*RWMutex).RLock(SB)
cache.go:114 0x71efa 488d053fed0900 LEAQ 0x9ed3f(IP), AX
cache.go:114 0x71f01 48890424 MOVQ AX, 0(SP)
cache.go:114 0x71f05 e816e5f9ff CALL runtime.newobject(SB)
cache.go:114 0x71f0a 488b442408 MOVQ 0x8(SP), AX
cache.go:114 0x71f0f 4889442438 MOVQ AX, 0x38(SP)
cache.go:114 0x71f14 488d0dc54f0900 LEAQ 0x94fc5(IP), CX
cache.go:114 0x71f1b 48890c24 MOVQ CX, 0(SP)
cache.go:114 0x71f1f 488b4c2450 MOVQ 0x50(SP), CX
cache.go:114 0x71f24 488b5108 MOVQ 0x8(CX), DX
cache.go:114 0x71f28 4889542408 MOVQ DX, 0x8(SP)
cache.go:114 0x71f2d 488b542458 MOVQ 0x58(SP), DX
cache.go:114 0x71f32 4889542410 MOVQ DX, 0x10(SP)
cache.go:114 0x71f37 488b542460 MOVQ 0x60(SP), DX
cache.go:114 0x71f3c 4889542418 MOVQ DX, 0x18(SP)
cache.go:114 0x71f41 e88aa0f9ff CALL runtime.mapaccess2_faststr(SB)
cache.go:114 0x71f46 488b442420 MOVQ 0x20(SP), AX
cache.go:114 0x71f4b 0fb64c2428 MOVZX 0x28(SP), CX
cache.go:114 0x71f50 488b5008 MOVQ 0x8(AX), DX
cache.go:114 0x71f54 488b00 MOVQ 0(AX), AX
cache.go:114 0x71f57 488b5c2438 MOVQ 0x38(SP), BX
cache.go:114 0x71f5c 488903 MOVQ AX, 0(BX)
cache.go:114 0x71f5f 48895308 MOVQ DX, 0x8(BX)
cache.go:114 0x71f63 84c9 TESTL CL, CL
cache.go:115 0x71f65 0f8483000000 JE 0x71fee
cache.go:119 0x71f6b 4885d2 TESTQ DX, DX
cache.go:119 0x71f6e 7f22 JG 0x71f92
cache.go:125 0x71f70 488b442430 MOVQ 0x30(SP), AX
cache.go:125 0x71f75 48890424 MOVQ AX, 0(SP)
cache.go:125 0x71f79 e8424b0100 CALL sync.(*RWMutex).RUnlock(SB)
cache.go:126 0x71f7e 488b442438 MOVQ 0x38(SP), AX
cache.go:126 0x71f83 4889442468 MOVQ AX, 0x68(SP)
cache.go:126 0x71f88 488b6c2440 MOVQ 0x40(SP), BP
cache.go:126 0x71f8d 4883c448 ADDQ $0x48, SP
cache.go:126 0x71f91 c3 RET
cache.go:120 0x71f92 e839f90000 CALL time.Now(SB)
cache.go:120 0x71f97 488b0424 MOVQ 0(SP), AX
cache.go:120 0x71f9b 4869c000ca9a3b IMULQ $0x3b9aca00, AX, AX
cache.go:120 0x71fa2 48b900001a3deb03b2a1 MOVQ $0xa1b203eb3d1a0000, CX
cache.go:120 0x71fac 4801c8 ADDQ CX, AX
cache.go:120 0x71faf 488d4c2408 LEAQ 0x8(SP), CX
cache.go:120 0x71fb4 486309 MOVSXD 0(CX), CX
cache.go:120 0x71fb7 4801c8 ADDQ CX, AX
cache.go:120 0x71fba 488b4c2438 MOVQ 0x38(SP), CX
cache.go:120 0x71fbf 488b5108 MOVQ 0x8(CX), DX
cache.go:120 0x71fc3 4839d0 CMPQ DX, AX
cache.go:120 0x71fc6 7f05 JG 0x71fcd
cache.go:120 0x71fc8 4889cb MOVQ CX, BX
cache.go:125 0x71fcb eba3 JMP 0x71f70
cache.go:121 0x71fcd 488b442430 MOVQ 0x30(SP), AX
cache.go:121 0x71fd2 48890424 MOVQ AX, 0(SP)
cache.go:121 0x71fd6 e8e54a0100 CALL sync.(*RWMutex).RUnlock(SB)
cache.go:122 0x71fdb 48c744246800000000 MOVQ $0x0, 0x68(SP)
cache.go:122 0x71fe4 488b6c2440 MOVQ 0x40(SP), BP
cache.go:122 0x71fe9 4883c448 ADDQ $0x48, SP
cache.go:122 0x71fed c3 RET
cache.go:116 0x71fee 488b442430 MOVQ 0x30(SP), AX
cache.go:116 0x71ff3 48890424 MOVQ AX, 0(SP)
cache.go:116 0x71ff7 e8c44a0100 CALL sync.(*RWMutex).RUnlock(SB)
cache.go:117 0x71ffc 48c744246800000000 MOVQ $0x0, 0x68(SP)
cache.go:117 0x72005 488b6c2440 MOVQ 0x40(SP), BP
cache.go:117 0x7200a 4883c448 ADDQ $0x48, SP
cache.go:117 0x7200e c3 RET
cache.go:111 0x7200f e85c51feff CALL runtime.morestack_noctxt(SB)
cache.go:111 0x72014 e9a7feffff JMP github.com/ggaaooppeenngg/cachemap.(*cache).Get(SB)
:-1 0x72019 cc INT $0x3
:-1 0x7201a cc INT $0x3
:-1 0x7201b cc INT $0x3
:-1 0x7201c cc INT $0x3
:-1 0x7201d cc INT $0x3
:-1 0x7201e cc INT $0x3
:-1 0x7201f cc INT $0x3



This is cache1 objdump
cache.go:114 0x72690 65488b0c25a0080000 GS MOVQ GS:0x8a0, CX
cache.go:114 0x72699 483b6110 CMPQ 0x10(CX), SP
cache.go:114 0x7269d 0f8669010000 JBE 0x7280c
cache.go:114 0x726a3 4883ec58 SUBQ $0x58, SP
cache.go:114 0x726a7 48896c2450 MOVQ BP, 0x50(SP)
cache.go:114 0x726ac 488d6c2450 LEAQ 0x50(SP), BP
cache.go:115 0x726b1 488b442460 MOVQ 0x60(SP), AX
cache.go:115 0x726b6 8400 TESTB AL, 0(AX)
cache.go:115 0x726b8 488d4810 LEAQ 0x10(AX), CX
cache.go:115 0x726bc 48894c2448 MOVQ CX, 0x48(SP)
cache.go:115 0x726c1 48890c24 MOVQ CX, 0(SP)
cache.go:115 0x726c5 e8f6970300 CALL sync.(*RWMutex).RLock(SB)
cache.go:117 0x726ca 488d058f590e00 LEAQ 0xe598f(IP), AX
cache.go:117 0x726d1 48890424 MOVQ AX, 0(SP)
cache.go:117 0x726d5 488b442460 MOVQ 0x60(SP), AX
cache.go:117 0x726da 488b4808 MOVQ 0x8(AX), CX
cache.go:117 0x726de 48894c2408 MOVQ CX, 0x8(SP)
cache.go:117 0x726e3 488b4c2468 MOVQ 0x68(SP), CX
cache.go:117 0x726e8 48894c2410 MOVQ CX, 0x10(SP)
cache.go:117 0x726ed 488b4c2470 MOVQ 0x70(SP), CX
cache.go:117 0x726f2 48894c2418 MOVQ CX, 0x18(SP)
cache.go:117 0x726f7 e8949af9ff CALL runtime.mapaccess2_faststr(SB)
cache.go:117 0x726fc 488b442420 MOVQ 0x20(SP), AX
cache.go:117 0x72701 0fb64c2428 MOVZX 0x28(SP), CX
cache.go:117 0x72706 488b5010 MOVQ 0x10(AX), DX
cache.go:117 0x7270a 4889542430 MOVQ DX, 0x30(SP)
cache.go:117 0x7270f 488b18 MOVQ 0(AX), BX
cache.go:117 0x72712 48895c2438 MOVQ BX, 0x38(SP)
cache.go:117 0x72717 488b4008 MOVQ 0x8(AX), AX
cache.go:117 0x7271b 4889442440 MOVQ AX, 0x40(SP)
cache.go:117 0x72720 84c9 TESTL CL, CL
cache.go:118 0x72722 0f84af000000 JE 0x727d7
cache.go:122 0x72728 4885d2 TESTQ DX, DX
cache.go:122 0x7272b 7f37 JG 0x72764
cache.go:128 0x7272d 488b4c2448 MOVQ 0x48(SP), CX
cache.go:128 0x72732 48890c24 MOVQ CX, 0(SP)
cache.go:128 0x72736 e8f5970300 CALL sync.(*RWMutex).RUnlock(SB)
cache.go:129 0x7273b 488b442438 MOVQ 0x38(SP), AX
cache.go:129 0x72740 4889442478 MOVQ AX, 0x78(SP)
cache.go:129 0x72745 488b442440 MOVQ 0x40(SP), AX
cache.go:129 0x7274a 4889842480000000 MOVQ AX, 0x80(SP)
cache.go:129 0x72752 c684248800000001 MOVB $0x1, 0x88(SP)
cache.go:129 0x7275a 488b6c2450 MOVQ 0x50(SP), BP
cache.go:129 0x7275f 4883c458 ADDQ $0x58, SP
cache.go:129 0x72763 c3 RET
cache.go:123 0x72764 e867270300 CALL time.Now(SB)
cache.go:123 0x72769 488d442408 LEAQ 0x8(SP), AX
cache.go:123 0x7276e 486300 MOVSXD 0(AX), AX
cache.go:123 0x72771 488b0c24 MOVQ 0(SP), CX
cache.go:123 0x72775 4869c900ca9a3b IMULQ $0x3b9aca00, CX, CX
cache.go:123 0x7277c 48ba00001a3deb03b2a1 MOVQ $0xa1b203eb3d1a0000, DX
cache.go:123 0x72786 4801d1 ADDQ DX, CX
cache.go:123 0x72789 4801c8 ADDQ CX, AX
cache.go:123 0x7278c 488b4c2430 MOVQ 0x30(SP), CX
cache.go:123 0x72791 4839c8 CMPQ CX, AX
cache.go:123 0x72794 7f0c JG 0x727a2
cache.go:117 0x72796 488b442440 MOVQ 0x40(SP), AX
cache.go:117 0x7279b 488b5c2438 MOVQ 0x38(SP), BX
cache.go:128 0x727a0 eb8b JMP 0x7272d
cache.go:124 0x727a2 488b442448 MOVQ 0x48(SP), AX
cache.go:124 0x727a7 48890424 MOVQ AX, 0(SP)
cache.go:124 0x727ab e880970300 CALL sync.(*RWMutex).RUnlock(SB)
cache.go:125 0x727b0 48c744247800000000 MOVQ $0x0, 0x78(SP)
cache.go:125 0x727b9 48c784248000000000000000 MOVQ $0x0, 0x80(SP)
cache.go:125 0x727c5 c684248800000000 MOVB $0x0, 0x88(SP)
cache.go:125 0x727cd 488b6c2450 MOVQ 0x50(SP), BP
cache.go:125 0x727d2 4883c458 ADDQ $0x58, SP
cache.go:125 0x727d6 c3 RET
cache.go:119 0x727d7 488b442448 MOVQ 0x48(SP), AX
cache.go:119 0x727dc 48890424 MOVQ AX, 0(SP)
cache.go:119 0x727e0 e84b970300 CALL sync.(*RWMutex).RUnlock(SB)
cache.go:120 0x727e5 48c744247800000000 MOVQ $0x0, 0x78(SP)
cache.go:120 0x727ee 48c784248000000000000000 MOVQ $0x0, 0x80(SP)
cache.go:120 0x727fa c684248800000000 MOVB $0x0, 0x88(SP)
cache.go:120 0x72802 488b6c2450 MOVQ 0x50(SP), BP
cache.go:120 0x72807 4883c458 ADDQ $0x58, SP
cache.go:120 0x7280b c3 RET
cache.go:114 0x7280c e83f4dfeff CALL runtime.morestack_noctxt(SB)
cache.go:114 0x72811 e97afeffff JMP github.com/patrickmn/go-cache.(*cache).Get(SB)
:-1 0x72816 cc INT $0x3
:-1 0x72817 cc INT $0x3
:-1 0x72818 cc INT $0x3
:-1 0x72819 cc INT $0x3
:-1 0x7281a cc INT $0x3
:-1 0x7281b cc INT $0x3
:-1 0x7281c cc INT $0x3
:-1 0x7281d cc INT $0x3
:-1 0x7281e cc INT $0x3
:-1 0x7281f cc INT $0x3



adon...@google.com

unread,
Aug 26, 2016, 11:33:39 AM8/26/16
to golang-nuts
On Friday, 26 August 2016 06:02:56 UTC-4, Peng Gao wrote:
I am doing a bench for my map-based cache.

the get implementation is the same
// Get an item from the cache. Returns the item or nil, and a bool indicating
// whether the key was found.
func (c *cache) Get(k string) (interface{}, bool) {
c.mu.RLock()
// "Inlining" of get and Expired
item, found := c.items[k]
if !found {
c.mu.RUnlock()
return nil, false
}
if item.Expiration > 0 {
if time.Now().UnixNano() > item.Expiration {
c.mu.RUnlock()
return nil, false
}
}
c.mu.RUnlock()
return item.Object, true
}


BTW, you can simplify the control flow to:

c.mu.RUnlock()
if !found || item.Expiration > 0 && time.Now().UnixNano() > item.Expiration {
return nil, false
}
return item.Object, true

I assume your map's values are Items, not *Items, otherwise it may not be safe to release the lock until you have finished looking at the item.

When I do benchmark, there are a lot of runtime.mallogc calls in implementation of cache2, which deplay the response.

And I dump the file, i found cache1 has no newobject called between RLock and mapaccess2_faststr, but cache2 implementation has a newobject called which calls runtime.mallocgc. 

Why runtime.newobject is missing in map access ?

It looks like the compiler has decided that 'item' escapes and must thus be heap-allocated, even though that isn't necessary.
Add -gcflags=-m to the compiler flags to make it print its escape analysis decisions.  Perhaps there's a compiler optimization bug to report.

Peng Gao

unread,
Aug 27, 2016, 12:21:28 AM8/27/16
to golang-nuts, adon...@google.com


On Friday, August 26, 2016 at 11:33:39 PM UTC+8, adon...@google.com wrote:
On Friday, 26 August 2016 06:02:56 UTC-4, Peng Gao wrote:
I am doing a bench for my map-based cache.

the get implementation is the same
// Get an item from the cache. Returns the item or nil, and a bool indicating
// whether the key was found.
func (c *cache) Get(k string) (interface{}, bool) {
c.mu.RLock()
// "Inlining" of get and Expired
item, found := c.items[k]
if !found {
c.mu.RUnlock()
return nil, false
}
if item.Expiration > 0 {
if time.Now().UnixNano() > item.Expiration {
c.mu.RUnlock()
return nil, false
}
}
c.mu.RUnlock()
return item.Object, true
}


BTW, you can simplify the control flow to:

c.mu.RUnlock()
if !found || item.Expiration > 0 && time.Now().UnixNano() > item.Expiration {
return nil, false
}
return item.Object, true
 Is there any good for complier or is just a simplification?   
I assume your map's values are Items, not *Items, otherwise it may not be safe to release the lock until you have finished looking at the item.
   yes  not *Items
When I do benchmark, there are a lot of runtime.mallogc calls in implementation of cache2, which deplay the response.

And I dump the file, i found cache1 has no newobject called between RLock and mapaccess2_faststr, but cache2 implementation has a newobject called which calls runtime.mallocgc. 

Why runtime.newobject is missing in map access ?

It looks like the compiler has decided that 'item' escapes and must thus be heap-allocated, even though that isn't necessary.
Add -gcflags=-m to the compiler flags to make it print its escape analysis decisions.  Perhaps there's a compiler optimization bug to report.
 Sorry, I made a wrong description about Get, in fact cache2 implementation is like 
// Get an item from the cache. Returns the item or nil, and a bool indicating
// whether the key was found.
func (c *cache) Get(k string) *int64 {
c.mu.RLock()
// "Inlining" of get and Expired
item, found := c.items[k]
if !found {
c.mu.RUnlock()
return nil
}
if item.Expiration > 0 {
if time.Now().UnixNano() > item.Expiration {
c.mu.RUnlock()
return nil
}
}
c.mu.RUnlock()
return &item.Object
}


 I guess it is the compiler decide the item will be  still be referenced, so it escapes? (But in fact I just want to hold Object of it and use nil pointer to indicate not exists, I don't want to hold the item itself).

I search how to read the escape information, it is a TODO in the golang Github WIKI.

This is cache2 escape information and I found `./cache.go:126: &item.Object escapes to heap`, I guess it is the point. 
BTW is there any guidelines for reducing memory allocation?
./cache.go:20: inlining call to time.Time.UnixNano
./cache.go:55: inlining call to time.Time.Add
./cache.go:55: inlining call to time.Time.UnixNano
./cache.go:73: inlining call to time.Time.Add
./cache.go:73: inlining call to time.Time.UnixNano
./cache.go:136: inlining call to time.Time.UnixNano
./cache.go:120: inlining call to time.Time.UnixNano
./cache.go:149: can inline (*cache).Increment
./cache.go:159: can inline (*cache).Decrement
./cache.go:175: can inline (*cache).delete
./cache.go:168: inlining call to (*cache).delete
./cache.go:194: inlining call to time.Time.UnixNano
./cache.go:199: inlining call to (*cache).delete
./cache.go:255: can inline stopJanitor
./cache.go:267: can inline newCache
./cache.go:279: inlining call to newCache
./sharded.go:86: inlining call to (*cache).Increment
./sharded.go:90: inlining call to (*cache).Decrement
./sharded.go:109: can inline (*shardedCache).items
./sharded.go:137: can inline stopShardedJanitor
./sharded.go:157: inlining call to Uint64
./sharded.go:157: inlining call to big.low64
./cache_test.go:83: can inline TestIncrementWithInt
./cache_test.go:243: inlining call to runtime.NumCPU
./cache_test.go:265: inlining call to runtime.NumCPU
./cache_test.go:379: inlining call to (*cache).delete
./cache.go:57: c.mu escapes to heap
./cache.go:48: leaking param: c
./cache.go:48: leaking param: k
./cache.go:64: c.mu escapes to heap
./cache.go:67: leaking param: k
./cache.go:67: (*cache).set c does not escape
./cache.go:140: &item.Object escapes to heap
./cache.go:130: moved to heap: item
./cache.go:129: (*cache).get c does not escape
./cache.go:129: (*cache).get k does not escape
./cache.go:84: c.mu escapes to heap
./cache.go:83: leaking param: c
./cache.go:87: c.mu escapes to heap
./cache.go:88: k escapes to heap
./cache.go:83: leaking param: k
./cache.go:91: c.mu escapes to heap
./cache.go:88: (*cache).Add ... argument does not escape
./cache.go:98: c.mu escapes to heap
./cache.go:97: leaking param: c
./cache.go:101: c.mu escapes to heap
./cache.go:102: k escapes to heap
./cache.go:97: leaking param: k
./cache.go:105: c.mu escapes to heap
./cache.go:102: (*cache).Replace ... argument does not escape
./cache.go:112: c.mu escapes to heap
./cache.go:111: leaking param: c
./cache.go:116: c.mu escapes to heap
./cache.go:121: c.mu escapes to heap
./cache.go:125: c.mu escapes to heap
./cache.go:126: &item.Object escapes to heap
./cache.go:114: moved to heap: item
./cache.go:111: (*cache).Get k does not escape
./cache.go:149: (*cache).Increment c does not escape
./cache.go:149: (*cache).Increment k does not escape
./cache.go:159: (*cache).Decrement c does not escape
./cache.go:159: (*cache).Decrement k does not escape
./cache.go:167: c.mu escapes to heap
./cache.go:166: leaking param: c
./cache.go:169: c.mu escapes to heap
./cache.go:166: leaking param: k
./cache.go:168: &v.Object escapes to heap
./cache.go:168: moved to heap: v
./cache.go:179: &v.Object escapes to heap
./cache.go:177: moved to heap: v
./cache.go:175: (*cache).delete c does not escape
./cache.go:175: (*cache).delete k does not escape
./cache.go:195: c.mu escapes to heap
./cache.go:192: leaking param: c
./cache.go:199: &v.Object escapes to heap
./cache.go:199: moved to heap: v
./cache.go:205: c.mu escapes to heap
./cache.go:215: c.mu escapes to heap
./cache.go:214: leaking param: c
./cache.go:214: leaking param: f
./cache.go:217: c.mu escapes to heap
./cache.go:223: c.mu escapes to heap
./cache.go:222: leaking param: c
./cache.go:225: c.mu escapes to heap
./cache.go:231: c.mu escapes to heap
./cache.go:230: leaking param: c
./cache.go:232: map[string]Item literal escapes to heap
./cache.go:233: c.mu escapes to heap
./cache.go:242: make(chan bool) escapes to heap
./cache.go:241: leaking param: c
./cache.go:241: (*janitor).Run j does not escape
./cache.go:255: stopJanitor c does not escape
./cache.go:261: &janitor literal escapes to heap
./cache.go:259: leaking param: c
./cache.go:273: &cache literal escapes to heap
./cache.go:267: leaking param: m to result ~r2 level=-1
./cache.go:279: &cache literal escapes to heap
./cache.go:278: leaking param: m
./cache.go:291: C escapes to heap
./cache.go:285: &Cache literal escapes to heap
./cache.go:291: stopJanitor escapes to heap
./cache.go:302: make(map[string]Item) escapes to heap
./sharded.go:34: djb33 k does not escape
./sharded.go:65: leaking param: sc to result ~r1 level=2
./sharded.go:65: (*shardedCache).bucket k does not escape
./sharded.go:69: leaking param content: sc
./sharded.go:69: leaking param: k
./sharded.go:73: leaking param content: sc
./sharded.go:73: leaking param: k
./sharded.go:77: leaking param content: sc
./sharded.go:77: leaking param: k
./sharded.go:81: leaking param content: sc
./sharded.go:81: (*shardedCache).Get k does not escape
./sharded.go:85: (*shardedCache).Increment sc does not escape
./sharded.go:85: (*shardedCache).Increment k does not escape
./sharded.go:89: (*shardedCache).Decrement sc does not escape
./sharded.go:89: (*shardedCache).Decrement k does not escape
./sharded.go:93: leaking param content: sc
./sharded.go:93: leaking param: k
./sharded.go:97: leaking param content: sc
./sharded.go:109: (*shardedCache).items sc does not escape
./sharded.go:113: leaking param content: sc
./sharded.go:125: make(chan bool) escapes to heap
./sharded.go:124: leaking param content: sc
./sharded.go:124: (*shardedJanitor).Run j does not escape
./sharded.go:137: stopShardedJanitor sc does not escape
./sharded.go:143: &shardedJanitor literal escapes to heap
./sharded.go:141: leaking param content: sc
./sharded.go:141: leaking param: sc
./sharded.go:162: make([]*cache, n) escapes to heap
./sharded.go:167: &cache literal escapes to heap
./sharded.go:167: map[string]Item literal escapes to heap
./sharded.go:162: &shardedCache literal escapes to heap
./sharded.go:154: newShardedCache ([]byte)("WARNING: go-cache's newShardedCache failed to read from the system CSPRNG (/dev/urandom or equivalent.) Your system's security may be compromised. Continuing with an insecure seed.\n") does not escape
./sharded.go:182: SC escapes to heap
./sharded.go:179: &unexportedShardedCache literal escapes to heap
./sharded.go:182: stopShardedJanitor escapes to heap
./cache_test.go:21: t.common escapes to heap
./cache_test.go:16: leaking param: t
./cache_test.go:21: "Getting A found value that shouldn't exist:" escapes to heap
./cache_test.go:21: a escapes to heap
./cache_test.go:26: t.common escapes to heap
./cache_test.go:26: "Getting B found value that shouldn't exist:" escapes to heap
./cache_test.go:26: b escapes to heap
./cache_test.go:31: t.common escapes to heap
./cache_test.go:31: "Getting C found value that shouldn't exist:" escapes to heap
./cache_test.go:31: c escapes to heap
./cache_test.go:38: t.common escapes to heap
./cache_test.go:38: "x for a is nil" escapes to heap
./cache_test.go:40: t.common escapes to heap
./cache_test.go:40: "a2 (which should be 1) plus 2 does not equal 3; value:" escapes to heap
./cache_test.go:40: a2 escapes to heap
./cache_test.go:21: TestCache ... argument does not escape
./cache_test.go:26: TestCache ... argument does not escape
./cache_test.go:31: TestCache ... argument does not escape
./cache_test.go:38: TestCache ... argument does not escape
./cache_test.go:40: TestCache ... argument does not escape
./cache_test.go:56: t.common escapes to heap
./cache_test.go:44: leaking param: t
./cache_test.go:56: "Found c when it should have been automatically deleted" escapes to heap
./cache_test.go:56: *x escapes to heap
./cache_test.go:62: t.common escapes to heap
./cache_test.go:62: "Found a when it should have been automatically deleted" escapes to heap
./cache_test.go:62: *x escapes to heap
./cache_test.go:67: t.common escapes to heap
./cache_test.go:67: "Did not find b even though it was set to never expire" escapes to heap
./cache_test.go:72: t.common escapes to heap
./cache_test.go:72: "Did not find d even though it was set to expire later than the default" escapes to heap
./cache_test.go:78: t.common escapes to heap
./cache_test.go:78: "Found d when it should have been automatically deleted (later than the default)" escapes to heap
./cache_test.go:56: TestCacheTimes ... argument does not escape
./cache_test.go:62: TestCacheTimes ... argument does not escape
./cache_test.go:67: TestCacheTimes ... argument does not escape
./cache_test.go:72: TestCacheTimes ... argument does not escape
./cache_test.go:78: TestCacheTimes ... argument does not escape
./cache_test.go:83: TestIncrementWithInt t does not escape
./cache_test.go:90: t.common escapes to heap
./cache_test.go:86: leaking param: t
./cache_test.go:90: "Couldn't add foo even though it shouldn't exist" escapes to heap
./cache_test.go:94: t.common escapes to heap
./cache_test.go:94: "Successfully added another foo when it should have returned an error" escapes to heap
./cache_test.go:90: TestAdd ... argument does not escape
./cache_test.go:94: TestAdd ... argument does not escape
./cache_test.go:102: t.common escapes to heap
./cache_test.go:98: leaking param: t
./cache_test.go:102: "Replaced foo when it shouldn't exist" escapes to heap
./cache_test.go:107: t.common escapes to heap
./cache_test.go:107: "Couldn't replace existing key foo" escapes to heap
./cache_test.go:102: TestReplace ... argument does not escape
./cache_test.go:107: TestReplace ... argument does not escape
./cache_test.go:117: t.common escapes to heap
./cache_test.go:111: leaking param: t
./cache_test.go:117: "x is not nil:" escapes to heap
./cache_test.go:117: x escapes to heap
./cache_test.go:117: TestDelete ... argument does not escape
./cache_test.go:127: t.common escapes to heap
./cache_test.go:121: leaking param: t
./cache_test.go:127: n escapes to heap
./cache_test.go:127: TestItemCount ... argument does not escape
./cache_test.go:138: t.common escapes to heap
./cache_test.go:131: leaking param: t
./cache_test.go:138: "x is not nil:" escapes to heap
./cache_test.go:138: x escapes to heap
./cache_test.go:142: t.common escapes to heap
./cache_test.go:142: "x is not nil:" escapes to heap
./cache_test.go:142: x escapes to heap
./cache_test.go:138: TestFlush ... argument does not escape
./cache_test.go:142: TestFlush ... argument does not escape
./cache_test.go:150: t.common escapes to heap
./cache_test.go:146: leaking param: t
./cache_test.go:150: "tc.onEvicted is not nil" escapes to heap
./cache_test.go:153: func literal escapes to heap
./cache_test.go:153: func literal escapes to heap
./cache_test.go:155: &works escapes to heap
./cache_test.go:152: moved to heap: works
./cache_test.go:162: t.common escapes to heap
./cache_test.go:162: "works bool not true" escapes to heap
./cache_test.go:165: t.common escapes to heap
./cache_test.go:165: "bar was not 4" escapes to heap
./cache_test.go:150: TestOnEvicted ... argument does not escape
./cache_test.go:162: TestOnEvicted ... argument does not escape
./cache_test.go:165: TestOnEvicted ... argument does not escape
./cache_test.go:153: TestOnEvicted.func1 k does not escape
./cache_test.go:153: TestOnEvicted.func1 v does not escape
./cache_test.go:177: benchmarkCacheGet b does not escape
./cache_test.go:169: BenchmarkCacheGetExpiring b does not escape
./cache_test.go:173: BenchmarkCacheGetNotExpiring b does not escape
./cache_test.go:195: mu escapes to heap
./cache_test.go:192: moved to heap: mu
./cache_test.go:197: mu escapes to heap
./cache_test.go:187: BenchmarkRWMutexMapGet b does not escape
./cache_test.go:189: BenchmarkRWMutexMapGet map[string]string literal does not escape
./cache_test.go:205: s escapes to heap
./cache_test.go:210: mu escapes to heap
./cache_test.go:207: moved to heap: mu
./cache_test.go:212: mu escapes to heap
./cache_test.go:201: BenchmarkRWMutexInterfaceMapGetStruct b does not escape
./cache_test.go:204: BenchmarkRWMutexInterfaceMapGetStruct map[interface {}]string literal does not escape
./cache_test.go:211: BenchmarkRWMutexInterfaceMapGetStruct s does not escape
./cache_test.go:219: "foo" escapes to heap
./cache_test.go:224: mu escapes to heap
./cache_test.go:221: moved to heap: mu
./cache_test.go:226: mu escapes to heap
./cache_test.go:216: BenchmarkRWMutexInterfaceMapGetString b does not escape
./cache_test.go:218: BenchmarkRWMutexInterfaceMapGetString map[interface {}]string literal does not escape
./cache_test.go:225: BenchmarkRWMutexInterfaceMapGetString "foo" does not escape
./cache_test.go:242: new(sync.WaitGroup) escapes to heap
./cache_test.go:248: func literal escapes to heap
./cache_test.go:248: func literal escapes to heap
./cache_test.go:252: leaking closure reference wg
./cache_test.go:238: benchmarkCacheGetConcurrent b does not escape
./cache_test.go:230: BenchmarkCacheGetConcurrentExpiring b does not escape
./cache_test.go:234: BenchmarkCacheGetConcurrentNotExpiring b does not escape
./cache_test.go:264: new(sync.WaitGroup) escapes to heap
./cache_test.go:270: func literal escapes to heap
./cache_test.go:270: func literal escapes to heap
./cache_test.go:272: &mu escapes to heap
./cache_test.go:263: moved to heap: mu
./cache_test.go:260: map[string]string literal escapes to heap
./cache_test.go:272: mu escapes to heap
./cache_test.go:272: leaking closure reference mu
./cache_test.go:274: mu escapes to heap
./cache_test.go:272: leaking closure reference mu
./cache_test.go:276: leaking closure reference wg
./cache_test.go:258: BenchmarkRWMutexMapGetConcurrent b does not escape
./cache_test.go:297: make([]string, n) escapes to heap
./cache_test.go:299: "foo" + strconv.Itoa(i) escapes to heap
./cache_test.go:304: new(sync.WaitGroup) escapes to heap
./cache_test.go:307: func literal escapes to heap
./cache_test.go:307: func literal escapes to heap
./cache_test.go:309: &v escapes to heap
./cache_test.go:306: moved to heap: v
./cache_test.go:311: leaking closure reference wg
./cache_test.go:290: benchmarkCacheGetManyConcurrent b does not escape
./cache_test.go:282: BenchmarkCacheGetManyConcurrentExpiring b does not escape
./cache_test.go:286: BenchmarkCacheGetManyConcurrentNotExpiring b does not escape
./cache_test.go:326: benchmarkCacheSet b does not escape
./cache_test.go:318: BenchmarkCacheSetExpiring b does not escape
./cache_test.go:322: BenchmarkCacheSetNotExpiring b does not escape
./cache_test.go:341: mu escapes to heap
./cache_test.go:338: moved to heap: mu
./cache_test.go:343: mu escapes to heap
./cache_test.go:335: BenchmarkRWMutexMapSet b does not escape
./cache_test.go:337: BenchmarkRWMutexMapSet map[string]string literal does not escape
./cache_test.go:347: BenchmarkCacheSetDelete b does not escape
./cache_test.go:363: mu escapes to heap
./cache_test.go:360: moved to heap: mu
./cache_test.go:365: mu escapes to heap
./cache_test.go:366: mu escapes to heap
./cache_test.go:368: mu escapes to heap
./cache_test.go:357: BenchmarkRWMutexMapSetDelete b does not escape
./cache_test.go:359: BenchmarkRWMutexMapSetDelete map[string]string literal does not escape
./cache_test.go:377: tc.cache.mu escapes to heap
./cache_test.go:380: tc.cache.mu escapes to heap
./cache_test.go:372: BenchmarkCacheSetDeleteSingleLock b does not escape
./cache_test.go:379: BenchmarkCacheSetDeleteSingleLock &v.Object does not escape
./cache_test.go:390: mu escapes to heap
./cache_test.go:387: moved to heap: mu
./cache_test.go:393: mu escapes to heap
./cache_test.go:384: BenchmarkRWMutexMapSetDeleteSingleLock b does not escape
./cache_test.go:386: BenchmarkRWMutexMapSetDeleteSingleLock map[string]string literal does not escape
./cache_test.go:398: b.common escapes to heap
./cache_test.go:397: leaking param: b
./cache_test.go:411: tc.cache.mu escapes to heap
./cache_test.go:415: tc.cache.mu escapes to heap
./cache_test.go:408: BenchmarkDeleteExpiredLoop b does not escape
./sharded_test.go:29: TestShardedCache t does not escape
./sharded_test.go:44: benchmarkShardedCacheGet b does not escape
./sharded_test.go:36: BenchmarkShardedCacheGetExpiring b does not escape
./sharded_test.go:40: BenchmarkShardedCacheGetNotExpiring b does not escape
./sharded_test.go:66: make([]string, n) escapes to heap
./sharded_test.go:68: "foo" + strconv.Itoa(i) escapes to heap
./sharded_test.go:73: new(sync.WaitGroup) escapes to heap
./sharded_test.go:76: func literal escapes to heap
./sharded_test.go:76: func literal escapes to heap
./sharded_test.go:78: &v escapes to heap
./sharded_test.go:75: moved to heap: v
./sharded_test.go:80: leaking closure reference wg
./sharded_test.go:62: benchmarkShardedCacheGetManyConcurrent b does not escape
./sharded_test.go:54: BenchmarkShardedCacheGetManyConcurrentExpiring b does not escape
./sharded_test.go:58: BenchmarkShardedCacheGetManyConcurrentNotExpiring b does not escape
<autogenerated>:1: (*Item).Expired .this does not escape
<autogenerated>:2: leaking param: .this
<autogenerated>:2: leaking param: k
<autogenerated>:3: leaking param: k
<autogenerated>:3: Cache.set .this does not escape
<autogenerated>:4: leaking param: .this
<autogenerated>:4: leaking param: k
<autogenerated>:5: leaking param: .this
<autogenerated>:5: leaking param: k
<autogenerated>:6: leaking param: .this
<autogenerated>:6: Cache.Get k does not escape
<autogenerated>:7: Cache.get .this does not escape
<autogenerated>:7: Cache.get k does not escape
<autogenerated>:8: inlining call to (*cache).Increment
<autogenerated>:8: Cache.Increment .this does not escape
<autogenerated>:8: Cache.Increment k does not escape
<autogenerated>:9: inlining call to (*cache).Decrement
<autogenerated>:9: Cache.Decrement .this does not escape
<autogenerated>:9: Cache.Decrement k does not escape
<autogenerated>:10: leaking param: .this
<autogenerated>:10: leaking param: k
<autogenerated>:11: inlining call to (*cache).delete
<autogenerated>:11: moved to heap: v
<autogenerated>:11: &v.Object escapes to heap
<autogenerated>:11: Cache.delete .this does not escape
<autogenerated>:11: Cache.delete k does not escape
<autogenerated>:12: leaking param: .this
<autogenerated>:13: leaking param: .this
<autogenerated>:13: leaking param: f
<autogenerated>:14: leaking param: .this
<autogenerated>:15: leaking param: .this
<autogenerated>:16: (*Cache).Set .this does not escape
<autogenerated>:16: (*Cache).Set k does not escape
<autogenerated>:17: (*Cache).set .this does not escape
<autogenerated>:17: (*Cache).set k does not escape
<autogenerated>:18: (*Cache).Add .this does not escape
<autogenerated>:18: (*Cache).Add k does not escape
<autogenerated>:19: (*Cache).Replace .this does not escape
<autogenerated>:19: (*Cache).Replace k does not escape
<autogenerated>:20: (*Cache).Get .this does not escape
<autogenerated>:20: (*Cache).Get k does not escape
<autogenerated>:21: (*Cache).get .this does not escape
<autogenerated>:21: (*Cache).get k does not escape
<autogenerated>:22: (*Cache).Increment .this does not escape
<autogenerated>:22: (*Cache).Increment k does not escape
<autogenerated>:23: (*Cache).Decrement .this does not escape
<autogenerated>:23: (*Cache).Decrement k does not escape
<autogenerated>:24: (*Cache).Delete .this does not escape
<autogenerated>:24: (*Cache).Delete k does not escape
<autogenerated>:25: (*Cache).delete .this does not escape
<autogenerated>:25: (*Cache).delete k does not escape
<autogenerated>:26: (*Cache).DeleteExpired .this does not escape
<autogenerated>:27: (*Cache).OnEvicted .this does not escape
<autogenerated>:27: (*Cache).OnEvicted f does not escape
<autogenerated>:28: (*Cache).ItemCount .this does not escape
<autogenerated>:29: (*Cache).Flush .this does not escape
<autogenerated>:30: leaking param: .this to result ~r1 level=2
<autogenerated>:30: unexportedShardedCache.bucket k does not escape
<autogenerated>:31: leaking param content: .this
<autogenerated>:31: leaking param: k
<autogenerated>:32: leaking param content: .this
<autogenerated>:32: leaking param: k
<autogenerated>:33: leaking param content: .this
<autogenerated>:33: leaking param: k
<autogenerated>:34: leaking param content: .this
<autogenerated>:34: unexportedShardedCache.Get k does not escape
<autogenerated>:35: unexportedShardedCache.Increment .this does not escape
<autogenerated>:35: unexportedShardedCache.Increment k does not escape
<autogenerated>:36: unexportedShardedCache.Decrement .this does not escape
<autogenerated>:36: unexportedShardedCache.Decrement k does not escape
<autogenerated>:37: leaking param content: .this
<autogenerated>:37: leaking param: k
<autogenerated>:38: leaking param content: .this
<autogenerated>:39: inlining call to (*shardedCache).items
<autogenerated>:39: unexportedShardedCache.items .this does not escape
<autogenerated>:40: leaking param content: .this
<autogenerated>:41: (*unexportedShardedCache).bucket .this does not escape
<autogenerated>:41: (*unexportedShardedCache).bucket k does not escape
<autogenerated>:42: (*unexportedShardedCache).Set .this does not escape
<autogenerated>:42: (*unexportedShardedCache).Set k does not escape
<autogenerated>:43: (*unexportedShardedCache).Add .this does not escape
<autogenerated>:43: (*unexportedShardedCache).Add k does not escape
<autogenerated>:44: (*unexportedShardedCache).Replace .this does not escape
<autogenerated>:44: (*unexportedShardedCache).Replace k does not escape
<autogenerated>:45: (*unexportedShardedCache).Get .this does not escape
<autogenerated>:45: (*unexportedShardedCache).Get k does not escape
<autogenerated>:46: (*unexportedShardedCache).Increment .this does not escape
<autogenerated>:46: (*unexportedShardedCache).Increment k does not escape
<autogenerated>:47: (*unexportedShardedCache).Decrement .this does not escape
<autogenerated>:47: (*unexportedShardedCache).Decrement k does not escape
<autogenerated>:48: (*unexportedShardedCache).Delete .this does not escape
<autogenerated>:48: (*unexportedShardedCache).Delete k does not escape
<autogenerated>:49: (*unexportedShardedCache).DeleteExpired .this does not escape
<autogenerated>:50: (*unexportedShardedCache).items .this does not escape
<autogenerated>:51: (*unexportedShardedCache).Flush .this does not escape
# testmain
/var/folders/z4/vplvdvkx6fsfv7z6w8pzfqnr0000gn/T/go-build283622211/github.com/ggaaooppeenngg/cachemap/_test/_testmain.go:116: inlining call to testing.MainStart
/var/folders/z4/vplvdvkx6fsfv7z6w8pzfqnr0000gn/T/go-build283622211/github.com/ggaaooppeenngg/cachemap/_test/_testmain.go:101: leaking param: pat
/var/folders/z4/vplvdvkx6fsfv7z6w8pzfqnr0000gn/T/go-build283622211/github.com/ggaaooppeenngg/cachemap/_test/_testmain.go:101: leaking param: str
/var/folders/z4/vplvdvkx6fsfv7z6w8pzfqnr0000gn/T/go-build283622211/github.com/ggaaooppeenngg/cachemap/_test/_testmain.go:116: main &testing.M literal does not escape
BenchmarkCacheGetExpiring-4   20000000        61.4 ns/op
PASS


This is cache1 escape information
./cache.go:23: inlining call to time.Time.UnixNano
./cache.go:58: inlining call to time.Time.Add
./cache.go:58: inlining call to time.Time.UnixNano
./cache.go:76: inlining call to time.Time.Add
./cache.go:76: inlining call to time.Time.UnixNano
./cache.go:139: inlining call to time.Time.UnixNano
./cache.go:123: inlining call to time.Time.UnixNano
./cache.go:878: can inline (*cache).delete
./cache.go:871: inlining call to (*cache).delete
./cache.go:897: inlining call to time.Time.UnixNano
./cache.go:902: inlining call to (*cache).delete
./cache.go:967: inlining call to gob.NewDecoder
./cache.go:967: inlining call to bufio.NewReader
./cache.go:967: inlining call to bufio.NewReaderSize
./cache.go:967: inlining call to bufio.reset
./cache.go:1047: can inline stopJanitor
./cache.go:1059: can inline newCache
./cache.go:1071: inlining call to newCache
./sharded.go:144: can inline stopShardedJanitor
./sharded.go:164: inlining call to Uint64
./sharded.go:164: inlining call to big.low64
./cache_test.go:1385: inlining call to Name
./cache_test.go:1508: inlining call to runtime.NumCPU
./cache_test.go:1530: inlining call to runtime.NumCPU
./cache_test.go:1644: inlining call to (*cache).delete
./cache.go:19: Item.Expired item does not escape
./cache.go:60: c.mu escapes to heap
./cache.go:51: leaking param: c
./cache.go:51: leaking param: k
./cache.go:51: leaking param: x
./cache.go:67: c.mu escapes to heap
./cache.go:70: leaking param: k
./cache.go:70: leaking param: x
./cache.go:70: (*cache).set c does not escape
./cache.go:132: (*cache).get c does not escape
./cache.go:132: (*cache).get k does not escape
./cache.go:87: c.mu escapes to heap
./cache.go:86: leaking param: c
./cache.go:90: c.mu escapes to heap
./cache.go:91: k escapes to heap
./cache.go:86: leaking param: k
./cache.go:86: leaking param: x
./cache.go:94: c.mu escapes to heap
./cache.go:91: (*cache).Add ... argument does not escape
./cache.go:101: c.mu escapes to heap
./cache.go:100: leaking param: c
./cache.go:104: c.mu escapes to heap
./cache.go:105: k escapes to heap
./cache.go:100: leaking param: k
./cache.go:100: leaking param: x
./cache.go:108: c.mu escapes to heap
./cache.go:105: (*cache).Replace ... argument does not escape
./cache.go:115: c.mu escapes to heap
./cache.go:114: leaking param: c
./cache.go:119: c.mu escapes to heap
./cache.go:124: c.mu escapes to heap
./cache.go:128: c.mu escapes to heap
./cache.go:114: (*cache).Get k does not escape
./cache.go:152: c.mu escapes to heap
./cache.go:151: leaking param: c
./cache.go:155: c.mu escapes to heap
./cache.go:156: k escapes to heap
./cache.go:151: leaking param: k
./cache.go:186: c.mu escapes to heap
./cache.go:187: k escapes to heap
./cache.go:160: v.Object.(int) + int(n) escapes to heap
./cache.go:162: v.Object.(int8) + int8(n) escapes to heap
./cache.go:164: v.Object.(int16) + int16(n) escapes to heap
./cache.go:166: v.Object.(int32) + int32(n) escapes to heap
./cache.go:168: v.Object.(int64) + n escapes to heap
./cache.go:170: v.Object.(uint) + uint(n) escapes to heap
./cache.go:172: v.Object.(uintptr) + uintptr(n) escapes to heap
./cache.go:174: v.Object.(uint8) + uint8(n) escapes to heap
./cache.go:176: v.Object.(uint16) + uint16(n) escapes to heap
./cache.go:178: v.Object.(uint32) + uint32(n) escapes to heap
./cache.go:180: v.Object.(uint64) + uint64(n) escapes to heap
./cache.go:182: v.Object.(float32) + float32(n) escapes to heap
./cache.go:184: v.Object.(float64) + float64(n) escapes to heap
./cache.go:190: c.mu escapes to heap
./cache.go:156: (*cache).Increment ... argument does not escape
./cache.go:187: (*cache).Increment ... argument does not escape
./cache.go:200: c.mu escapes to heap
./cache.go:199: leaking param: c
./cache.go:203: c.mu escapes to heap
./cache.go:204: k escapes to heap
./cache.go:199: leaking param: k
./cache.go:212: c.mu escapes to heap
./cache.go:213: k escapes to heap
./cache.go:208: v.Object.(float32) + float32(n) escapes to heap
./cache.go:210: v.Object.(float64) + n escapes to heap
./cache.go:216: c.mu escapes to heap
./cache.go:204: (*cache).IncrementFloat ... argument does not escape
./cache.go:213: (*cache).IncrementFloat ... argument does not escape
./cache.go:224: c.mu escapes to heap
./cache.go:223: leaking param: c
./cache.go:227: c.mu escapes to heap
./cache.go:228: k escapes to heap
./cache.go:223: leaking param: k
./cache.go:232: c.mu escapes to heap
./cache.go:233: k escapes to heap
./cache.go:236: nv escapes to heap
./cache.go:238: c.mu escapes to heap
./cache.go:228: (*cache).IncrementInt ... argument does not escape
./cache.go:233: (*cache).IncrementInt ... argument does not escape
./cache.go:246: c.mu escapes to heap
./cache.go:245: leaking param: c
./cache.go:249: c.mu escapes to heap
./cache.go:250: k escapes to heap
./cache.go:245: leaking param: k
./cache.go:254: c.mu escapes to heap
./cache.go:255: k escapes to heap
./cache.go:258: nv escapes to heap
./cache.go:260: c.mu escapes to heap
./cache.go:250: (*cache).IncrementInt8 ... argument does not escape
./cache.go:255: (*cache).IncrementInt8 ... argument does not escape
./cache.go:268: c.mu escapes to heap
./cache.go:267: leaking param: c
./cache.go:271: c.mu escapes to heap
./cache.go:272: k escapes to heap
./cache.go:267: leaking param: k
./cache.go:276: c.mu escapes to heap
./cache.go:277: k escapes to heap
./cache.go:280: nv escapes to heap
./cache.go:282: c.mu escapes to heap
./cache.go:272: (*cache).IncrementInt16 ... argument does not escape
./cache.go:277: (*cache).IncrementInt16 ... argument does not escape
./cache.go:290: c.mu escapes to heap
./cache.go:289: leaking param: c
./cache.go:293: c.mu escapes to heap
./cache.go:294: k escapes to heap
./cache.go:289: leaking param: k
./cache.go:298: c.mu escapes to heap
./cache.go:299: k escapes to heap
./cache.go:302: nv escapes to heap
./cache.go:304: c.mu escapes to heap
./cache.go:294: (*cache).IncrementInt32 ... argument does not escape
./cache.go:299: (*cache).IncrementInt32 ... argument does not escape
./cache.go:312: c.mu escapes to heap
./cache.go:311: leaking param: c
./cache.go:315: c.mu escapes to heap
./cache.go:316: k escapes to heap
./cache.go:311: leaking param: k
./cache.go:320: c.mu escapes to heap
./cache.go:321: k escapes to heap
./cache.go:324: nv escapes to heap
./cache.go:326: c.mu escapes to heap
./cache.go:316: (*cache).IncrementInt64 ... argument does not escape
./cache.go:321: (*cache).IncrementInt64 ... argument does not escape
./cache.go:334: c.mu escapes to heap
./cache.go:333: leaking param: c
./cache.go:337: c.mu escapes to heap
./cache.go:338: k escapes to heap
./cache.go:333: leaking param: k
./cache.go:342: c.mu escapes to heap
./cache.go:343: k escapes to heap
./cache.go:346: nv escapes to heap
./cache.go:348: c.mu escapes to heap
./cache.go:338: (*cache).IncrementUint ... argument does not escape
./cache.go:343: (*cache).IncrementUint ... argument does not escape
./cache.go:356: c.mu escapes to heap
./cache.go:355: leaking param: c
./cache.go:359: c.mu escapes to heap
./cache.go:360: k escapes to heap
./cache.go:355: leaking param: k
./cache.go:364: c.mu escapes to heap
./cache.go:365: k escapes to heap
./cache.go:368: nv escapes to heap
./cache.go:370: c.mu escapes to heap
./cache.go:360: (*cache).IncrementUintptr ... argument does not escape
./cache.go:365: (*cache).IncrementUintptr ... argument does not escape
./cache.go:378: c.mu escapes to heap
./cache.go:377: leaking param: c
./cache.go:381: c.mu escapes to heap
./cache.go:382: k escapes to heap
./cache.go:377: leaking param: k
./cache.go:386: c.mu escapes to heap
./cache.go:387: k escapes to heap
./cache.go:390: nv escapes to heap
./cache.go:392: c.mu escapes to heap
./cache.go:382: (*cache).IncrementUint8 ... argument does not escape
./cache.go:387: (*cache).IncrementUint8 ... argument does not escape
./cache.go:400: c.mu escapes to heap
./cache.go:399: leaking param: c
./cache.go:403: c.mu escapes to heap
./cache.go:404: k escapes to heap
./cache.go:399: leaking param: k
./cache.go:408: c.mu escapes to heap
./cache.go:409: k escapes to heap
./cache.go:412: nv escapes to heap
./cache.go:414: c.mu escapes to heap
./cache.go:404: (*cache).IncrementUint16 ... argument does not escape
./cache.go:409: (*cache).IncrementUint16 ... argument does not escape
./cache.go:422: c.mu escapes to heap
./cache.go:421: leaking param: c
./cache.go:425: c.mu escapes to heap
./cache.go:426: k escapes to heap
./cache.go:421: leaking param: k
./cache.go:430: c.mu escapes to heap
./cache.go:431: k escapes to heap
./cache.go:434: nv escapes to heap
./cache.go:436: c.mu escapes to heap
./cache.go:426: (*cache).IncrementUint32 ... argument does not escape
./cache.go:431: (*cache).IncrementUint32 ... argument does not escape
./cache.go:444: c.mu escapes to heap
./cache.go:443: leaking param: c
./cache.go:447: c.mu escapes to heap
./cache.go:448: k escapes to heap
./cache.go:443: leaking param: k
./cache.go:452: c.mu escapes to heap
./cache.go:453: k escapes to heap
./cache.go:456: nv escapes to heap
./cache.go:458: c.mu escapes to heap
./cache.go:448: (*cache).IncrementUint64 ... argument does not escape
./cache.go:453: (*cache).IncrementUint64 ... argument does not escape
./cache.go:466: c.mu escapes to heap
./cache.go:465: leaking param: c
./cache.go:469: c.mu escapes to heap
./cache.go:470: k escapes to heap
./cache.go:465: leaking param: k
./cache.go:474: c.mu escapes to heap
./cache.go:475: k escapes to heap
./cache.go:478: nv escapes to heap
./cache.go:480: c.mu escapes to heap
./cache.go:470: (*cache).IncrementFloat32 ... argument does not escape
./cache.go:475: (*cache).IncrementFloat32 ... argument does not escape
./cache.go:488: c.mu escapes to heap
./cache.go:487: leaking param: c
./cache.go:491: c.mu escapes to heap
./cache.go:492: k escapes to heap
./cache.go:487: leaking param: k
./cache.go:496: c.mu escapes to heap
./cache.go:497: k escapes to heap
./cache.go:500: nv escapes to heap
./cache.go:502: c.mu escapes to heap
./cache.go:492: (*cache).IncrementFloat64 ... argument does not escape
./cache.go:497: (*cache).IncrementFloat64 ... argument does not escape
./cache.go:514: c.mu escapes to heap
./cache.go:511: leaking param: c
./cache.go:517: c.mu escapes to heap
./cache.go:548: c.mu escapes to heap
./cache.go:549: k escapes to heap
./cache.go:511: leaking param: k
./cache.go:522: v.Object.(int) - int(n) escapes to heap
./cache.go:524: v.Object.(int8) - int8(n) escapes to heap
./cache.go:526: v.Object.(int16) - int16(n) escapes to heap
./cache.go:528: v.Object.(int32) - int32(n) escapes to heap
./cache.go:530: v.Object.(int64) - n escapes to heap
./cache.go:532: v.Object.(uint) - uint(n) escapes to heap
./cache.go:534: v.Object.(uintptr) - uintptr(n) escapes to heap
./cache.go:536: v.Object.(uint8) - uint8(n) escapes to heap
./cache.go:538: v.Object.(uint16) - uint16(n) escapes to heap
./cache.go:540: v.Object.(uint32) - uint32(n) escapes to heap
./cache.go:542: v.Object.(uint64) - uint64(n) escapes to heap
./cache.go:544: v.Object.(float32) - float32(n) escapes to heap
./cache.go:546: v.Object.(float64) - float64(n) escapes to heap
./cache.go:552: c.mu escapes to heap
./cache.go:549: (*cache).Decrement ... argument does not escape
./cache.go:562: c.mu escapes to heap
./cache.go:561: leaking param: c
./cache.go:565: c.mu escapes to heap
./cache.go:566: k escapes to heap
./cache.go:561: leaking param: k
./cache.go:574: c.mu escapes to heap
./cache.go:575: k escapes to heap
./cache.go:570: v.Object.(float32) - float32(n) escapes to heap
./cache.go:572: v.Object.(float64) - n escapes to heap
./cache.go:578: c.mu escapes to heap
./cache.go:566: (*cache).DecrementFloat ... argument does not escape
./cache.go:575: (*cache).DecrementFloat ... argument does not escape
./cache.go:586: c.mu escapes to heap
./cache.go:585: leaking param: c
./cache.go:589: c.mu escapes to heap
./cache.go:590: k escapes to heap
./cache.go:585: leaking param: k
./cache.go:594: c.mu escapes to heap
./cache.go:595: k escapes to heap
./cache.go:598: nv escapes to heap
./cache.go:600: c.mu escapes to heap
./cache.go:590: (*cache).DecrementInt ... argument does not escape
./cache.go:595: (*cache).DecrementInt ... argument does not escape
./cache.go:608: c.mu escapes to heap
./cache.go:607: leaking param: c
./cache.go:611: c.mu escapes to heap
./cache.go:612: k escapes to heap
./cache.go:607: leaking param: k
./cache.go:616: c.mu escapes to heap
./cache.go:617: k escapes to heap
./cache.go:620: nv escapes to heap
./cache.go:622: c.mu escapes to heap
./cache.go:612: (*cache).DecrementInt8 ... argument does not escape
./cache.go:617: (*cache).DecrementInt8 ... argument does not escape
./cache.go:630: c.mu escapes to heap
./cache.go:629: leaking param: c
./cache.go:633: c.mu escapes to heap
./cache.go:634: k escapes to heap
./cache.go:629: leaking param: k
./cache.go:638: c.mu escapes to heap
./cache.go:639: k escapes to heap
./cache.go:642: nv escapes to heap
./cache.go:644: c.mu escapes to heap
./cache.go:634: (*cache).DecrementInt16 ... argument does not escape
./cache.go:639: (*cache).DecrementInt16 ... argument does not escape
./cache.go:652: c.mu escapes to heap
./cache.go:651: leaking param: c
./cache.go:655: c.mu escapes to heap
./cache.go:656: k escapes to heap
./cache.go:651: leaking param: k
./cache.go:660: c.mu escapes to heap
./cache.go:661: k escapes to heap
./cache.go:664: nv escapes to heap
./cache.go:666: c.mu escapes to heap
./cache.go:656: (*cache).DecrementInt32 ... argument does not escape
./cache.go:661: (*cache).DecrementInt32 ... argument does not escape
./cache.go:674: c.mu escapes to heap
./cache.go:673: leaking param: c
./cache.go:677: c.mu escapes to heap
./cache.go:678: k escapes to heap
./cache.go:673: leaking param: k
./cache.go:682: c.mu escapes to heap
./cache.go:683: k escapes to heap
./cache.go:686: nv escapes to heap
./cache.go:688: c.mu escapes to heap
./cache.go:678: (*cache).DecrementInt64 ... argument does not escape
./cache.go:683: (*cache).DecrementInt64 ... argument does not escape
./cache.go:696: c.mu escapes to heap
./cache.go:695: leaking param: c
./cache.go:699: c.mu escapes to heap
./cache.go:700: k escapes to heap
./cache.go:695: leaking param: k
./cache.go:704: c.mu escapes to heap
./cache.go:705: k escapes to heap
./cache.go:708: nv escapes to heap
./cache.go:710: c.mu escapes to heap
./cache.go:700: (*cache).DecrementUint ... argument does not escape
./cache.go:705: (*cache).DecrementUint ... argument does not escape
./cache.go:718: c.mu escapes to heap
./cache.go:717: leaking param: c
./cache.go:721: c.mu escapes to heap
./cache.go:722: k escapes to heap
./cache.go:717: leaking param: k
./cache.go:726: c.mu escapes to heap
./cache.go:727: k escapes to heap
./cache.go:730: nv escapes to heap
./cache.go:732: c.mu escapes to heap
./cache.go:722: (*cache).DecrementUintptr ... argument does not escape
./cache.go:727: (*cache).DecrementUintptr ... argument does not escape
./cache.go:740: c.mu escapes to heap
./cache.go:739: leaking param: c
./cache.go:743: c.mu escapes to heap
./cache.go:744: k escapes to heap
./cache.go:739: leaking param: k
./cache.go:748: c.mu escapes to heap
./cache.go:749: k escapes to heap
./cache.go:752: nv escapes to heap
./cache.go:754: c.mu escapes to heap
./cache.go:744: (*cache).DecrementUint8 ... argument does not escape
./cache.go:749: (*cache).DecrementUint8 ... argument does not escape
./cache.go:762: c.mu escapes to heap
./cache.go:761: leaking param: c
./cache.go:765: c.mu escapes to heap
./cache.go:766: k escapes to heap
./cache.go:761: leaking param: k
./cache.go:770: c.mu escapes to heap
./cache.go:771: k escapes to heap
./cache.go:774: nv escapes to heap
./cache.go:776: c.mu escapes to heap
./cache.go:766: (*cache).DecrementUint16 ... argument does not escape
./cache.go:771: (*cache).DecrementUint16 ... argument does not escape
./cache.go:784: c.mu escapes to heap
./cache.go:783: leaking param: c
./cache.go:787: c.mu escapes to heap
./cache.go:788: k escapes to heap
./cache.go:783: leaking param: k
./cache.go:792: c.mu escapes to heap
./cache.go:793: k escapes to heap
./cache.go:796: nv escapes to heap
./cache.go:798: c.mu escapes to heap
./cache.go:788: (*cache).DecrementUint32 ... argument does not escape
./cache.go:793: (*cache).DecrementUint32 ... argument does not escape
./cache.go:806: c.mu escapes to heap
./cache.go:805: leaking param: c
./cache.go:809: c.mu escapes to heap
./cache.go:810: k escapes to heap
./cache.go:805: leaking param: k
./cache.go:814: c.mu escapes to heap
./cache.go:815: k escapes to heap
./cache.go:818: nv escapes to heap
./cache.go:820: c.mu escapes to heap
./cache.go:810: (*cache).DecrementUint64 ... argument does not escape
./cache.go:815: (*cache).DecrementUint64 ... argument does not escape
./cache.go:828: c.mu escapes to heap
./cache.go:827: leaking param: c
./cache.go:831: c.mu escapes to heap
./cache.go:832: k escapes to heap
./cache.go:827: leaking param: k
./cache.go:836: c.mu escapes to heap
./cache.go:837: k escapes to heap
./cache.go:840: nv escapes to heap
./cache.go:842: c.mu escapes to heap
./cache.go:832: (*cache).DecrementFloat32 ... argument does not escape
./cache.go:837: (*cache).DecrementFloat32 ... argument does not escape
./cache.go:850: c.mu escapes to heap
./cache.go:849: leaking param: c
./cache.go:853: c.mu escapes to heap
./cache.go:854: k escapes to heap
./cache.go:849: leaking param: k
./cache.go:858: c.mu escapes to heap
./cache.go:859: k escapes to heap
./cache.go:862: nv escapes to heap
./cache.go:864: c.mu escapes to heap
./cache.go:854: (*cache).DecrementFloat64 ... argument does not escape
./cache.go:859: (*cache).DecrementFloat64 ... argument does not escape
./cache.go:870: c.mu escapes to heap
./cache.go:869: leaking param: c
./cache.go:872: c.mu escapes to heap
./cache.go:869: leaking param: k
./cache.go:878: (*cache).delete c does not escape
./cache.go:878: (*cache).delete k does not escape
./cache.go:898: c.mu escapes to heap
./cache.go:895: leaking param: c
./cache.go:908: c.mu escapes to heap
./cache.go:918: c.mu escapes to heap
./cache.go:917: leaking param: c
./cache.go:917: leaking param: f
./cache.go:920: c.mu escapes to heap
./cache.go:927: leaking param: w
./cache.go:934: c.mu escapes to heap
./cache.go:927: leaking param: c
./cache.go:935: c.mu escapes to heap
./cache.go:939: &c.items escapes to heap
./cache.go:939: &c.items escapes to heap
./cache.go:929: (*cache).Save func literal does not escape
./cache.go:948: leaking param: fname
./cache.go:948: leaking param: c
./cache.go:953: fp escapes to heap
./cache.go:967: make([]byte, bufio.size·3) escapes to heap
./cache.go:966: leaking param: r
./cache.go:967: io.Reader(bufio.NewReader(gob.r·2)) escapes to heap
./cache.go:967: new(bufio.Reader) escapes to heap
./cache.go:967: make(map[gob.typeId]*gob.wireType) escapes to heap
./cache.go:967: make(map[reflect.Type]map[gob.typeId]**gob.decEngine) escapes to heap
./cache.go:967: make(map[gob.typeId]**gob.decEngine) escapes to heap
./cache.go:967: make([]byte, 9) escapes to heap
./cache.go:967: new(gob.Decoder) escapes to heap
./cache.go:969: &items escapes to heap
./cache.go:969: &items escapes to heap
./cache.go:968: moved to heap: items
./cache.go:968: map[string]Item literal escapes to heap
./cache.go:971: c.mu escapes to heap
./cache.go:966: leaking param: c
./cache.go:972: c.mu escapes to heap
./cache.go:988: leaking param: fname
./cache.go:988: leaking param: c
./cache.go:993: fp escapes to heap
./cache.go:1007: c.mu escapes to heap
./cache.go:1006: leaking param: c
./cache.go:1008: c.mu escapes to heap
./cache.go:1015: c.mu escapes to heap
./cache.go:1014: leaking param: c
./cache.go:1017: c.mu escapes to heap
./cache.go:1023: c.mu escapes to heap
./cache.go:1022: leaking param: c
./cache.go:1024: map[string]Item literal escapes to heap
./cache.go:1025: c.mu escapes to heap
./cache.go:1034: make(chan bool) escapes to heap
./cache.go:1033: leaking param: c
./cache.go:1033: (*janitor).Run j does not escape
./cache.go:1047: stopJanitor c does not escape
./cache.go:1053: &janitor literal escapes to heap
./cache.go:1051: leaking param: c
./cache.go:1065: &cache literal escapes to heap
./cache.go:1059: leaking param: m to result ~r2 level=-1
./cache.go:1071: &cache literal escapes to heap
./cache.go:1070: leaking param: m
./cache.go:1080: C escapes to heap
./cache.go:1077: &Cache literal escapes to heap
./cache.go:1080: stopJanitor escapes to heap
./cache.go:1091: make(map[string]Item) escapes to heap
./cache.go:1116: leaking param: items
./sharded.go:34: djb33 k does not escape
./sharded.go:65: leaking param: sc to result ~r1 level=2
./sharded.go:65: (*shardedCache).bucket k does not escape
./sharded.go:69: leaking param content: sc
./sharded.go:69: leaking param: k
./sharded.go:69: leaking param: x
./sharded.go:73: leaking param content: sc
./sharded.go:73: leaking param: k
./sharded.go:73: leaking param: x
./sharded.go:77: leaking param content: sc
./sharded.go:77: leaking param: k
./sharded.go:77: leaking param: x
./sharded.go:81: leaking param content: sc
./sharded.go:81: (*shardedCache).Get k does not escape
./sharded.go:85: leaking param content: sc
./sharded.go:85: leaking param: k
./sharded.go:89: leaking param content: sc
./sharded.go:89: leaking param: k
./sharded.go:93: leaking param content: sc
./sharded.go:93: leaking param: k
./sharded.go:97: leaking param content: sc
./sharded.go:97: leaking param: k
./sharded.go:101: leaking param content: sc
./sharded.go:113: make([]map[string]Item, len(sc.cs)) escapes to heap
./sharded.go:112: leaking param content: sc
./sharded.go:120: leaking param content: sc
./sharded.go:132: make(chan bool) escapes to heap
./sharded.go:131: leaking param content: sc
./sharded.go:131: (*shardedJanitor).Run j does not escape
./sharded.go:144: stopShardedJanitor sc does not escape
./sharded.go:150: &shardedJanitor literal escapes to heap
./sharded.go:148: leaking param content: sc
./sharded.go:148: leaking param: sc
./sharded.go:169: make([]*cache, n) escapes to heap
./sharded.go:174: &cache literal escapes to heap
./sharded.go:174: map[string]Item literal escapes to heap
./sharded.go:169: &shardedCache literal escapes to heap
./sharded.go:161: newShardedCache ([]byte)("WARNING: go-cache's newShardedCache failed to read from the system CSPRNG (/dev/urandom or equivalent.) Your system's security may be compromised. Continuing with an insecure seed.\n") does not escape
./sharded.go:189: SC escapes to heap
./sharded.go:186: &unexportedShardedCache literal escapes to heap
./sharded.go:189: stopShardedJanitor escapes to heap
./cache_test.go:23: t.common escapes to heap
./cache_test.go:18: leaking param: t
./cache_test.go:23: "Getting A found value that shouldn't exist:" escapes to heap
./cache_test.go:28: t.common escapes to heap
./cache_test.go:28: "Getting B found value that shouldn't exist:" escapes to heap
./cache_test.go:33: t.common escapes to heap
./cache_test.go:33: "Getting C found value that shouldn't exist:" escapes to heap
./cache_test.go:36: 1 escapes to heap
./cache_test.go:37: "b" escapes to heap
./cache_test.go:38: 3.5 escapes to heap
./cache_test.go:42: t.common escapes to heap
./cache_test.go:42: "a was not found while getting a2" escapes to heap
./cache_test.go:45: t.common escapes to heap
./cache_test.go:45: "x for a is nil" escapes to heap
./cache_test.go:47: t.common escapes to heap
./cache_test.go:47: "a2 (which should be 1) plus 2 does not equal 3; value:" escapes to heap
./cache_test.go:47: a2 escapes to heap
./cache_test.go:52: t.common escapes to heap
./cache_test.go:52: "b was not found while getting b2" escapes to heap
./cache_test.go:55: t.common escapes to heap
./cache_test.go:55: "x for b is nil" escapes to heap
./cache_test.go:57: t.common escapes to heap
./cache_test.go:57: "b2 (which should be b) plus B does not equal bB; value:" escapes to heap
./cache_test.go:57: b2 escapes to heap
./cache_test.go:62: t.common escapes to heap
./cache_test.go:62: "c was not found while getting c2" escapes to heap
./cache_test.go:65: t.common escapes to heap
./cache_test.go:65: "x for c is nil" escapes to heap
./cache_test.go:67: t.common escapes to heap
./cache_test.go:67: "c2 (which should be 3.5) plus 1.2 does not equal 4.7; value:" escapes to heap
./cache_test.go:67: c2 escapes to heap
./cache_test.go:23: TestCache ... argument does not escape
./cache_test.go:28: TestCache ... argument does not escape
./cache_test.go:33: TestCache ... argument does not escape
./cache_test.go:42: TestCache ... argument does not escape
./cache_test.go:45: TestCache ... argument does not escape
./cache_test.go:47: TestCache ... argument does not escape
./cache_test.go:52: TestCache ... argument does not escape
./cache_test.go:55: TestCache ... argument does not escape
./cache_test.go:56: TestCache b2 + "B" does not escape
./cache_test.go:57: TestCache ... argument does not escape
./cache_test.go:62: TestCache ... argument does not escape
./cache_test.go:65: TestCache ... argument does not escape
./cache_test.go:67: TestCache ... argument does not escape
./cache_test.go:75: 1 escapes to heap
./cache_test.go:76: 2 escapes to heap
./cache_test.go:77: 3 escapes to heap
./cache_test.go:78: 4 escapes to heap
./cache_test.go:83: t.common escapes to heap
./cache_test.go:71: leaking param: t
./cache_test.go:83: "Found c when it should have been automatically deleted" escapes to heap
./cache_test.go:89: t.common escapes to heap
./cache_test.go:89: "Found a when it should have been automatically deleted" escapes to heap
./cache_test.go:94: t.common escapes to heap
./cache_test.go:94: "Did not find b even though it was set to never expire" escapes to heap
./cache_test.go:99: t.common escapes to heap
./cache_test.go:99: "Did not find d even though it was set to expire later than the default" escapes to heap
./cache_test.go:105: t.common escapes to heap
./cache_test.go:105: "Found d when it should have been automatically deleted (later than the default)" escapes to heap
./cache_test.go:83: TestCacheTimes ... argument does not escape
./cache_test.go:89: TestCacheTimes ... argument does not escape
./cache_test.go:94: TestCacheTimes ... argument does not escape
./cache_test.go:99: TestCacheTimes ... argument does not escape
./cache_test.go:105: TestCacheTimes ... argument does not escape
./cache_test.go:112: 1 escapes to heap
./cache_test.go:116: 2 escapes to heap
./cache_test.go:110: map[string]Item literal escapes to heap
./cache_test.go:123: t.common escapes to heap
./cache_test.go:109: leaking param: t
./cache_test.go:123: "Did not find a" escapes to heap
./cache_test.go:126: t.common escapes to heap
./cache_test.go:126: "a is not 1" escapes to heap
./cache_test.go:130: t.common escapes to heap
./cache_test.go:130: "Did not find b" escapes to heap
./cache_test.go:133: t.common escapes to heap
./cache_test.go:133: "b is not 2" escapes to heap
./cache_test.go:123: TestNewFrom ... argument does not escape
./cache_test.go:126: TestNewFrom ... argument does not escape
./cache_test.go:130: TestNewFrom ... argument does not escape
./cache_test.go:133: TestNewFrom ... argument does not escape
./cache_test.go:139: &TestStruct literal escapes to heap
./cache_test.go:139: &TestStruct literal escapes to heap
./cache_test.go:142: t.common escapes to heap
./cache_test.go:137: leaking param: t
./cache_test.go:142: "*TestStruct was not found for foo" escapes to heap
./cache_test.go:149: t.common escapes to heap
./cache_test.go:149: "*TestStruct was not found for foo (second time)" escapes to heap
./cache_test.go:153: t.common escapes to heap
./cache_test.go:153: "TestStruct.Num is not 2" escapes to heap
./cache_test.go:142: TestStorePointerToStruct ... argument does not escape
./cache_test.go:149: TestStorePointerToStruct ... argument does not escape
./cache_test.go:153: TestStorePointerToStruct ... argument does not escape
./cache_test.go:159: 1 escapes to heap
./cache_test.go:162: t.common escapes to heap
./cache_test.go:157: leaking param: t
./cache_test.go:162: "Error incrementing:" escapes to heap
./cache_test.go:162: err escapes to heap
./cache_test.go:166: t.common escapes to heap
./cache_test.go:166: "tint was not found" escapes to heap
./cache_test.go:169: t.common escapes to heap
./cache_test.go:169: "tint is not 3:" escapes to heap
./cache_test.go:162: TestIncrementWithInt ... argument does not escape
./cache_test.go:166: TestIncrementWithInt ... argument does not escape
./cache_test.go:169: TestIncrementWithInt ... argument does not escape
./cache_test.go:175: int8(1) escapes to heap
./cache_test.go:178: t.common escapes to heap
./cache_test.go:173: leaking param: t
./cache_test.go:178: "Error incrementing:" escapes to heap
./cache_test.go:178: err escapes to heap
./cache_test.go:182: t.common escapes to heap
./cache_test.go:182: "tint8 was not found" escapes to heap
./cache_test.go:185: t.common escapes to heap
./cache_test.go:185: "tint8 is not 3:" escapes to heap
./cache_test.go:178: TestIncrementWithInt8 ... argument does not escape
./cache_test.go:182: TestIncrementWithInt8 ... argument does not escape
./cache_test.go:185: TestIncrementWithInt8 ... argument does not escape
./cache_test.go:191: int16(1) escapes to heap
./cache_test.go:194: t.common escapes to heap
./cache_test.go:189: leaking param: t
./cache_test.go:194: "Error incrementing:" escapes to heap
./cache_test.go:194: err escapes to heap
./cache_test.go:198: t.common escapes to heap
./cache_test.go:198: "tint16 was not found" escapes to heap
./cache_test.go:201: t.common escapes to heap
./cache_test.go:201: "tint16 is not 3:" escapes to heap
./cache_test.go:194: TestIncrementWithInt16 ... argument does not escape
./cache_test.go:198: TestIncrementWithInt16 ... argument does not escape
./cache_test.go:201: TestIncrementWithInt16 ... argument does not escape
./cache_test.go:207: int32(1) escapes to heap
./cache_test.go:210: t.common escapes to heap
./cache_test.go:205: leaking param: t
./cache_test.go:210: "Error incrementing:" escapes to heap
./cache_test.go:210: err escapes to heap
./cache_test.go:214: t.common escapes to heap
./cache_test.go:214: "tint32 was not found" escapes to heap
./cache_test.go:217: t.common escapes to heap
./cache_test.go:217: "tint32 is not 3:" escapes to heap
./cache_test.go:210: TestIncrementWithInt32 ... argument does not escape
./cache_test.go:214: TestIncrementWithInt32 ... argument does not escape
./cache_test.go:217: TestIncrementWithInt32 ... argument does not escape
./cache_test.go:223: int64(1) escapes to heap
./cache_test.go:226: t.common escapes to heap
./cache_test.go:221: leaking param: t
./cache_test.go:226: "Error incrementing:" escapes to heap
./cache_test.go:226: err escapes to heap
./cache_test.go:230: t.common escapes to heap
./cache_test.go:230: "tint64 was not found" escapes to heap
./cache_test.go:233: t.common escapes to heap
./cache_test.go:233: "tint64 is not 3:" escapes to heap
./cache_test.go:226: TestIncrementWithInt64 ... argument does not escape
./cache_test.go:230: TestIncrementWithInt64 ... argument does not escape
./cache_test.go:233: TestIncrementWithInt64 ... argument does not escape
./cache_test.go:239: uint(1) escapes to heap
./cache_test.go:242: t.common escapes to heap
./cache_test.go:237: leaking param: t
./cache_test.go:242: "Error incrementing:" escapes to heap
./cache_test.go:242: err escapes to heap
./cache_test.go:246: t.common escapes to heap
./cache_test.go:246: "tuint was not found" escapes to heap
./cache_test.go:249: t.common escapes to heap
./cache_test.go:249: "tuint is not 3:" escapes to heap
./cache_test.go:242: TestIncrementWithUint ... argument does not escape
./cache_test.go:246: TestIncrementWithUint ... argument does not escape
./cache_test.go:249: TestIncrementWithUint ... argument does not escape
./cache_test.go:255: uintptr(1) escapes to heap
./cache_test.go:258: t.common escapes to heap
./cache_test.go:253: leaking param: t
./cache_test.go:258: "Error incrementing:" escapes to heap
./cache_test.go:258: err escapes to heap
./cache_test.go:263: t.common escapes to heap
./cache_test.go:263: "tuintptr was not found" escapes to heap
./cache_test.go:266: t.common escapes to heap
./cache_test.go:266: "tuintptr is not 3:" escapes to heap
./cache_test.go:258: TestIncrementWithUintptr ... argument does not escape
./cache_test.go:263: TestIncrementWithUintptr ... argument does not escape
./cache_test.go:266: TestIncrementWithUintptr ... argument does not escape
./cache_test.go:272: uint8(1) escapes to heap
./cache_test.go:275: t.common escapes to heap
./cache_test.go:270: leaking param: t
./cache_test.go:275: "Error incrementing:" escapes to heap
./cache_test.go:275: err escapes to heap
./cache_test.go:279: t.common escapes to heap
./cache_test.go:279: "tuint8 was not found" escapes to heap
./cache_test.go:282: t.common escapes to heap
./cache_test.go:282: "tuint8 is not 3:" escapes to heap
./cache_test.go:275: TestIncrementWithUint8 ... argument does not escape
./cache_test.go:279: TestIncrementWithUint8 ... argument does not escape
./cache_test.go:282: TestIncrementWithUint8 ... argument does not escape
./cache_test.go:288: uint16(1) escapes to heap
./cache_test.go:291: t.common escapes to heap
./cache_test.go:286: leaking param: t
./cache_test.go:291: "Error incrementing:" escapes to heap
./cache_test.go:291: err escapes to heap
./cache_test.go:296: t.common escapes to heap
./cache_test.go:296: "tuint16 was not found" escapes to heap
./cache_test.go:299: t.common escapes to heap
./cache_test.go:299: "tuint16 is not 3:" escapes to heap
./cache_test.go:291: TestIncrementWithUint16 ... argument does not escape
./cache_test.go:296: TestIncrementWithUint16 ... argument does not escape
./cache_test.go:299: TestIncrementWithUint16 ... argument does not escape
./cache_test.go:305: uint32(1) escapes to heap
./cache_test.go:308: t.common escapes to heap
./cache_test.go:303: leaking param: t
./cache_test.go:308: "Error incrementing:" escapes to heap
./cache_test.go:308: err escapes to heap
./cache_test.go:312: t.common escapes to heap
./cache_test.go:312: "tuint32 was not found" escapes to heap
./cache_test.go:315: t.common escapes to heap
./cache_test.go:315: "tuint32 is not 3:" escapes to heap
./cache_test.go:308: TestIncrementWithUint32 ... argument does not escape
./cache_test.go:312: TestIncrementWithUint32 ... argument does not escape
./cache_test.go:315: TestIncrementWithUint32 ... argument does not escape
./cache_test.go:321: uint64(1) escapes to heap
./cache_test.go:324: t.common escapes to heap
./cache_test.go:319: leaking param: t
./cache_test.go:324: "Error incrementing:" escapes to heap
./cache_test.go:324: err escapes to heap
./cache_test.go:329: t.common escapes to heap
./cache_test.go:329: "tuint64 was not found" escapes to heap
./cache_test.go:332: t.common escapes to heap
./cache_test.go:332: "tuint64 is not 3:" escapes to heap
./cache_test.go:324: TestIncrementWithUint64 ... argument does not escape
./cache_test.go:329: TestIncrementWithUint64 ... argument does not escape
./cache_test.go:332: TestIncrementWithUint64 ... argument does not escape
./cache_test.go:338: float32(1.5) escapes to heap
./cache_test.go:341: t.common escapes to heap
./cache_test.go:336: leaking param: t
./cache_test.go:341: "Error incrementing:" escapes to heap
./cache_test.go:341: err escapes to heap
./cache_test.go:345: t.common escapes to heap
./cache_test.go:345: "float32 was not found" escapes to heap
./cache_test.go:348: t.common escapes to heap
./cache_test.go:348: "float32 is not 3.5:" escapes to heap
./cache_test.go:341: TestIncrementWithFloat32 ... argument does not escape
./cache_test.go:345: TestIncrementWithFloat32 ... argument does not escape
./cache_test.go:348: TestIncrementWithFloat32 ... argument does not escape
./cache_test.go:354: float64(1.5) escapes to heap
./cache_test.go:357: t.common escapes to heap
./cache_test.go:352: leaking param: t
./cache_test.go:357: "Error incrementing:" escapes to heap
./cache_test.go:357: err escapes to heap
./cache_test.go:361: t.common escapes to heap
./cache_test.go:361: "float64 was not found" escapes to heap
./cache_test.go:364: t.common escapes to heap
./cache_test.go:364: "float64 is not 3.5:" escapes to heap
./cache_test.go:357: TestIncrementWithFloat64 ... argument does not escape
./cache_test.go:361: TestIncrementWithFloat64 ... argument does not escape
./cache_test.go:364: TestIncrementWithFloat64 ... argument does not escape
./cache_test.go:370: float32(1.5) escapes to heap
./cache_test.go:373: t.common escapes to heap
./cache_test.go:368: leaking param: t
./cache_test.go:373: "Error incrementfloating:" escapes to heap
./cache_test.go:373: err escapes to heap
./cache_test.go:377: t.common escapes to heap
./cache_test.go:377: "float32 was not found" escapes to heap
./cache_test.go:380: t.common escapes to heap
./cache_test.go:380: "float32 is not 3.5:" escapes to heap
./cache_test.go:373: TestIncrementFloatWithFloat32 ... argument does not escape
./cache_test.go:377: TestIncrementFloatWithFloat32 ... argument does not escape
./cache_test.go:380: TestIncrementFloatWithFloat32 ... argument does not escape
./cache_test.go:386: float64(1.5) escapes to heap
./cache_test.go:389: t.common escapes to heap
./cache_test.go:384: leaking param: t
./cache_test.go:389: "Error incrementfloating:" escapes to heap
./cache_test.go:389: err escapes to heap
./cache_test.go:393: t.common escapes to heap
./cache_test.go:393: "float64 was not found" escapes to heap
./cache_test.go:396: t.common escapes to heap
./cache_test.go:396: "float64 is not 3.5:" escapes to heap
./cache_test.go:389: TestIncrementFloatWithFloat64 ... argument does not escape
./cache_test.go:393: TestIncrementFloatWithFloat64 ... argument does not escape
./cache_test.go:396: TestIncrementFloatWithFloat64 ... argument does not escape
./cache_test.go:402: int(5) escapes to heap
./cache_test.go:405: t.common escapes to heap
./cache_test.go:400: leaking param: t
./cache_test.go:405: "Error decrementing:" escapes to heap
./cache_test.go:405: err escapes to heap
./cache_test.go:409: t.common escapes to heap
./cache_test.go:409: "int was not found" escapes to heap
./cache_test.go:412: t.common escapes to heap
./cache_test.go:412: "int is not 3:" escapes to heap
./cache_test.go:405: TestDecrementWithInt ... argument does not escape
./cache_test.go:409: TestDecrementWithInt ... argument does not escape
./cache_test.go:412: TestDecrementWithInt ... argument does not escape
./cache_test.go:418: int8(5) escapes to heap
./cache_test.go:421: t.common escapes to heap
./cache_test.go:416: leaking param: t
./cache_test.go:421: "Error decrementing:" escapes to heap
./cache_test.go:421: err escapes to heap
./cache_test.go:425: t.common escapes to heap
./cache_test.go:425: "int8 was not found" escapes to heap
./cache_test.go:428: t.common escapes to heap
./cache_test.go:428: "int8 is not 3:" escapes to heap
./cache_test.go:421: TestDecrementWithInt8 ... argument does not escape
./cache_test.go:425: TestDecrementWithInt8 ... argument does not escape
./cache_test.go:428: TestDecrementWithInt8 ... argument does not escape
./cache_test.go:434: int16(5) escapes to heap
./cache_test.go:437: t.common escapes to heap
./cache_test.go:432: leaking param: t
./cache_test.go:437: "Error decrementing:" escapes to heap
./cache_test.go:437: err escapes to heap
./cache_test.go:441: t.common escapes to heap
./cache_test.go:441: "int16 was not found" escapes to heap
./cache_test.go:444: t.common escapes to heap
./cache_test.go:444: "int16 is not 3:" escapes to heap
./cache_test.go:437: TestDecrementWithInt16 ... argument does not escape
./cache_test.go:441: TestDecrementWithInt16 ... argument does not escape
./cache_test.go:444: TestDecrementWithInt16 ... argument does not escape
./cache_test.go:450: int32(5) escapes to heap
./cache_test.go:453: t.common escapes to heap
./cache_test.go:448: leaking param: t
./cache_test.go:453: "Error decrementing:" escapes to heap
./cache_test.go:453: err escapes to heap
./cache_test.go:457: t.common escapes to heap
./cache_test.go:457: "int32 was not found" escapes to heap
./cache_test.go:460: t.common escapes to heap
./cache_test.go:460: "int32 is not 3:" escapes to heap
./cache_test.go:453: TestDecrementWithInt32 ... argument does not escape
./cache_test.go:457: TestDecrementWithInt32 ... argument does not escape
./cache_test.go:460: TestDecrementWithInt32 ... argument does not escape
./cache_test.go:466: int64(5) escapes to heap
./cache_test.go:469: t.common escapes to heap
./cache_test.go:464: leaking param: t
./cache_test.go:469: "Error decrementing:" escapes to heap
./cache_test.go:469: err escapes to heap
./cache_test.go:473: t.common escapes to heap
./cache_test.go:473: "int64 was not found" escapes to heap
./cache_test.go:476: t.common escapes to heap
./cache_test.go:476: "int64 is not 3:" escapes to heap
./cache_test.go:469: TestDecrementWithInt64 ... argument does not escape
./cache_test.go:473: TestDecrementWithInt64 ... argument does not escape
./cache_test.go:476: TestDecrementWithInt64 ... argument does not escape
./cache_test.go:482: uint(5) escapes to heap
./cache_test.go:485: t.common escapes to heap
./cache_test.go:480: leaking param: t
./cache_test.go:485: "Error decrementing:" escapes to heap
./cache_test.go:485: err escapes to heap
./cache_test.go:489: t.common escapes to heap
./cache_test.go:489: "uint was not found" escapes to heap
./cache_test.go:492: t.common escapes to heap
./cache_test.go:492: "uint is not 3:" escapes to heap
./cache_test.go:485: TestDecrementWithUint ... argument does not escape
./cache_test.go:489: TestDecrementWithUint ... argument does not escape
./cache_test.go:492: TestDecrementWithUint ... argument does not escape
./cache_test.go:498: uintptr(5) escapes to heap
./cache_test.go:501: t.common escapes to heap
./cache_test.go:496: leaking param: t
./cache_test.go:501: "Error decrementing:" escapes to heap
./cache_test.go:501: err escapes to heap
./cache_test.go:505: t.common escapes to heap
./cache_test.go:505: "uintptr was not found" escapes to heap
./cache_test.go:508: t.common escapes to heap
./cache_test.go:508: "uintptr is not 3:" escapes to heap
./cache_test.go:501: TestDecrementWithUintptr ... argument does not escape
./cache_test.go:505: TestDecrementWithUintptr ... argument does not escape
./cache_test.go:508: TestDecrementWithUintptr ... argument does not escape
./cache_test.go:514: uint8(5) escapes to heap
./cache_test.go:517: t.common escapes to heap
./cache_test.go:512: leaking param: t
./cache_test.go:517: "Error decrementing:" escapes to heap
./cache_test.go:517: err escapes to heap
./cache_test.go:521: t.common escapes to heap
./cache_test.go:521: "uint8 was not found" escapes to heap
./cache_test.go:524: t.common escapes to heap
./cache_test.go:524: "uint8 is not 3:" escapes to heap
./cache_test.go:517: TestDecrementWithUint8 ... argument does not escape
./cache_test.go:521: TestDecrementWithUint8 ... argument does not escape
./cache_test.go:524: TestDecrementWithUint8 ... argument does not escape
./cache_test.go:530: uint16(5) escapes to heap
./cache_test.go:533: t.common escapes to heap
./cache_test.go:528: leaking param: t
./cache_test.go:533: "Error decrementing:" escapes to heap
./cache_test.go:533: err escapes to heap
./cache_test.go:537: t.common escapes to heap
./cache_test.go:537: "uint16 was not found" escapes to heap
./cache_test.go:540: t.common escapes to heap
./cache_test.go:540: "uint16 is not 3:" escapes to heap
./cache_test.go:533: TestDecrementWithUint16 ... argument does not escape
./cache_test.go:537: TestDecrementWithUint16 ... argument does not escape
./cache_test.go:540: TestDecrementWithUint16 ... argument does not escape
./cache_test.go:546: uint32(5) escapes to heap
./cache_test.go:549: t.common escapes to heap
./cache_test.go:544: leaking param: t
./cache_test.go:549: "Error decrementing:" escapes to heap
./cache_test.go:549: err escapes to heap
./cache_test.go:553: t.common escapes to heap
./cache_test.go:553: "uint32 was not found" escapes to heap
./cache_test.go:556: t.common escapes to heap
./cache_test.go:556: "uint32 is not 3:" escapes to heap
./cache_test.go:549: TestDecrementWithUint32 ... argument does not escape
./cache_test.go:553: TestDecrementWithUint32 ... argument does not escape
./cache_test.go:556: TestDecrementWithUint32 ... argument does not escape
./cache_test.go:562: uint64(5) escapes to heap
./cache_test.go:565: t.common escapes to heap
./cache_test.go:560: leaking param: t
./cache_test.go:565: "Error decrementing:" escapes to heap
./cache_test.go:565: err escapes to heap
./cache_test.go:569: t.common escapes to heap
./cache_test.go:569: "uint64 was not found" escapes to heap
./cache_test.go:572: t.common escapes to heap
./cache_test.go:572: "uint64 is not 3:" escapes to heap
./cache_test.go:565: TestDecrementWithUint64 ... argument does not escape
./cache_test.go:569: TestDecrementWithUint64 ... argument does not escape
./cache_test.go:572: TestDecrementWithUint64 ... argument does not escape
./cache_test.go:578: float32(5.5) escapes to heap
./cache_test.go:581: t.common escapes to heap
./cache_test.go:576: leaking param: t
./cache_test.go:581: "Error decrementing:" escapes to heap
./cache_test.go:581: err escapes to heap
./cache_test.go:585: t.common escapes to heap
./cache_test.go:585: "float32 was not found" escapes to heap
./cache_test.go:588: t.common escapes to heap
./cache_test.go:588: "float32 is not 3:" escapes to heap
./cache_test.go:581: TestDecrementWithFloat32 ... argument does not escape
./cache_test.go:585: TestDecrementWithFloat32 ... argument does not escape
./cache_test.go:588: TestDecrementWithFloat32 ... argument does not escape
./cache_test.go:594: float64(5.5) escapes to heap
./cache_test.go:597: t.common escapes to heap
./cache_test.go:592: leaking param: t
./cache_test.go:597: "Error decrementing:" escapes to heap
./cache_test.go:597: err escapes to heap
./cache_test.go:601: t.common escapes to heap
./cache_test.go:601: "float64 was not found" escapes to heap
./cache_test.go:604: t.common escapes to heap
./cache_test.go:604: "float64 is not 3:" escapes to heap
./cache_test.go:597: TestDecrementWithFloat64 ... argument does not escape
./cache_test.go:601: TestDecrementWithFloat64 ... argument does not escape
./cache_test.go:604: TestDecrementWithFloat64 ... argument does not escape
./cache_test.go:610: float32(5.5) escapes to heap
./cache_test.go:613: t.common escapes to heap
./cache_test.go:608: leaking param: t
./cache_test.go:613: "Error decrementing:" escapes to heap
./cache_test.go:613: err escapes to heap
./cache_test.go:617: t.common escapes to heap
./cache_test.go:617: "float32 was not found" escapes to heap
./cache_test.go:620: t.common escapes to heap
./cache_test.go:620: "float32 is not 3:" escapes to heap
./cache_test.go:613: TestDecrementFloatWithFloat32 ... argument does not escape
./cache_test.go:617: TestDecrementFloatWithFloat32 ... argument does not escape
./cache_test.go:620: TestDecrementFloatWithFloat32 ... argument does not escape
./cache_test.go:626: float64(5.5) escapes to heap
./cache_test.go:629: t.common escapes to heap
./cache_test.go:624: leaking param: t
./cache_test.go:629: "Error decrementing:" escapes to heap
./cache_test.go:629: err escapes to heap
./cache_test.go:633: t.common escapes to heap
./cache_test.go:633: "float64 was not found" escapes to heap
./cache_test.go:636: t.common escapes to heap
./cache_test.go:636: "float64 is not 3:" escapes to heap
./cache_test.go:629: TestDecrementFloatWithFloat64 ... argument does not escape
./cache_test.go:633: TestDecrementFloatWithFloat64 ... argument does not escape
./cache_test.go:636: TestDecrementFloatWithFloat64 ... argument does not escape
./cache_test.go:642: 1 escapes to heap
./cache_test.go:645: t.common escapes to heap
./cache_test.go:640: leaking param: t
./cache_test.go:645: "Error incrementing:" escapes to heap
./cache_test.go:645: err escapes to heap
./cache_test.go:648: t.common escapes to heap
./cache_test.go:648: "Returned number is not 3:" escapes to heap
./cache_test.go:648: n escapes to heap
./cache_test.go:652: t.common escapes to heap
./cache_test.go:652: "tint was not found" escapes to heap
./cache_test.go:655: t.common escapes to heap
./cache_test.go:655: "tint is not 3:" escapes to heap
./cache_test.go:645: TestIncrementInt ... argument does not escape
./cache_test.go:648: TestIncrementInt ... argument does not escape
./cache_test.go:652: TestIncrementInt ... argument does not escape
./cache_test.go:655: TestIncrementInt ... argument does not escape
./cache_test.go:661: int8(1) escapes to heap
./cache_test.go:664: t.common escapes to heap
./cache_test.go:659: leaking param: t
./cache_test.go:664: "Error incrementing:" escapes to heap
./cache_test.go:664: err escapes to heap
./cache_test.go:667: t.common escapes to heap
./cache_test.go:667: "Returned number is not 3:" escapes to heap
./cache_test.go:667: n escapes to heap
./cache_test.go:671: t.common escapes to heap
./cache_test.go:671: "tint8 was not found" escapes to heap
./cache_test.go:674: t.common escapes to heap
./cache_test.go:674: "tint8 is not 3:" escapes to heap
./cache_test.go:664: TestIncrementInt8 ... argument does not escape
./cache_test.go:667: TestIncrementInt8 ... argument does not escape
./cache_test.go:671: TestIncrementInt8 ... argument does not escape
./cache_test.go:674: TestIncrementInt8 ... argument does not escape
./cache_test.go:680: int16(1) escapes to heap
./cache_test.go:683: t.common escapes to heap
./cache_test.go:678: leaking param: t
./cache_test.go:683: "Error incrementing:" escapes to heap
./cache_test.go:683: err escapes to heap
./cache_test.go:686: t.common escapes to heap
./cache_test.go:686: "Returned number is not 3:" escapes to heap
./cache_test.go:686: n escapes to heap
./cache_test.go:690: t.common escapes to heap
./cache_test.go:690: "tint16 was not found" escapes to heap
./cache_test.go:693: t.common escapes to heap
./cache_test.go:693: "tint16 is not 3:" escapes to heap
./cache_test.go:683: TestIncrementInt16 ... argument does not escape
./cache_test.go:686: TestIncrementInt16 ... argument does not escape
./cache_test.go:690: TestIncrementInt16 ... argument does not escape
./cache_test.go:693: TestIncrementInt16 ... argument does not escape
./cache_test.go:699: int32(1) escapes to heap
./cache_test.go:702: t.common escapes to heap
./cache_test.go:697: leaking param: t
./cache_test.go:702: "Error incrementing:" escapes to heap
./cache_test.go:702: err escapes to heap
./cache_test.go:705: t.common escapes to heap
./cache_test.go:705: "Returned number is not 3:" escapes to heap
./cache_test.go:705: n escapes to heap
./cache_test.go:709: t.common escapes to heap
./cache_test.go:709: "tint32 was not found" escapes to heap
./cache_test.go:712: t.common escapes to heap
./cache_test.go:712: "tint32 is not 3:" escapes to heap
./cache_test.go:702: TestIncrementInt32 ... argument does not escape
./cache_test.go:705: TestIncrementInt32 ... argument does not escape
./cache_test.go:709: TestIncrementInt32 ... argument does not escape
./cache_test.go:712: TestIncrementInt32 ... argument does not escape
./cache_test.go:718: int64(1) escapes to heap
./cache_test.go:721: t.common escapes to heap
./cache_test.go:716: leaking param: t
./cache_test.go:721: "Error incrementing:" escapes to heap
./cache_test.go:721: err escapes to heap
./cache_test.go:724: t.common escapes to heap
./cache_test.go:724: "Returned number is not 3:" escapes to heap
./cache_test.go:724: n escapes to heap
./cache_test.go:728: t.common escapes to heap
./cache_test.go:728: "tint64 was not found" escapes to heap
./cache_test.go:731: t.common escapes to heap
./cache_test.go:731: "tint64 is not 3:" escapes to heap
./cache_test.go:721: TestIncrementInt64 ... argument does not escape
./cache_test.go:724: TestIncrementInt64 ... argument does not escape
./cache_test.go:728: TestIncrementInt64 ... argument does not escape
./cache_test.go:731: TestIncrementInt64 ... argument does not escape
./cache_test.go:737: uint(1) escapes to heap
./cache_test.go:740: t.common escapes to heap
./cache_test.go:735: leaking param: t
./cache_test.go:740: "Error incrementing:" escapes to heap
./cache_test.go:740: err escapes to heap
./cache_test.go:743: t.common escapes to heap
./cache_test.go:743: "Returned number is not 3:" escapes to heap
./cache_test.go:743: n escapes to heap
./cache_test.go:747: t.common escapes to heap
./cache_test.go:747: "tuint was not found" escapes to heap
./cache_test.go:750: t.common escapes to heap
./cache_test.go:750: "tuint is not 3:" escapes to heap
./cache_test.go:740: TestIncrementUint ... argument does not escape
./cache_test.go:743: TestIncrementUint ... argument does not escape
./cache_test.go:747: TestIncrementUint ... argument does not escape
./cache_test.go:750: TestIncrementUint ... argument does not escape
./cache_test.go:756: uintptr(1) escapes to heap
./cache_test.go:759: t.common escapes to heap
./cache_test.go:754: leaking param: t
./cache_test.go:759: "Error incrementing:" escapes to heap
./cache_test.go:759: err escapes to heap
./cache_test.go:762: t.common escapes to heap
./cache_test.go:762: "Returned number is not 3:" escapes to heap
./cache_test.go:762: n escapes to heap
./cache_test.go:766: t.common escapes to heap
./cache_test.go:766: "tuintptr was not found" escapes to heap
./cache_test.go:769: t.common escapes to heap
./cache_test.go:769: "tuintptr is not 3:" escapes to heap
./cache_test.go:759: TestIncrementUintptr ... argument does not escape
./cache_test.go:762: TestIncrementUintptr ... argument does not escape
./cache_test.go:766: TestIncrementUintptr ... argument does not escape
./cache_test.go:769: TestIncrementUintptr ... argument does not escape
./cache_test.go:775: uint8(1) escapes to heap
./cache_test.go:778: t.common escapes to heap
./cache_test.go:773: leaking param: t
./cache_test.go:778: "Error incrementing:" escapes to heap
./cache_test.go:778: err escapes to heap
./cache_test.go:781: t.common escapes to heap
./cache_test.go:781: "Returned number is not 3:" escapes to heap
./cache_test.go:781: n escapes to heap
./cache_test.go:785: t.common escapes to heap
./cache_test.go:785: "tuint8 was not found" escapes to heap
./cache_test.go:788: t.common escapes to heap
./cache_test.go:788: "tuint8 is not 3:" escapes to heap
./cache_test.go:778: TestIncrementUint8 ... argument does not escape
./cache_test.go:781: TestIncrementUint8 ... argument does not escape
./cache_test.go:785: TestIncrementUint8 ... argument does not escape
./cache_test.go:788: TestIncrementUint8 ... argument does not escape
./cache_test.go:794: uint16(1) escapes to heap
./cache_test.go:797: t.common escapes to heap
./cache_test.go:792: leaking param: t
./cache_test.go:797: "Error incrementing:" escapes to heap
./cache_test.go:797: err escapes to heap
./cache_test.go:800: t.common escapes to heap
./cache_test.go:800: "Returned number is not 3:" escapes to heap
./cache_test.go:800: n escapes to heap
./cache_test.go:804: t.common escapes to heap
./cache_test.go:804: "tuint16 was not found" escapes to heap
./cache_test.go:807: t.common escapes to heap
./cache_test.go:807: "tuint16 is not 3:" escapes to heap
./cache_test.go:797: TestIncrementUint16 ... argument does not escape
./cache_test.go:800: TestIncrementUint16 ... argument does not escape
./cache_test.go:804: TestIncrementUint16 ... argument does not escape
./cache_test.go:807: TestIncrementUint16 ... argument does not escape
./cache_test.go:813: uint32(1) escapes to heap
./cache_test.go:816: t.common escapes to heap
./cache_test.go:811: leaking param: t
./cache_test.go:816: "Error incrementing:" escapes to heap
./cache_test.go:816: err escapes to heap
./cache_test.go:819: t.common escapes to heap
./cache_test.go:819: "Returned number is not 3:" escapes to heap
./cache_test.go:819: n escapes to heap
./cache_test.go:823: t.common escapes to heap
./cache_test.go:823: "tuint32 was not found" escapes to heap
./cache_test.go:826: t.common escapes to heap
./cache_test.go:826: "tuint32 is not 3:" escapes to heap
./cache_test.go:816: TestIncrementUint32 ... argument does not escape
./cache_test.go:819: TestIncrementUint32 ... argument does not escape
./cache_test.go:823: TestIncrementUint32 ... argument does not escape
./cache_test.go:826: TestIncrementUint32 ... argument does not escape
./cache_test.go:832: uint64(1) escapes to heap
./cache_test.go:835: t.common escapes to heap
./cache_test.go:830: leaking param: t
./cache_test.go:835: "Error incrementing:" escapes to heap
./cache_test.go:835: err escapes to heap
./cache_test.go:838: t.common escapes to heap
./cache_test.go:838: "Returned number is not 3:" escapes to heap
./cache_test.go:838: n escapes to heap
./cache_test.go:842: t.common escapes to heap
./cache_test.go:842: "tuint64 was not found" escapes to heap
./cache_test.go:845: t.common escapes to heap
./cache_test.go:845: "tuint64 is not 3:" escapes to heap
./cache_test.go:835: TestIncrementUint64 ... argument does not escape
./cache_test.go:838: TestIncrementUint64 ... argument does not escape
./cache_test.go:842: TestIncrementUint64 ... argument does not escape
./cache_test.go:845: TestIncrementUint64 ... argument does not escape
./cache_test.go:851: float32(1.5) escapes to heap
./cache_test.go:854: t.common escapes to heap
./cache_test.go:849: leaking param: t
./cache_test.go:854: "Error incrementing:" escapes to heap
./cache_test.go:854: err escapes to heap
./cache_test.go:857: t.common escapes to heap
./cache_test.go:857: "Returned number is not 3.5:" escapes to heap
./cache_test.go:857: n escapes to heap
./cache_test.go:861: t.common escapes to heap
./cache_test.go:861: "float32 was not found" escapes to heap
./cache_test.go:864: t.common escapes to heap
./cache_test.go:864: "float32 is not 3.5:" escapes to heap
./cache_test.go:854: TestIncrementFloat32 ... argument does not escape
./cache_test.go:857: TestIncrementFloat32 ... argument does not escape
./cache_test.go:861: TestIncrementFloat32 ... argument does not escape
./cache_test.go:864: TestIncrementFloat32 ... argument does not escape
./cache_test.go:870: float64(1.5) escapes to heap
./cache_test.go:873: t.common escapes to heap
./cache_test.go:868: leaking param: t
./cache_test.go:873: "Error incrementing:" escapes to heap
./cache_test.go:873: err escapes to heap
./cache_test.go:876: t.common escapes to heap
./cache_test.go:876: "Returned number is not 3.5:" escapes to heap
./cache_test.go:876: n escapes to heap
./cache_test.go:880: t.common escapes to heap
./cache_test.go:880: "float64 was not found" escapes to heap
./cache_test.go:883: t.common escapes to heap
./cache_test.go:883: "float64 is not 3.5:" escapes to heap
./cache_test.go:873: TestIncrementFloat64 ... argument does not escape
./cache_test.go:876: TestIncrementFloat64 ... argument does not escape
./cache_test.go:880: TestIncrementFloat64 ... argument does not escape
./cache_test.go:883: TestIncrementFloat64 ... argument does not escape
./cache_test.go:889: int8(5) escapes to heap
./cache_test.go:892: t.common escapes to heap
./cache_test.go:887: leaking param: t
./cache_test.go:892: "Error decrementing:" escapes to heap
./cache_test.go:892: err escapes to heap
./cache_test.go:895: t.common escapes to heap
./cache_test.go:895: "Returned number is not 3:" escapes to heap
./cache_test.go:895: n escapes to heap
./cache_test.go:899: t.common escapes to heap
./cache_test.go:899: "int8 was not found" escapes to heap
./cache_test.go:902: t.common escapes to heap
./cache_test.go:902: "int8 is not 3:" escapes to heap
./cache_test.go:892: TestDecrementInt8 ... argument does not escape
./cache_test.go:895: TestDecrementInt8 ... argument does not escape
./cache_test.go:899: TestDecrementInt8 ... argument does not escape
./cache_test.go:902: TestDecrementInt8 ... argument does not escape
./cache_test.go:908: int16(5) escapes to heap
./cache_test.go:911: t.common escapes to heap
./cache_test.go:906: leaking param: t
./cache_test.go:911: "Error decrementing:" escapes to heap
./cache_test.go:911: err escapes to heap
./cache_test.go:914: t.common escapes to heap
./cache_test.go:914: "Returned number is not 3:" escapes to heap
./cache_test.go:914: n escapes to heap
./cache_test.go:918: t.common escapes to heap
./cache_test.go:918: "int16 was not found" escapes to heap
./cache_test.go:921: t.common escapes to heap
./cache_test.go:921: "int16 is not 3:" escapes to heap
./cache_test.go:911: TestDecrementInt16 ... argument does not escape
./cache_test.go:914: TestDecrementInt16 ... argument does not escape
./cache_test.go:918: TestDecrementInt16 ... argument does not escape
./cache_test.go:921: TestDecrementInt16 ... argument does not escape
./cache_test.go:927: int32(5) escapes to heap
./cache_test.go:930: t.common escapes to heap
./cache_test.go:925: leaking param: t
./cache_test.go:930: "Error decrementing:" escapes to heap
./cache_test.go:930: err escapes to heap
./cache_test.go:933: t.common escapes to heap
./cache_test.go:933: "Returned number is not 3:" escapes to heap
./cache_test.go:933: n escapes to heap
./cache_test.go:937: t.common escapes to heap
./cache_test.go:937: "int32 was not found" escapes to heap
./cache_test.go:940: t.common escapes to heap
./cache_test.go:940: "int32 is not 3:" escapes to heap
./cache_test.go:930: TestDecrementInt32 ... argument does not escape
./cache_test.go:933: TestDecrementInt32 ... argument does not escape
./cache_test.go:937: TestDecrementInt32 ... argument does not escape
./cache_test.go:940: TestDecrementInt32 ... argument does not escape
./cache_test.go:946: int64(5) escapes to heap
./cache_test.go:949: t.common escapes to heap
./cache_test.go:944: leaking param: t
./cache_test.go:949: "Error decrementing:" escapes to heap
./cache_test.go:949: err escapes to heap
./cache_test.go:952: t.common escapes to heap
./cache_test.go:952: "Returned number is not 3:" escapes to heap
./cache_test.go:952: n escapes to heap
./cache_test.go:956: t.common escapes to heap
./cache_test.go:956: "int64 was not found" escapes to heap
./cache_test.go:959: t.common escapes to heap
./cache_test.go:959: "int64 is not 3:" escapes to heap
./cache_test.go:949: TestDecrementInt64 ... argument does not escape
./cache_test.go:952: TestDecrementInt64 ... argument does not escape
./cache_test.go:956: TestDecrementInt64 ... argument does not escape
./cache_test.go:959: TestDecrementInt64 ... argument does not escape
./cache_test.go:965: uint(5) escapes to heap
./cache_test.go:968: t.common escapes to heap
./cache_test.go:963: leaking param: t
./cache_test.go:968: "Error decrementing:" escapes to heap
./cache_test.go:968: err escapes to heap
./cache_test.go:971: t.common escapes to heap
./cache_test.go:971: "Returned number is not 3:" escapes to heap
./cache_test.go:971: n escapes to heap
./cache_test.go:975: t.common escapes to heap
./cache_test.go:975: "uint was not found" escapes to heap
./cache_test.go:978: t.common escapes to heap
./cache_test.go:978: "uint is not 3:" escapes to heap
./cache_test.go:968: TestDecrementUint ... argument does not escape
./cache_test.go:971: TestDecrementUint ... argument does not escape
./cache_test.go:975: TestDecrementUint ... argument does not escape
./cache_test.go:978: TestDecrementUint ... argument does not escape
./cache_test.go:984: uintptr(5) escapes to heap
./cache_test.go:987: t.common escapes to heap
./cache_test.go:982: leaking param: t
./cache_test.go:987: "Error decrementing:" escapes to heap
./cache_test.go:987: err escapes to heap
./cache_test.go:990: t.common escapes to heap
./cache_test.go:990: "Returned number is not 3:" escapes to heap
./cache_test.go:990: n escapes to heap
./cache_test.go:994: t.common escapes to heap
./cache_test.go:994: "uintptr was not found" escapes to heap
./cache_test.go:997: t.common escapes to heap
./cache_test.go:997: "uintptr is not 3:" escapes to heap
./cache_test.go:987: TestDecrementUintptr ... argument does not escape
./cache_test.go:990: TestDecrementUintptr ... argument does not escape
./cache_test.go:994: TestDecrementUintptr ... argument does not escape
./cache_test.go:997: TestDecrementUintptr ... argument does not escape
./cache_test.go:1003: uint8(5) escapes to heap
./cache_test.go:1006: t.common escapes to heap
./cache_test.go:1001: leaking param: t
./cache_test.go:1006: "Error decrementing:" escapes to heap
./cache_test.go:1006: err escapes to heap
./cache_test.go:1009: t.common escapes to heap
./cache_test.go:1009: "Returned number is not 3:" escapes to heap
./cache_test.go:1009: n escapes to heap
./cache_test.go:1013: t.common escapes to heap
./cache_test.go:1013: "uint8 was not found" escapes to heap
./cache_test.go:1016: t.common escapes to heap
./cache_test.go:1016: "uint8 is not 3:" escapes to heap
./cache_test.go:1006: TestDecrementUint8 ... argument does not escape
./cache_test.go:1009: TestDecrementUint8 ... argument does not escape
./cache_test.go:1013: TestDecrementUint8 ... argument does not escape
./cache_test.go:1016: TestDecrementUint8 ... argument does not escape
./cache_test.go:1022: uint16(5) escapes to heap
./cache_test.go:1025: t.common escapes to heap
./cache_test.go:1020: leaking param: t
./cache_test.go:1025: "Error decrementing:" escapes to heap
./cache_test.go:1025: err escapes to heap
./cache_test.go:1028: t.common escapes to heap
./cache_test.go:1028: "Returned number is not 3:" escapes to heap
./cache_test.go:1028: n escapes to heap
./cache_test.go:1032: t.common escapes to heap
./cache_test.go:1032: "uint16 was not found" escapes to heap
./cache_test.go:1035: t.common escapes to heap
./cache_test.go:1035: "uint16 is not 3:" escapes to heap
./cache_test.go:1025: TestDecrementUint16 ... argument does not escape
./cache_test.go:1028: TestDecrementUint16 ... argument does not escape
./cache_test.go:1032: TestDecrementUint16 ... argument does not escape
./cache_test.go:1035: TestDecrementUint16 ... argument does not escape
./cache_test.go:1041: uint32(5) escapes to heap
./cache_test.go:1044: t.common escapes to heap
./cache_test.go:1039: leaking param: t
./cache_test.go:1044: "Error decrementing:" escapes to heap
./cache_test.go:1044: err escapes to heap
./cache_test.go:1047: t.common escapes to heap
./cache_test.go:1047: "Returned number is not 3:" escapes to heap
./cache_test.go:1047: n escapes to heap
./cache_test.go:1051: t.common escapes to heap
./cache_test.go:1051: "uint32 was not found" escapes to heap
./cache_test.go:1054: t.common escapes to heap
./cache_test.go:1054: "uint32 is not 3:" escapes to heap
./cache_test.go:1044: TestDecrementUint32 ... argument does not escape
./cache_test.go:1047: TestDecrementUint32 ... argument does not escape
./cache_test.go:1051: TestDecrementUint32 ... argument does not escape
./cache_test.go:1054: TestDecrementUint32 ... argument does not escape
./cache_test.go:1060: uint64(5) escapes to heap
./cache_test.go:1063: t.common escapes to heap
./cache_test.go:1058: leaking param: t
./cache_test.go:1063: "Error decrementing:" escapes to heap
./cache_test.go:1063: err escapes to heap
./cache_test.go:1066: t.common escapes to heap
./cache_test.go:1066: "Returned number is not 3:" escapes to heap
./cache_test.go:1066: n escapes to heap
./cache_test.go:1070: t.common escapes to heap
./cache_test.go:1070: "uint64 was not found" escapes to heap
./cache_test.go:1073: t.common escapes to heap
./cache_test.go:1073: "uint64 is not 3:" escapes to heap
./cache_test.go:1063: TestDecrementUint64 ... argument does not escape
./cache_test.go:1066: TestDecrementUint64 ... argument does not escape
./cache_test.go:1070: TestDecrementUint64 ... argument does not escape
./cache_test.go:1073: TestDecrementUint64 ... argument does not escape
./cache_test.go:1079: float32(5) escapes to heap
./cache_test.go:1082: t.common escapes to heap
./cache_test.go:1077: leaking param: t
./cache_test.go:1082: "Error decrementing:" escapes to heap
./cache_test.go:1082: err escapes to heap
./cache_test.go:1085: t.common escapes to heap
./cache_test.go:1085: "Returned number is not 3:" escapes to heap
./cache_test.go:1085: n escapes to heap
./cache_test.go:1089: t.common escapes to heap
./cache_test.go:1089: "float32 was not found" escapes to heap
./cache_test.go:1092: t.common escapes to heap
./cache_test.go:1092: "float32 is not 3:" escapes to heap
./cache_test.go:1082: TestDecrementFloat32 ... argument does not escape
./cache_test.go:1085: TestDecrementFloat32 ... argument does not escape
./cache_test.go:1089: TestDecrementFloat32 ... argument does not escape
./cache_test.go:1092: TestDecrementFloat32 ... argument does not escape
./cache_test.go:1098: float64(5) escapes to heap
./cache_test.go:1101: t.common escapes to heap
./cache_test.go:1096: leaking param: t
./cache_test.go:1101: "Error decrementing:" escapes to heap
./cache_test.go:1101: err escapes to heap
./cache_test.go:1104: t.common escapes to heap
./cache_test.go:1104: "Returned number is not 3:" escapes to heap
./cache_test.go:1104: n escapes to heap
./cache_test.go:1108: t.common escapes to heap
./cache_test.go:1108: "float64 was not found" escapes to heap
./cache_test.go:1111: t.common escapes to heap
./cache_test.go:1111: "float64 is not 3:" escapes to heap
./cache_test.go:1101: TestDecrementFloat64 ... argument does not escape
./cache_test.go:1104: TestDecrementFloat64 ... argument does not escape
./cache_test.go:1108: TestDecrementFloat64 ... argument does not escape
./cache_test.go:1111: TestDecrementFloat64 ... argument does not escape
./cache_test.go:1117: "bar" escapes to heap
./cache_test.go:1119: t.common escapes to heap
./cache_test.go:1115: leaking param: t
./cache_test.go:1119: "Couldn't add foo even though it shouldn't exist" escapes to heap
./cache_test.go:1121: "baz" escapes to heap
./cache_test.go:1123: t.common escapes to heap
./cache_test.go:1123: "Successfully added another foo when it should have returned an error" escapes to heap
./cache_test.go:1119: TestAdd ... argument does not escape
./cache_test.go:1123: TestAdd ... argument does not escape
./cache_test.go:1129: "bar" escapes to heap
./cache_test.go:1131: t.common escapes to heap
./cache_test.go:1127: leaking param: t
./cache_test.go:1131: "Replaced foo when it shouldn't exist" escapes to heap
./cache_test.go:1133: "bar" escapes to heap
./cache_test.go:1134: "bar" escapes to heap
./cache_test.go:1136: t.common escapes to heap
./cache_test.go:1136: "Couldn't replace existing key foo" escapes to heap
./cache_test.go:1131: TestReplace ... argument does not escape
./cache_test.go:1136: TestReplace ... argument does not escape
./cache_test.go:1142: "bar" escapes to heap
./cache_test.go:1146: t.common escapes to heap
./cache_test.go:1140: leaking param: t
./cache_test.go:1146: "foo was found, but it should have been deleted" escapes to heap
./cache_test.go:1149: t.common escapes to heap
./cache_test.go:1149: "x is not nil:" escapes to heap
./cache_test.go:1146: TestDelete ... argument does not escape
./cache_test.go:1149: TestDelete ... argument does not escape
./cache_test.go:1155: "1" escapes to heap
./cache_test.go:1156: "2" escapes to heap
./cache_test.go:1157: "3" escapes to heap
./cache_test.go:1159: t.common escapes to heap
./cache_test.go:1153: leaking param: t
./cache_test.go:1159: n escapes to heap
./cache_test.go:1159: TestItemCount ... argument does not escape
./cache_test.go:1165: "bar" escapes to heap
./cache_test.go:1166: "yes" escapes to heap
./cache_test.go:1170: t.common escapes to heap
./cache_test.go:1163: leaking param: t
./cache_test.go:1170: "foo was found, but it should have been deleted" escapes to heap
./cache_test.go:1173: t.common escapes to heap
./cache_test.go:1173: "x is not nil:" escapes to heap
./cache_test.go:1177: t.common escapes to heap
./cache_test.go:1177: "baz was found, but it should have been deleted" escapes to heap
./cache_test.go:1180: t.common escapes to heap
./cache_test.go:1180: "x is not nil:" escapes to heap
./cache_test.go:1170: TestFlush ... argument does not escape
./cache_test.go:1173: TestFlush ... argument does not escape
./cache_test.go:1177: TestFlush ... argument does not escape
./cache_test.go:1180: TestFlush ... argument does not escape
./cache_test.go:1186: int8(127) escapes to heap
./cache_test.go:1189: t.common escapes to heap
./cache_test.go:1184: leaking param: t
./cache_test.go:1189: "Error incrementing int8:" escapes to heap
./cache_test.go:1189: err escapes to heap
./cache_test.go:1194: t.common escapes to heap
./cache_test.go:1194: "int8 did not overflow as expected; value:" escapes to heap
./cache_test.go:1194: int8 escapes to heap
./cache_test.go:1189: TestIncrementOverflowInt ... argument does not escape
./cache_test.go:1194: TestIncrementOverflowInt ... argument does not escape
./cache_test.go:1201: uint8(255) escapes to heap
./cache_test.go:1204: t.common escapes to heap
./cache_test.go:1199: leaking param: t
./cache_test.go:1204: "Error incrementing int8:" escapes to heap
./cache_test.go:1204: err escapes to heap
./cache_test.go:1209: t.common escapes to heap
./cache_test.go:1209: "uint8 did not overflow as expected; value:" escapes to heap
./cache_test.go:1209: uint8 escapes to heap
./cache_test.go:1204: TestIncrementOverflowUint ... argument does not escape
./cache_test.go:1209: TestIncrementOverflowUint ... argument does not escape
./cache_test.go:1215: uint8(0) escapes to heap
./cache_test.go:1218: t.common escapes to heap
./cache_test.go:1213: leaking param: t
./cache_test.go:1218: "Error decrementing int8:" escapes to heap
./cache_test.go:1218: err escapes to heap
./cache_test.go:1223: t.common escapes to heap
./cache_test.go:1223: "uint8 did not underflow as expected; value:" escapes to heap
./cache_test.go:1223: uint8 escapes to heap
./cache_test.go:1218: TestDecrementUnderflowUint ... argument does not escape
./cache_test.go:1223: TestDecrementUnderflowUint ... argument does not escape
./cache_test.go:1229: 3 escapes to heap
./cache_test.go:1231: t.common escapes to heap
./cache_test.go:1227: leaking param: t
./cache_test.go:1231: "tc.onEvicted is not nil" escapes to heap
./cache_test.go:1234: func literal escapes to heap
./cache_test.go:1234: func literal escapes to heap
./cache_test.go:1236: &works escapes to heap
./cache_test.go:1233: moved to heap: works
./cache_test.go:1243: t.common escapes to heap
./cache_test.go:1243: "works bool not true" escapes to heap
./cache_test.go:1246: t.common escapes to heap
./cache_test.go:1246: "bar was not 4" escapes to heap
./cache_test.go:1238: 4 escapes to heap
./cache_test.go:1231: TestOnEvicted ... argument does not escape
./cache_test.go:1243: TestOnEvicted ... argument does not escape
./cache_test.go:1246: TestOnEvicted ... argument does not escape
./cache_test.go:1234: TestOnEvicted.func1 k does not escape
./cache_test.go:1234: TestOnEvicted.func1 v does not escape
./cache_test.go:1259: leaking param content: tc
./cache_test.go:1260: "a" escapes to heap
./cache_test.go:1261: "b" escapes to heap
./cache_test.go:1262: "c" escapes to heap
./cache_test.go:1263: "foo" escapes to heap
./cache_test.go:1264: &TestStruct literal escapes to heap
./cache_test.go:1264: &TestStruct literal escapes to heap
./cache_test.go:1265: []TestStruct literal escapes to heap
./cache_test.go:1265: []TestStruct literal escapes to heap
./cache_test.go:1269: []*TestStruct literal escapes to heap
./cache_test.go:1270: &TestStruct literal escapes to heap
./cache_test.go:1271: &TestStruct literal escapes to heap
./cache_test.go:1269: []*TestStruct literal escapes to heap
./cache_test.go:1278: &TestStruct literal escapes to heap
./cache_test.go:1278: &TestStruct literal escapes to heap
./cache_test.go:1276: &TestStruct literal escapes to heap
./cache_test.go:1277: &TestStruct literal escapes to heap
./cache_test.go:1275: []*TestStruct literal escapes to heap
./cache_test.go:1282: fp escapes to heap
./cache_test.go:1281: &bytes.Buffer literal escapes to heap
./cache_test.go:1284: t.common escapes to heap
./cache_test.go:1259: leaking param: t
./cache_test.go:1284: "Couldn't save cache to fp:" escapes to heap
./cache_test.go:1284: err escapes to heap
./cache_test.go:1288: fp escapes to heap
./cache_test.go:1290: t.common escapes to heap
./cache_test.go:1290: "Couldn't load cache from fp:" escapes to heap
./cache_test.go:1290: err escapes to heap
./cache_test.go:1295: t.common escapes to heap
./cache_test.go:1295: "a was not found" escapes to heap
./cache_test.go:1298: t.common escapes to heap
./cache_test.go:1298: "a is not a" escapes to heap
./cache_test.go:1303: t.common escapes to heap
./cache_test.go:1303: "b was not found" escapes to heap
./cache_test.go:1306: t.common escapes to heap
./cache_test.go:1306: "b is not b" escapes to heap
./cache_test.go:1311: t.common escapes to heap
./cache_test.go:1311: "c was not found" escapes to heap
./cache_test.go:1314: t.common escapes to heap
./cache_test.go:1314: "c is not c" escapes to heap
./cache_test.go:1320: t.common escapes to heap
./cache_test.go:1320: "expired was found" escapes to heap
./cache_test.go:1325: t.common escapes to heap
./cache_test.go:1325: "*struct was not found" escapes to heap
./cache_test.go:1328: t.common escapes to heap
./cache_test.go:1328: "*struct.Num is not 1" escapes to heap
./cache_test.go:1333: t.common escapes to heap
./cache_test.go:1333: "[]struct was not found" escapes to heap
./cache_test.go:1337: t.common escapes to heap
./cache_test.go:1337: "Length of s2r is not 2" escapes to heap
./cache_test.go:1340: t.common escapes to heap
./cache_test.go:1340: "s2r[0].Num is not 2" escapes to heap
./cache_test.go:1343: t.common escapes to heap
./cache_test.go:1343: "s2r[1].Num is not 3" escapes to heap
./cache_test.go:1348: t.common escapes to heap
./cache_test.go:1348: "[]*struct was not found" escapes to heap
./cache_test.go:1352: t.common escapes to heap
./cache_test.go:1352: "Length of s3r is not 2" escapes to heap
./cache_test.go:1355: t.common escapes to heap
./cache_test.go:1355: "s3r[0].Num is not 4" escapes to heap
./cache_test.go:1358: t.common escapes to heap
./cache_test.go:1358: "s3r[1].Num is not 5" escapes to heap
./cache_test.go:1363: t.common escapes to heap
./cache_test.go:1363: "structception was not found" escapes to heap
./cache_test.go:1367: t.common escapes to heap
./cache_test.go:1367: "Length of s4r.Children is not 2" escapes to heap
./cache_test.go:1370: t.common escapes to heap
./cache_test.go:1370: "s4r.Children[0].Num is not 6174" escapes to heap
./cache_test.go:1373: t.common escapes to heap
./cache_test.go:1373: "s4r.Children[1].Num is not 4716" escapes to heap
./cache_test.go:1284: testFillAndSerialize ... argument does not escape
./cache_test.go:1290: testFillAndSerialize ... argument does not escape
./cache_test.go:1295: testFillAndSerialize ... argument does not escape
./cache_test.go:1298: testFillAndSerialize ... argument does not escape
./cache_test.go:1303: testFillAndSerialize ... argument does not escape
./cache_test.go:1306: testFillAndSerialize ... argument does not escape
./cache_test.go:1311: testFillAndSerialize ... argument does not escape
./cache_test.go:1314: testFillAndSerialize ... argument does not escape
./cache_test.go:1320: testFillAndSerialize ... argument does not escape
./cache_test.go:1325: testFillAndSerialize ... argument does not escape
./cache_test.go:1328: testFillAndSerialize ... argument does not escape
./cache_test.go:1333: testFillAndSerialize ... argument does not escape
./cache_test.go:1337: testFillAndSerialize ... argument does not escape
./cache_test.go:1340: testFillAndSerialize ... argument does not escape
./cache_test.go:1343: testFillAndSerialize ... argument does not escape
./cache_test.go:1348: testFillAndSerialize ... argument does not escape
./cache_test.go:1352: testFillAndSerialize ... argument does not escape
./cache_test.go:1355: testFillAndSerialize ... argument does not escape
./cache_test.go:1358: testFillAndSerialize ... argument does not escape
./cache_test.go:1363: testFillAndSerialize ... argument does not escape
./cache_test.go:1367: testFillAndSerialize ... argument does not escape
./cache_test.go:1370: testFillAndSerialize ... argument does not escape
./cache_test.go:1373: testFillAndSerialize ... argument does not escape
./cache_test.go:1250: leaking param: t
./cache_test.go:1379: "a" escapes to heap
./cache_test.go:1380: "b" escapes to heap
./cache_test.go:1383: t.common escapes to heap
./cache_test.go:1377: leaking param: t
./cache_test.go:1383: "Couldn't create cache file:" escapes to heap
./cache_test.go:1383: err escapes to heap
./cache_test.go:1390: "aa" escapes to heap
./cache_test.go:1393: t.common escapes to heap
./cache_test.go:1393: err escapes to heap
./cache_test.go:1397: t.common escapes to heap
./cache_test.go:1397: "a was not found" escapes to heap
./cache_test.go:1402: t.common escapes to heap
./cache_test.go:1402: "a was overwritten" escapes to heap
./cache_test.go:1404: t.common escapes to heap
./cache_test.go:1404: "a is not aa" escapes to heap
./cache_test.go:1409: t.common escapes to heap
./cache_test.go:1409: "b was not found" escapes to heap
./cache_test.go:1412: t.common escapes to heap
./cache_test.go:1412: "b is not b" escapes to heap
./cache_test.go:1383: TestFileSerialization ... argument does not escape
./cache_test.go:1393: TestFileSerialization ... argument does not escape
./cache_test.go:1397: TestFileSerialization ... argument does not escape
./cache_test.go:1402: TestFileSerialization ... argument does not escape
./cache_test.go:1404: TestFileSerialization ... argument does not escape
./cache_test.go:1409: TestFileSerialization ... argument does not escape
./cache_test.go:1412: TestFileSerialization ... argument does not escape
./cache_test.go:1420: ch escapes to heap
./cache_test.go:1418: make(chan bool, 1) escapes to heap
./cache_test.go:1422: fp escapes to heap
./cache_test.go:1421: &bytes.Buffer literal escapes to heap
./cache_test.go:1424: t.common escapes to heap
./cache_test.go:1416: leaking param: t
./cache_test.go:1424: "Error from Save was not gob NewTypeObject can't handle type chan bool:" escapes to heap
./cache_test.go:1424: err escapes to heap
./cache_test.go:1424: TestSerializeUnserializable ... argument does not escape
./cache_test.go:1443: "bar" escapes to heap
./cache_test.go:1440: benchmarkCacheGet b does not escape
./cache_test.go:1428: BenchmarkCacheGetExpiring b does not escape
./cache_test.go:1432: BenchmarkCacheGetNotExpiring b does not escape
./cache_test.go:1460: mu escapes to heap
./cache_test.go:1457: moved to heap: mu
./cache_test.go:1462: mu escapes to heap
./cache_test.go:1452: BenchmarkRWMutexMapGet b does not escape
./cache_test.go:1454: BenchmarkRWMutexMapGet map[string]string literal does not escape
./cache_test.go:1470: s escapes to heap
./cache_test.go:1475: mu escapes to heap
./cache_test.go:1472: moved to heap: mu
./cache_test.go:1477: mu escapes to heap
./cache_test.go:1466: BenchmarkRWMutexInterfaceMapGetStruct b does not escape
./cache_test.go:1469: BenchmarkRWMutexInterfaceMapGetStruct map[interface {}]string literal does not escape
./cache_test.go:1476: BenchmarkRWMutexInterfaceMapGetStruct s does not escape
./cache_test.go:1484: "foo" escapes to heap
./cache_test.go:1489: mu escapes to heap
./cache_test.go:1486: moved to heap: mu
./cache_test.go:1491: mu escapes to heap
./cache_test.go:1481: BenchmarkRWMutexInterfaceMapGetString b does not escape
./cache_test.go:1483: BenchmarkRWMutexInterfaceMapGetString map[interface {}]string literal does not escape
./cache_test.go:1490: BenchmarkRWMutexInterfaceMapGetString "foo" does not escape
./cache_test.go:1506: "bar" escapes to heap
./cache_test.go:1507: new(sync.WaitGroup) escapes to heap
./cache_test.go:1513: func literal escapes to heap
./cache_test.go:1513: func literal escapes to heap
./cache_test.go:1517: leaking closure reference wg
./cache_test.go:1503: benchmarkCacheGetConcurrent b does not escape
./cache_test.go:1495: BenchmarkCacheGetConcurrentExpiring b does not escape
./cache_test.go:1499: BenchmarkCacheGetConcurrentNotExpiring b does not escape
./cache_test.go:1529: new(sync.WaitGroup) escapes to heap
./cache_test.go:1535: func literal escapes to heap
./cache_test.go:1535: func literal escapes to heap
./cache_test.go:1537: &mu escapes to heap
./cache_test.go:1528: moved to heap: mu
./cache_test.go:1525: map[string]string literal escapes to heap
./cache_test.go:1537: mu escapes to heap
./cache_test.go:1537: leaking closure reference mu
./cache_test.go:1539: mu escapes to heap
./cache_test.go:1537: leaking closure reference mu
./cache_test.go:1541: leaking closure reference wg
./cache_test.go:1523: BenchmarkRWMutexMapGetConcurrent b does not escape
./cache_test.go:1562: make([]string, n) escapes to heap
./cache_test.go:1564: "foo" + strconv.Itoa(n) escapes to heap
./cache_test.go:1566: "bar" escapes to heap
./cache_test.go:1569: new(sync.WaitGroup) escapes to heap
./cache_test.go:1572: func literal escapes to heap
./cache_test.go:1572: func literal escapes to heap
./cache_test.go:1574: &v escapes to heap
./cache_test.go:1571: moved to heap: v
./cache_test.go:1576: leaking closure reference wg
./cache_test.go:1555: benchmarkCacheGetManyConcurrent b does not escape
./cache_test.go:1547: BenchmarkCacheGetManyConcurrentExpiring b does not escape
./cache_test.go:1551: BenchmarkCacheGetManyConcurrentNotExpiring b does not escape
./cache_test.go:1596: "bar" escapes to heap
./cache_test.go:1591: benchmarkCacheSet b does not escape
./cache_test.go:1583: BenchmarkCacheSetExpiring b does not escape
./cache_test.go:1587: BenchmarkCacheSetNotExpiring b does not escape
./cache_test.go:1606: mu escapes to heap
./cache_test.go:1603: moved to heap: mu
./cache_test.go:1608: mu escapes to heap
./cache_test.go:1600: BenchmarkRWMutexMapSet b does not escape
./cache_test.go:1602: BenchmarkRWMutexMapSet map[string]string literal does not escape
./cache_test.go:1617: "bar" escapes to heap
./cache_test.go:1612: BenchmarkCacheSetDelete b does not escape
./cache_test.go:1628: mu escapes to heap
./cache_test.go:1625: moved to heap: mu
./cache_test.go:1630: mu escapes to heap
./cache_test.go:1631: mu escapes to heap
./cache_test.go:1633: mu escapes to heap
./cache_test.go:1622: BenchmarkRWMutexMapSetDelete b does not escape
./cache_test.go:1624: BenchmarkRWMutexMapSetDelete map[string]string literal does not escape
./cache_test.go:1642: tc.cache.mu escapes to heap
./cache_test.go:1643: "bar" escapes to heap
./cache_test.go:1645: tc.cache.mu escapes to heap
./cache_test.go:1637: BenchmarkCacheSetDeleteSingleLock b does not escape
./cache_test.go:1655: mu escapes to heap
./cache_test.go:1652: moved to heap: mu
./cache_test.go:1658: mu escapes to heap
./cache_test.go:1649: BenchmarkRWMutexMapSetDeleteSingleLock b does not escape
./cache_test.go:1651: BenchmarkRWMutexMapSetDeleteSingleLock map[string]string literal does not escape
./cache_test.go:1665: 0 escapes to heap
./cache_test.go:1662: BenchmarkIncrementInt b does not escape
./cache_test.go:1675: tc.cache.mu escapes to heap
./cache_test.go:1677: "bar" escapes to heap
./cache_test.go:1679: tc.cache.mu escapes to heap
./cache_test.go:1672: BenchmarkDeleteExpiredLoop b does not escape
./sharded_test.go:32: "value" escapes to heap
./sharded_test.go:29: TestShardedCache t does not escape
./sharded_test.go:47: "zquux" escapes to heap
./sharded_test.go:44: benchmarkShardedCacheGet b does not escape
./sharded_test.go:36: BenchmarkShardedCacheGetExpiring b does not escape
./sharded_test.go:40: BenchmarkShardedCacheGetNotExpiring b does not escape
./sharded_test.go:66: make([]string, n) escapes to heap
./sharded_test.go:68: "foo" + strconv.Itoa(n) escapes to heap
./sharded_test.go:70: "bar" escapes to heap
./sharded_test.go:73: new(sync.WaitGroup) escapes to heap
./sharded_test.go:76: func literal escapes to heap
./sharded_test.go:76: func literal escapes to heap
./sharded_test.go:78: &v escapes to heap
./sharded_test.go:75: moved to heap: v
./sharded_test.go:80: leaking closure reference wg
./sharded_test.go:62: benchmarkShardedCacheGetManyConcurrent b does not escape
./sharded_test.go:54: BenchmarkShardedCacheGetManyConcurrentExpiring b does not escape
./sharded_test.go:58: BenchmarkShardedCacheGetManyConcurrentNotExpiring b does not escape
<autogenerated>:1: (*Item).Expired .this does not escape
<autogenerated>:2: leaking param: .this
<autogenerated>:2: leaking param: k
<autogenerated>:2: leaking param: x
<autogenerated>:3: leaking param: k
<autogenerated>:3: leaking param: x
<autogenerated>:3: Cache.set .this does not escape
<autogenerated>:4: leaking param: .this
<autogenerated>:4: leaking param: k
<autogenerated>:4: leaking param: x
<autogenerated>:5: leaking param: .this
<autogenerated>:5: leaking param: k
<autogenerated>:5: leaking param: x
<autogenerated>:6: leaking param: .this
<autogenerated>:6: Cache.Get k does not escape
<autogenerated>:7: Cache.get .this does not escape
<autogenerated>:7: Cache.get k does not escape
<autogenerated>:8: leaking param: .this
<autogenerated>:8: leaking param: k
<autogenerated>:9: leaking param: .this
<autogenerated>:9: leaking param: k
<autogenerated>:10: leaking param: .this
<autogenerated>:10: leaking param: k
<autogenerated>:11: leaking param: .this
<autogenerated>:11: leaking param: k
<autogenerated>:12: leaking param: .this
<autogenerated>:12: leaking param: k
<autogenerated>:13: leaking param: .this
<autogenerated>:13: leaking param: k
<autogenerated>:14: leaking param: .this
<autogenerated>:14: leaking param: k
<autogenerated>:15: leaking param: .this
<autogenerated>:15: leaking param: k
<autogenerated>:16: leaking param: .this
<autogenerated>:16: leaking param: k
<autogenerated>:17: leaking param: .this
<autogenerated>:17: leaking param: k
<autogenerated>:18: leaking param: .this
<autogenerated>:18: leaking param: k
<autogenerated>:19: leaking param: .this
<autogenerated>:19: leaking param: k
<autogenerated>:20: leaking param: .this
<autogenerated>:20: leaking param: k
<autogenerated>:21: leaking param: .this
<autogenerated>:21: leaking param: k
<autogenerated>:22: leaking param: .this
<autogenerated>:22: leaking param: k
<autogenerated>:23: leaking param: .this
<autogenerated>:23: leaking param: k
<autogenerated>:24: leaking param: .this
<autogenerated>:24: leaking param: k
<autogenerated>:25: leaking param: .this
<autogenerated>:25: leaking param: k
<autogenerated>:26: leaking param: .this
<autogenerated>:26: leaking param: k
<autogenerated>:27: leaking param: .this
<autogenerated>:27: leaking param: k
<autogenerated>:28: leaking param: .this
<autogenerated>:28: leaking param: k
<autogenerated>:29: leaking param: .this
<autogenerated>:29: leaking param: k
<autogenerated>:30: leaking param: .this
<autogenerated>:30: leaking param: k
<autogenerated>:31: leaking param: .this
<autogenerated>:31: leaking param: k
<autogenerated>:32: leaking param: .this
<autogenerated>:32: leaking param: k
<autogenerated>:33: leaking param: .this
<autogenerated>:33: leaking param: k
<autogenerated>:34: leaking param: .this
<autogenerated>:34: leaking param: k
<autogenerated>:35: leaking param: .this
<autogenerated>:35: leaking param: k
<autogenerated>:36: leaking param: .this
<autogenerated>:36: leaking param: k
<autogenerated>:37: leaking param: .this
<autogenerated>:37: leaking param: k
<autogenerated>:38: leaking param: .this
<autogenerated>:38: leaking param: k
<autogenerated>:39: inlining call to (*cache).delete
<autogenerated>:39: Cache.delete .this does not escape
<autogenerated>:39: Cache.delete k does not escape
<autogenerated>:40: leaking param: .this
<autogenerated>:41: leaking param: .this
<autogenerated>:41: leaking param: f
<autogenerated>:42: leaking param: .this
<autogenerated>:42: leaking param: w
<autogenerated>:43: leaking param: .this
<autogenerated>:43: leaking param: fname
<autogenerated>:44: leaking param: .this
<autogenerated>:44: leaking param: r
<autogenerated>:45: leaking param: .this
<autogenerated>:45: leaking param: fname
<autogenerated>:46: leaking param: .this
<autogenerated>:47: leaking param: .this
<autogenerated>:48: leaking param: .this
<autogenerated>:49: (*Cache).Set .this does not escape
<autogenerated>:49: (*Cache).Set k does not escape
<autogenerated>:49: (*Cache).Set x does not escape
<autogenerated>:50: (*Cache).set .this does not escape
<autogenerated>:50: (*Cache).set k does not escape
<autogenerated>:50: (*Cache).set x does not escape
<autogenerated>:51: (*Cache).Add .this does not escape
<autogenerated>:51: (*Cache).Add k does not escape
<autogenerated>:51: (*Cache).Add x does not escape
<autogenerated>:52: (*Cache).Replace .this does not escape
<autogenerated>:52: (*Cache).Replace k does not escape
<autogenerated>:52: (*Cache).Replace x does not escape
<autogenerated>:53: (*Cache).Get .this does not escape
<autogenerated>:53: (*Cache).Get k does not escape
<autogenerated>:54: (*Cache).get .this does not escape
<autogenerated>:54: (*Cache).get k does not escape
<autogenerated>:55: (*Cache).Increment .this does not escape
<autogenerated>:55: (*Cache).Increment k does not escape
<autogenerated>:56: (*Cache).IncrementFloat .this does not escape
<autogenerated>:56: (*Cache).IncrementFloat k does not escape
<autogenerated>:57: (*Cache).IncrementInt .this does not escape
<autogenerated>:57: (*Cache).IncrementInt k does not escape
<autogenerated>:58: (*Cache).IncrementInt8 .this does not escape
<autogenerated>:58: (*Cache).IncrementInt8 k does not escape
<autogenerated>:59: (*Cache).IncrementInt16 .this does not escape
<autogenerated>:59: (*Cache).IncrementInt16 k does not escape
<autogenerated>:60: (*Cache).IncrementInt32 .this does not escape
<autogenerated>:60: (*Cache).IncrementInt32 k does not escape
<autogenerated>:61: (*Cache).IncrementInt64 .this does not escape
<autogenerated>:61: (*Cache).IncrementInt64 k does not escape
<autogenerated>:62: (*Cache).IncrementUint .this does not escape
<autogenerated>:62: (*Cache).IncrementUint k does not escape
<autogenerated>:63: (*Cache).IncrementUintptr .this does not escape
<autogenerated>:63: (*Cache).IncrementUintptr k does not escape
<autogenerated>:64: (*Cache).IncrementUint8 .this does not escape
<autogenerated>:64: (*Cache).IncrementUint8 k does not escape
<autogenerated>:65: (*Cache).IncrementUint16 .this does not escape
<autogenerated>:65: (*Cache).IncrementUint16 k does not escape
<autogenerated>:66: (*Cache).IncrementUint32 .this does not escape
<autogenerated>:66: (*Cache).IncrementUint32 k does not escape
<autogenerated>:67: (*Cache).IncrementUint64 .this does not escape
<autogenerated>:67: (*Cache).IncrementUint64 k does not escape
<autogenerated>:68: (*Cache).IncrementFloat32 .this does not escape
<autogenerated>:68: (*Cache).IncrementFloat32 k does not escape
<autogenerated>:69: (*Cache).IncrementFloat64 .this does not escape
<autogenerated>:69: (*Cache).IncrementFloat64 k does not escape
<autogenerated>:70: (*Cache).Decrement .this does not escape
<autogenerated>:70: (*Cache).Decrement k does not escape
<autogenerated>:71: (*Cache).DecrementFloat .this does not escape
<autogenerated>:71: (*Cache).DecrementFloat k does not escape
<autogenerated>:72: (*Cache).DecrementInt .this does not escape
<autogenerated>:72: (*Cache).DecrementInt k does not escape
<autogenerated>:73: (*Cache).DecrementInt8 .this does not escape
<autogenerated>:73: (*Cache).DecrementInt8 k does not escape
<autogenerated>:74: (*Cache).DecrementInt16 .this does not escape
<autogenerated>:74: (*Cache).DecrementInt16 k does not escape
<autogenerated>:75: (*Cache).DecrementInt32 .this does not escape
<autogenerated>:75: (*Cache).DecrementInt32 k does not escape
<autogenerated>:76: (*Cache).DecrementInt64 .this does not escape
<autogenerated>:76: (*Cache).DecrementInt64 k does not escape
<autogenerated>:77: (*Cache).DecrementUint .this does not escape
<autogenerated>:77: (*Cache).DecrementUint k does not escape
<autogenerated>:78: (*Cache).DecrementUintptr .this does not escape
<autogenerated>:78: (*Cache).DecrementUintptr k does not escape
<autogenerated>:79: (*Cache).DecrementUint8 .this does not escape
<autogenerated>:79: (*Cache).DecrementUint8 k does not escape
<autogenerated>:80: (*Cache).DecrementUint16 .this does not escape
<autogenerated>:80: (*Cache).DecrementUint16 k does not escape
<autogenerated>:81: (*Cache).DecrementUint32 .this does not escape
<autogenerated>:81: (*Cache).DecrementUint32 k does not escape
<autogenerated>:82: (*Cache).DecrementUint64 .this does not escape
<autogenerated>:82: (*Cache).DecrementUint64 k does not escape
<autogenerated>:83: (*Cache).DecrementFloat32 .this does not escape
<autogenerated>:83: (*Cache).DecrementFloat32 k does not escape
<autogenerated>:84: (*Cache).DecrementFloat64 .this does not escape
<autogenerated>:84: (*Cache).DecrementFloat64 k does not escape
<autogenerated>:85: (*Cache).Delete .this does not escape
<autogenerated>:85: (*Cache).Delete k does not escape
<autogenerated>:86: (*Cache).delete .this does not escape
<autogenerated>:86: (*Cache).delete k does not escape
<autogenerated>:87: (*Cache).DeleteExpired .this does not escape
<autogenerated>:88: (*Cache).OnEvicted .this does not escape
<autogenerated>:88: (*Cache).OnEvicted f does not escape
<autogenerated>:89: (*Cache).Save .this does not escape
<autogenerated>:89: (*Cache).Save w does not escape
<autogenerated>:90: (*Cache).SaveFile .this does not escape
<autogenerated>:90: (*Cache).SaveFile fname does not escape
<autogenerated>:91: (*Cache).Load .this does not escape
<autogenerated>:91: (*Cache).Load r does not escape
<autogenerated>:92: (*Cache).LoadFile .this does not escape
<autogenerated>:92: (*Cache).LoadFile fname does not escape
<autogenerated>:93: (*Cache).Items .this does not escape
<autogenerated>:94: (*Cache).ItemCount .this does not escape
<autogenerated>:95: (*Cache).Flush .this does not escape
<autogenerated>:96: leaking param: .this to result ~r1 level=2
<autogenerated>:96: unexportedShardedCache.bucket k does not escape
<autogenerated>:97: leaking param content: .this
<autogenerated>:97: leaking param: k
<autogenerated>:97: leaking param: x
<autogenerated>:98: leaking param content: .this
<autogenerated>:98: leaking param: k
<autogenerated>:98: leaking param: x
<autogenerated>:99: leaking param content: .this
<autogenerated>:99: leaking param: k
<autogenerated>:99: leaking param: x
<autogenerated>:100: leaking param content: .this
<autogenerated>:100: unexportedShardedCache.Get k does not escape
<autogenerated>:101: leaking param content: .this
<autogenerated>:101: leaking param: k
<autogenerated>:102: leaking param content: .this
<autogenerated>:102: leaking param: k
<autogenerated>:103: leaking param content: .this
<autogenerated>:103: leaking param: k
<autogenerated>:104: leaking param content: .this
<autogenerated>:104: leaking param: k
<autogenerated>:105: leaking param content: .this
<autogenerated>:106: leaking param content: .this
<autogenerated>:107: leaking param content: .this
<autogenerated>:108: (*unexportedShardedCache).bucket .this does not escape
<autogenerated>:108: (*unexportedShardedCache).bucket k does not escape
<autogenerated>:109: (*unexportedShardedCache).Set .this does not escape
<autogenerated>:109: (*unexportedShardedCache).Set k does not escape
<autogenerated>:109: (*unexportedShardedCache).Set x does not escape
<autogenerated>:110: (*unexportedShardedCache).Add .this does not escape
<autogenerated>:110: (*unexportedShardedCache).Add k does not escape
<autogenerated>:110: (*unexportedShardedCache).Add x does not escape
<autogenerated>:111: (*unexportedShardedCache).Replace .this does not escape
<autogenerated>:111: (*unexportedShardedCache).Replace k does not escape
<autogenerated>:111: (*unexportedShardedCache).Replace x does not escape
<autogenerated>:112: (*unexportedShardedCache).Get .this does not escape
<autogenerated>:112: (*unexportedShardedCache).Get k does not escape
<autogenerated>:113: (*unexportedShardedCache).Increment .this does not escape
<autogenerated>:113: (*unexportedShardedCache).Increment k does not escape
<autogenerated>:114: (*unexportedShardedCache).IncrementFloat .this does not escape
<autogenerated>:114: (*unexportedShardedCache).IncrementFloat k does not escape
<autogenerated>:115: (*unexportedShardedCache).Decrement .this does not escape
<autogenerated>:115: (*unexportedShardedCache).Decrement k does not escape
<autogenerated>:116: (*unexportedShardedCache).Delete .this does not escape
<autogenerated>:116: (*unexportedShardedCache).Delete k does not escape
<autogenerated>:117: (*unexportedShardedCache).DeleteExpired .this does not escape
<autogenerated>:118: (*unexportedShardedCache).Items .this does not escape
<autogenerated>:119: (*unexportedShardedCache).Flush .this does not escape
<autogenerated>:120: leaking param: io.p
<autogenerated>:120: leaking param: .this
<autogenerated>:121: leaking param: io.p
<autogenerated>:121: leaking param: .this
# testmain
/var/folders/z4/vplvdvkx6fsfv7z6w8pzfqnr0000gn/T/go-build442108512/github.com/patrickmn/go-cache/_test/_testmain.go:240: inlining call to testing.MainStart
/var/folders/z4/vplvdvkx6fsfv7z6w8pzfqnr0000gn/T/go-build442108512/github.com/patrickmn/go-cache/_test/_testmain.go:225: leaking param: pat
/var/folders/z4/vplvdvkx6fsfv7z6w8pzfqnr0000gn/T/go-build442108512/github.com/patrickmn/go-cache/_test/_testmain.go:225: leaking param: str
/var/folders/z4/vplvdvkx6fsfv7z6w8pzfqnr0000gn/T/go-build442108512/github.com/patrickmn/go-cache/_test/_testmain.go:240: main &testing.M literal does not escape
BenchmarkCacheGetExpiring-4   30000000        44.3 ns/op
PASS



Alan Donovan

unread,
Aug 27, 2016, 8:44:07 AM8/27/16
to Peng Gao, golang-nuts
On 27 August 2016 at 00:21, Peng Gao <peng.g...@gmail.com> wrote:
 Is there any good for complier or is just a simplification?   

It doesn't change the escape aspects of this code, but it makes the program smaller and thus easier to read and possibly faster.


 Sorry, I made a wrong description about Get, in fact cache2 implementation is like 
...
return &item.Object

Ah, that changes everything.  You are returning a pointer to a part of the variable item, so the compiler must allocate that variable on the heap so that it outlives the function call.


I guess it is the compiler decide the item will be  still be referenced, so it escapes? (But in fact I just want to hold Object of it and use nil pointer to indicate not exists, I don't want to hold the item itself).

In that case, don't return a pointer, return (v int64, ok bool).  Any time you return a pointer, that is, the address of a variable, you should think about two things.  First, aliasing: for correctness, consider what would happen if the caller were to modify that variable.  Second, escaping: for performance, consider whether you just caused an additional heap allocation.

cheers
alan

Reply all
Reply to author
Forward
0 new messages