private boolean isSameParamInfo(Function f1, Function f2) {
		if (f1 == null) {
			return (f2 == null);
		}
		else if (f2 == null) {
			return false;
		}

		Parameter[] f1Parms = f1.getParameters();
		Parameter[] f2Parms = f2.getParameters();

		if (f1.hasCustomVariableStorage() || f2.hasCustomVariableStorage()) {
			f1Parms = f1.getParameters();
			f2Parms = f2.getParameters();
		}
		else {
			// if both f1 and f2 use dynamic storage only consider non-auto params
			f1Parms = f1.getParameters(VariableFilter.NONAUTO_PARAMETER_FILTER);
			f2Parms = f2.getParameters(VariableFilter.NONAUTO_PARAMETER_FILTER);
		}

		if (f1Parms.length != f2Parms.length) {
			return false;
		}
		for (int i = 0; i < f1Parms.length; i++) {
			if (!f1Parms[i].isEquivalent(f2Parms[i])) {
				return false;
			}
			if (!StringUtils.equals(f1Parms[i].getName(), f2Parms[i].getName())) {
				return false;
			}
			if (!StringUtils.equals(f1Parms[i].getComment(), f2Parms[i].getComment())) {
				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