private void add(LocalVarEntry li) {
		LocalVarEntry prev = null;
		LocalVarEntry next = list;
		while (next != null && next.endAddr < li.startAddr) {
			prev = next;
			next = next.next;
		}
		/*
		 * prev.endAddr < li.startAddr <= next.endAddr
		 */
		if (next != null && li.endAddr >= next.startAddr) {
			if (next.type.equals(li.type) && next.name.equals(li.name)) {
				/*
				 * Same type, same name and overlapping range. This is the same
				 * local: extend next to the common range and don't add li.
				 */
				next.startAddr = Math.min(next.startAddr, li.startAddr);
				next.endAddr = Math.max(next.endAddr, li.endAddr);
				return;
			}
			GlobalOptions.err.println("warning: non disjoint locals");
		}
		li.next = next;
		if (prev == null)
			list = li;
		else
			prev.next = li;
	}