public Set propagateUsage() {
		used = new SimpleSet();
		used.addAll(getDeclarables());
		StructuredBlock[] subs = getSubBlocks();
		Set allUse = new SimpleSet();
		allUse.addAll(used);
		for (int i = 0; i < subs.length; i++) {
			Set childUse = subs[i].propagateUsage();
			/*
			 * All variables used in more than one sub blocks, are used in this
			 * block, too.
			 */
			Set intersection = new SimpleSet();
			intersection.addAll(childUse);
			intersection.retainAll(allUse);
			used.addAll(intersection);
			allUse.addAll(childUse);
		}
		return allUse;
	}