runtime: add some more asserts to the GC

Этот коммит содержится в:
Ayke van Laethem 2019-08-23 18:06:52 +02:00 коммит произвёл Ron Evans
родитель 6917faabf5
коммит 3bf2487dc5

Просмотреть файл

@ -93,6 +93,9 @@ type gcBlock uintptr
// blockFromAddr returns a block given an address somewhere in the heap (which // blockFromAddr returns a block given an address somewhere in the heap (which
// might not be heap-aligned). // might not be heap-aligned).
func blockFromAddr(addr uintptr) gcBlock { 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) return gcBlock((addr - poolStart) / bytesPerBlock)
} }
@ -113,6 +116,11 @@ func (b gcBlock) findHead() gcBlock {
for b.state() == blockStateTail { for b.state() == blockStateTail {
b-- b--
} }
if gcAsserts {
if b.state() != blockStateHead && b.state() != blockStateMark {
runtimePanic("gc: found tail without head")
}
}
return b return b
} }