private void removeUniqueToSymbols(Address fromAddress, TaskMonitor monitor)
			throws CancelledException {
		Address toAddress = originToResultTranslator.getAddress(fromAddress);
		Symbol[] toSymbols = toSymbolTable.getUserSymbols(toAddress);
		for (Symbol toSymbol : toSymbols) {
			Symbol fromSymbol = SimpleDiffUtility.getSymbol(toSymbol, fromProgram);
			if (fromSymbol == null) {
				if (toSymbol.getSymbolType() != SymbolType.FUNCTION) {
					toSymbolTable.removeSymbolSpecial(toSymbol);
				}
				continue;
			}
			if (fromSymbol.getSymbolType() == SymbolType.FUNCTION) {
				continue;
			}
			Namespace fromNamespace = fromSymbol.getParentNamespace();
			Namespace toNamespace = toSymbol.getParentNamespace();
			Namespace expectedToNamespace = DiffUtility.getNamespace(fromNamespace, toProgram);
			if (toNamespace != expectedToNamespace) {
				toSymbolTable.removeSymbolSpecial(toSymbol);
			}
			monitor.checkCancelled();
		}
	}
<code>removeUniqueToSymbols</code> removes all the symbols in the
destination program at the specified address that don't have the same
symbol in the source program at that address. The FUNCTION symbol will
not be removed at the address even if it is different. Otherwise, the
function would inadvertently get removed.

@param address the program address where the symbols are being replaced.
This address should be derived from the "to" program.
@param monitor the task monitor for updating user progress and allowing cancelling.

@throws CancelledException if the task monitor is cancelled.
Ghidra/Features/Base/src/main/java/ghidra/program/util/SymbolMerge.java