public void appendBlock(StructuredBlock block, int length) {
		SlotSet succIn = new SlotSet();
		SlotSet succKill = new SlotSet();
		VariableSet succGen = new VariableSet();
		block.fillInGenSet(succIn, succKill);
		succGen.addAll(succKill);

		if (this.block == null) {
			this.block = block;
			lastModified = block;
			block.setFlowBlock(this);
			block.fillSuccessors();
			this.length = length;

			in = succIn;
			gen = succGen;
			for (Iterator i = successors.values().iterator(); i.hasNext();) {
				SuccessorInfo info = (SuccessorInfo) i.next();
				info.gen = new VariableSet();
				info.kill = new SlotSet();
				info.gen.addAll(succGen);
				info.kill.addAll(succKill);
			}
		} else if (!(block instanceof EmptyBlock)) {
			checkConsistent();
			if ((GlobalOptions.debuggingFlags & GlobalOptions.DEBUG_FLOW) != 0) {
				GlobalOptions.err.println("appending Block: " + block);
			}

			SuccessorInfo succInfo = (SuccessorInfo) successors
					.get(NEXT_BY_ADDR);
			succIn.merge(succInfo.gen);
			succIn.removeAll(succInfo.kill);

			succGen.mergeGenKill(succInfo.gen, succKill);
			succKill.mergeKill(succInfo.kill);
			this.in.addAll(succIn);
			this.gen.addAll(succKill);

			removeSuccessor(lastModified.jump);
			lastModified.removeJump();
			lastModified = lastModified.appendBlock(block);
			block.fillSuccessors();
			succInfo = (SuccessorInfo) successors.get(NEXT_BY_ADDR);
			succInfo.gen = succGen;
			succInfo.kill = succKill;
			this.length += length;
			checkConsistent();
			doTransformations();
		}
		checkConsistent();
	}