Program: 149720
Project: 149720
Buggy source:
/** 
 * This is the base constructor for <i>all</i> spaces.<p>
 * @param name The name of this space (used when printing error messages etc)
 * @param movable Are objects in this space movable?
 * @param immortal Are objects in this space immortal (uncollected)?
 * @param vmRequest An object describing the virtual memory requested.
 */
protected Space(String name,boolean movable,boolean immortal,VMRequest vmRequest){
  this.name=name;
  this.nameLength=name.length();
  this.movable=movable;
  this.immortal=immortal;
  this.vmRequest=vmRequest;
  this.index=spaceCount++;
  spaces[index]=this;
  if (vmRequest.type == VMRequest.REQUEST_DISCONTIGUOUS) {
    this.contiguous=false;
    this.descriptor=SpaceDescriptor.createDescriptor();
    this.start=Address.zero();
    this.extent=Extent.zero();
    this.lastDiscontiguousRegion=Address.zero();
    VM.memory.setHeapRange(index,HEAP_START,HEAP_END);
    return;
  }
  Address start;
  Extent extent;
  if (vmRequest.type == VMRequest.REQUEST_FRACTION) {
    extent=getFracAvailable(vmRequest.frac);
  }
 else {
    extent=vmRequest.extent;
  }
  if (extent.NE(chunkAlign(extent,false))) {
    VM.assertions.fail(name + "String_Node_Str" + extent.toLong()+ "String_Node_Str");
  }
  if (vmRequest.type == VMRequest.REQUEST_FIXED) {
    start=vmRequest.start;
    if (start.NE(chunkAlign(start,false))) {
      VM.assertions.fail(name + "String_Node_Str" + start.toLong()+ "String_Node_Str");
    }
  }
 else   if (vmRequest.top) {
    heapLimit=heapLimit.minus(extent);
    start=heapLimit;
  }
 else {
    start=heapCursor;
    heapCursor=heapCursor.plus(extent);
  }
  if (heapCursor.GT(heapLimit)) {
    Log.write("String_Node_Str");
    Log.write(name);
    Log.write("String_Node_Str");
    Log.write(heapCursor.minus(extent));
    Log.write("String_Node_Str");
    Log.write(heapCursor);
    Log.write("String_Node_Str");
    Log.write(heapLimit);
    Log.writeln("String_Node_Str");
    VM.assertions.fail("String_Node_Str");
  }
  this.contiguous=true;
  this.start=start;
  this.extent=extent;
  this.descriptor=SpaceDescriptor.createDescriptor(start,start.plus(extent));
  VM.memory.setHeapRange(index,start,start.plus(extent));
  Map.insert(start,extent,descriptor,this);
  if (DEBUG) {
    Log.write(name);
    Log.write("String_Node_Str");
    Log.write(start);
    Log.write("String_Node_Str");
    Log.write(start.plus(extent));
    Log.write("String_Node_Str");
    Log.writeln(extent.toWord());
  }
}

Fixed version (ground truth):
/** 
 * This is the base constructor for <i>all</i> spaces.<p>
 * @param name The name of this space (used when printing error messages etc)
 * @param movable Are objects in this space movable?
 * @param immortal Are objects in this space immortal (uncollected)?
 * @param vmRequest An object describing the virtual memory requested.
 */
protected Space(String name,boolean movable,boolean immortal,VMRequest vmRequest){
  this.name=name;
  this.nameLength=name.length();
  this.movable=movable;
  this.immortal=immortal;
  this.vmRequest=vmRequest;
  this.index=spaceCount++;
  spaces[index]=this;
  if (vmRequest.type == VMRequest.REQUEST_DISCONTIGUOUS) {
    this.contiguous=false;
    this.descriptor=SpaceDescriptor.createDescriptor();
    this.start=Address.zero();
    this.extent=Extent.zero();
    this.headDiscontiguousRegion=Address.zero();
    VM.memory.setHeapRange(index,HEAP_START,HEAP_END);
    return;
  }
  Address start;
  Extent extent;
  if (vmRequest.type == VMRequest.REQUEST_FRACTION) {
    extent=getFracAvailable(vmRequest.frac);
  }
 else {
    extent=vmRequest.extent;
  }
  if (extent.NE(chunkAlign(extent,false))) {
    VM.assertions.fail(name + "String_Node_Str" + extent.toLong()+ "String_Node_Str");
  }
  if (vmRequest.type == VMRequest.REQUEST_FIXED) {
    start=vmRequest.start;
    if (start.NE(chunkAlign(start,false))) {
      VM.assertions.fail(name + "String_Node_Str" + start.toLong()+ "String_Node_Str");
    }
  }
 else   if (vmRequest.top) {
    heapLimit=heapLimit.minus(extent);
    start=heapLimit;
  }
 else {
    start=heapCursor;
    heapCursor=heapCursor.plus(extent);
  }
  if (heapCursor.GT(heapLimit)) {
    Log.write("String_Node_Str");
    Log.write(name);
    Log.write("String_Node_Str");
    Log.write(heapCursor.minus(extent));
    Log.write("String_Node_Str");
    Log.write(heapCursor);
    Log.write("String_Node_Str");
    Log.write(heapLimit);
    Log.writeln("String_Node_Str");
    VM.assertions.fail("String_Node_Str");
  }
  this.contiguous=true;
  this.start=start;
  this.extent=extent;
  this.descriptor=SpaceDescriptor.createDescriptor(start,start.plus(extent));
  VM.memory.setHeapRange(index,start,start.plus(extent));
  Map.insert(start,extent,descriptor,this);
  if (DEBUG) {
    Log.write(name);
    Log.write("String_Node_Str");
    Log.write(start);
    Log.write("String_Node_Str");
    Log.write(start.plus(extent));
    Log.write("String_Node_Str");
    Log.writeln(extent.toWord());
  }
}