From 3bf2487dc57b489f1eaae428f61da76a65813e29 Mon Sep 17 00:00:00 2001 From: Ayke van Laethem Date: Fri, 23 Aug 2019 18:06:52 +0200 Subject: [PATCH] runtime: add some more asserts to the GC --- src/runtime/gc_conservative.go | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/runtime/gc_conservative.go b/src/runtime/gc_conservative.go index 6b5b7a5c..24e13df9 100644 --- a/src/runtime/gc_conservative.go +++ b/src/runtime/gc_conservative.go @@ -93,6 +93,9 @@ type gcBlock uintptr // blockFromAddr returns a block given an address somewhere in the heap (which // might not be heap-aligned). func blockFromAddr(addr uintptr) gcBlock { + if gcAsserts && (addr < poolStart || addr >= heapEnd) { + runtimePanic("gc: trying to get block from invalid address") + } return gcBlock((addr - poolStart) / bytesPerBlock) } @@ -113,6 +116,11 @@ func (b gcBlock) findHead() gcBlock { for b.state() == blockStateTail { b-- } + if gcAsserts { + if b.state() != blockStateHead && b.state() != blockStateMark { + runtimePanic("gc: found tail without head") + } + } return b }