Index: src/pkg/runtime/gc_test.go |
=================================================================== |
--- a/src/pkg/runtime/gc_test.go |
+++ b/src/pkg/runtime/gc_test.go |
@@ -121,3 +121,31 @@ |
} |
} |
} |
+ |
+func TestGcRescan(t *testing.T) { |
+ type X struct { |
+ c chan error |
+ nextx *X |
+ } |
+ type Y struct { |
+ X |
+ nexty *Y |
+ p *int |
+ } |
+ var head *Y |
+ for i := 0; i < 10; i++ { |
+ p := &Y{} |
+ p.c = make(chan error) |
+ p.nextx = &head.X |
+ p.nexty = head |
+ p.p = new(int) |
+ *p.p = 42 |
+ head = p |
+ runtime.GC() |
+ } |
+ for p := head; p != nil; p = p.nexty { |
+ if *p.p != 42 { |
+ t.Fatal("corrupted heap") |
+ } |
+ } |
+} |