diff --git a/mps/code/arena.c b/mps/code/arena.c index 6e70de91537..0f182b76a13 100644 --- a/mps/code/arena.c +++ b/mps/code/arena.c @@ -949,6 +949,7 @@ Res ArenaFreeLandInsert(Arena arena, Addr base, Addr limit) Res res; AVERT(Arena, arena); + AVER(base < limit); RangeInit(&range, base, limit); res = arenaFreeLandInsertExtend(&oldRange, arena, &range); diff --git a/mps/code/land.c b/mps/code/land.c index 7a2101cc673..cac8e6e91d9 100644 --- a/mps/code/land.c +++ b/mps/code/land.c @@ -198,6 +198,7 @@ Res LandInsert(Range rangeReturn, Land land, Range range) AVERT(Land, land); AVERT(Range, range); AVER(RangeIsAligned(range, land->alignment)); + AVER(!RangeIsEmpty(range)); landEnter(land); res = (*land->class->insert)(rangeReturn, land, range); diff --git a/mps/code/tract.c b/mps/code/tract.c index 9aa815f47ba..5c4f0eb4bda 100644 --- a/mps/code/tract.c +++ b/mps/code/tract.c @@ -174,6 +174,7 @@ Res ChunkInit(Chunk chunk, Arena arena, Addr base, Addr limit, Size reserved, Count pages; Shift pageShift; Size pageTableSize; + Addr allocBase; void *p; Res res; @@ -219,12 +220,14 @@ Res ChunkInit(Chunk chunk, Arena arena, Addr base, Addr limit, Size reserved, /* Init allocTable after class init, because it might be mapped there. */ BTResRange(chunk->allocTable, 0, pages); + /* Check that there is some usable address space remaining in the chunk. */ + allocBase = PageIndexBase(chunk, chunk->allocBase); + AVER(allocBase < chunk->limit); + /* Add the chunk's free address space to the arena's freeLand, so that we can allocate from it. */ if (arena->hasFreeLand) { - res = ArenaFreeLandInsert(arena, - PageIndexBase(chunk, chunk->allocBase), - chunk->limit); + res = ArenaFreeLandInsert(arena, allocBase, chunk->limit); if (res != ResOK) goto failLandInsert; }