private boolean findOverlaps(int firstUseOffset, List<Variable> variables, int index,
			List<Variable> overlapList, AddressSet overlapSet, List<Variable> nonOverlapList,
			AddressSetView intersectSet) {

		Variable var = variables.get(index);
		if (var == null) {
			return false; // already consumed
		}
		if (var.getFirstUseOffset() != firstUseOffset) {
			return false;
		}
		if (paramOnlyAddressSets && ignoreParamToParamConflicts && (var instanceof Parameter)) {
			return false;
		}

		boolean expanded = false;
		VariableStorage storage = var.getVariableStorage();
		if (storage.intersects(intersectSet)) {

			expanded |= true;
			paramOnlyAddressSets = false;

			variables.set(index, null); // avoid concurrent modification and mark as consumed
			addToAddressSet(overlapSet, storage);
			overlapList.add(var);

			// if parameter, include all parameters in same overlap list
			if (var instanceof Parameter) {
				parametersConflicted = true;
				addAllParameters(variables, overlapList, overlapSet, nonOverlapList);
			}
		}
		return expanded;
	}
Recursively expand the variable storage (set1,set2) to encompass all
variables associated with the corresponding sets (variables1,variables2) which
intersects the other set.  Any variables added to the overlap set will also be added
to the corresponding overlapList.
@param firstUseOffset first use offset or -1 for parameter
@param variables1
@param set1
@param overlapList1
@param variables2
@param set2
@param overlapList2
@param monitor
@throws CancelledException
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/util/VariableStorageConflicts.java