private VariableStorage checkDynamicStorageConversion(DataType returnDataType,
			Parameter[] currentParams, int paramOffset, PrototypeModel callingConvention) {
		DataType types[] = new DataType[currentParams.length - paramOffset + 1];
		types[0] = returnDataType;
		int index = 1;
		for (int i = paramOffset; i < currentParams.length; ++i) {
			types[index++] = currentParams[i].getDataType();
		}

		VariableStorage[] paramStorage =
			callingConvention.getStorageLocations(program, types, true);
// TODO: Only handles a single auto-param insertion (could be more auto-params)
		index = (paramStorage.length == types.length) ? 1 : 2; // May have inserted extra parameter
		if ((paramStorage.length - 1) != types.length) {
			return paramStorage[0];
		}
		for (int i = 0; i < currentParams.length; ++i) {
			if (!currentParams[i].getVariableStorage().equals(paramStorage[i + 1])) {
				return paramStorage[0];
			}
		}
		return null;
	}
Determine if dynamic storage will work during the upgrade of a pre-dynamic storage
function.
@param returnDataType
@param currentParams
@param paramOffset offset within currentParams for first parameter
@return return variable storage if dynamic storage does not match current custom storage -
this is done so that this storage can be assigned if currently <UNASSIGNED>.  If dynamic
storage matches null will be returned.
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/function/FunctionManagerDB.java