Fix region space when used with SetLengthToUsableSizeVisitor.

The region space relies on obj->SizeOf for some of its logic.
By having SetLengthToUsableSizeVisitor "change" the SizeOf
what's being allocated.

The bug happens during RegionSpace::ClearFromSpace: for unevac regions
we iterate over following regions. If LiveBytes != Top() - Begin()
(which happen for large allocations using SetLengthToUsableSizeVisitor),
we break the loop.

The next region to analyze is a large tail, and we see LiveBytes() == 0
(tails apparently always have live bytes == 0), the code is then
happy to release the large tail, even though the large object is still
live.

bug: 37187694
bug: 62889232
Test: 659-unpadded-array

(cherry picked from commit 4b361a87520643c888a3d2c52dffa050fabd7a0b)

(cherry picked from commit 0436bb29ed9f9a2958454a1140259349d1659f2a)

Merged-In: Ia5c156a6969aad0b0c2ea2a4b7a0abdfa4088df6

Change-Id: I3df29d3774aca8d73238324ee6784998f8525b4f
(cherry picked from commit 69ddc6dada4bff237dbe4548b4e0b863bcc39921)
6 files changed