diff options
Diffstat (limited to 'libgo/go/runtime/gc_test.go')
-rw-r--r-- | libgo/go/runtime/gc_test.go | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/libgo/go/runtime/gc_test.go b/libgo/go/runtime/gc_test.go index 7770e499ad3..56dd93819e1 100644 --- a/libgo/go/runtime/gc_test.go +++ b/libgo/go/runtime/gc_test.go @@ -26,6 +26,7 @@ func TestGcSys(t *testing.T) { } // Should only be using a few MB. + // We allocated 100 MB or (if not short) 1 GB. runtime.ReadMemStats(memstats) if sys > memstats.Sys { sys = 0 @@ -33,7 +34,7 @@ func TestGcSys(t *testing.T) { sys = memstats.Sys - sys } t.Logf("used %d extra bytes", sys) - if sys > 4<<20 { + if sys > 16<<20 { t.Fatalf("using too much memory: %d bytes", sys) } } @@ -41,3 +42,19 @@ func TestGcSys(t *testing.T) { func workthegc() []byte { return make([]byte, 1029) } + +func TestGcDeepNesting(t *testing.T) { + type T [2][2][2][2][2][2][2][2][2][2]*int + a := new(T) + + // Prevent the compiler from applying escape analysis. + // This makes sure new(T) is allocated on heap, not on the stack. + t.Logf("%p", a) + + a[0][0][0][0][0][0][0][0][0][0] = new(int) + *a[0][0][0][0][0][0][0][0][0][0] = 13 + runtime.GC() + if *a[0][0][0][0][0][0][0][0][0][0] != 13 { + t.Fail() + } +} |