private ConflictResult compareFuncDef(FunctionDefinition addedFunc, FunctionDefinition existingFunc,
			Set<Long> visitedDataTypes) {
		if (doRelaxedCompare(addedFunc.getReturnType(), existingFunc.getReturnType(),
				visitedDataTypes) == RENAME_AND_ADD) {
			return RENAME_AND_ADD;
		}
		ParameterDefinition[] addedArgs = addedFunc.getArguments();
		ParameterDefinition[] existingArgs = existingFunc.getArguments();

		if (addedArgs.length != existingArgs.length) {
			return RENAME_AND_ADD;
		}

		for (int i = 0; i < addedArgs.length; i++) {
			ParameterDefinition addedParam = addedArgs[i];
			ParameterDefinition existingParam = existingArgs[i];

			if (doRelaxedCompare(addedParam.getDataType(), existingParam.getDataType(),
					visitedDataTypes) == RENAME_AND_ADD) {
				return RENAME_AND_ADD;
			}
		}

		return USE_EXISTING;
	}
Returns true if one union is a subset of another union.
<p>
Each component of the candidate partial union must be present in the 'full'
union and must be 'equiv'.
<p>
Order of components is ignored, except for unnamed components, which receive
a default name created using their ordinal position.

@param full             {@link Union} datatype that is expected to be a
                        superset of the next param.
@param part             {@link Union} datatype that is expected to be a
                        subset of the previous param.
@param visitedDataTypes identity map of datatypes to prevent loops.
@return true if part is a subset (or equal) to full.
Ghidra/Features/Base/src/main/java/ghidra/app/util/bin/format/dwarf/DWARFDataTypeConflictHandler.java