boolean isSameParamSig(Function f1, Function f2) { // only concerned with parameter count and param/return storage matchup
		if (f1 == null) {
			return (f2 == null);
		}
		else if (f2 == null) {
			return false;
		}
		if (f1.hasVarArgs() != f2.hasVarArgs()) {
			return false;
		}
		Parameter[] f1Parms = f1.getParameters();
		Parameter[] f2Parms = f2.getParameters();

		if (f1Parms.length != f2Parms.length) {
			return false;
		}

		// NOTE: Parameter level merging gets really complex when the presence of auto-params are inconsistent
		// between two functions. Treat this as a signature difference when this occurs.

		for (int i = 0; i < f1Parms.length; i++) {
			if (f1Parms[i].isAutoParameter() != f2Parms[i].isAutoParameter() ||
				f1Parms[i].isForcedIndirect() != f2Parms[i].isForcedIndirect()) {
				return false;
			}
		}

		if (!f1.hasCustomVariableStorage() && !f2.hasCustomVariableStorage()) {
			return true; // don't care about specific storage
		}

		// Same param count with either f1 or f2 using custom storage - must compare the storage.

		Parameter return1 = f1.getReturn();
		Parameter return2 = f2.getReturn();
		if (return1.getLength() != return2.getLength() ||
			!return1.getVariableStorage().equals(return2.getVariableStorage())) {
			return false;
		}

		for (int i = 0; i < f1Parms.length; i++) {
			if (!f1Parms[i].getVariableStorage().equals(f2Parms[i].getVariableStorage())) {
				return false;
			}
		}
		return true;
	}
Compares the functions (Latest, Original, My) to determine if a parameter signature 
conflict exists and auto-merges any signature change if possible, otherwise 
the {@link #FUNC_SIGNATURE} conflict flag may be set for the current function
signaling the merger for later resolution and processing.
@param functions the matching set of functions from Result, Latest, My, and Original.
@param monitor the merge status monitor
@return true if signatures match and a check should be performed for parameter detail 
conflicts, otherwise false is returned and the {@link #FUNC_SIGNATURE} conflict flag
may be set for the current function
@throws CancelledException if merge has been cancelled.
Ghidra/Features/Base/src/main/java/ghidra/app/merge/listing/AbstractFunctionMerger.java