@Test
	public void testAddExtFunctionNoLabelSameAddressNoConflict() throws Exception {

		final String libname = "advapi32.dll";
		final String address = "0x100";

		mtf.initialize("NotepadMergeListingTest", new MergeProgramModifier() {

			@Override
			public void initializeProgram(MergeProgram program) throws Exception {
				program.addMemory("memory", "0x0", 0x200);
			}

			@Override
			public void modifyLatest(MergeProgram mergeProgram) throws Exception {
				mergeProgram.addExternalFunction(libname, null, address, SourceType.USER_DEFINED);

				Program program = mergeProgram.getProgram();
				ExternalManager externalManager = program.getExternalManager();
				assertTrue(externalManager.contains(libname));
				String defaultExternalName =
					SymbolUtilities.getDefaultExternalFunctionName(addr(program, address));
				ExternalLocation externalLocation =
					externalManager.getUniqueExternalLocation(libname, defaultExternalName);
				assertNotNull(externalLocation);
				assertEquals(true, externalLocation.isFunction());

				assertEquals(libname + "::EXT_FUN_00000100", externalLocation.toString());
				assertEquals(addr(program, address), externalLocation.getAddress());
				assertTrue(externalLocation.getSource() == SourceType.DEFAULT);
			}

			@Override
			public void modifyPrivate(MergeProgram mergeProgram) throws Exception {
				mergeProgram.addExternalFunction(libname, null, address, SourceType.USER_DEFINED);

				Program program = mergeProgram.getProgram();
				ExternalManager externalManager = program.getExternalManager();
				assertTrue(externalManager.contains(libname));
				String defaultExternalName =
					SymbolUtilities.getDefaultExternalFunctionName(addr(program, address));
				ExternalLocation externalLocation =
					externalManager.getUniqueExternalLocation(libname, defaultExternalName);
				assertNotNull(externalLocation);

				assertEquals(libname + "::EXT_FUN_00000100", externalLocation.toString());
				assertEquals(addr(program, address), externalLocation.getAddress());
				assertTrue(externalLocation.getSource() == SourceType.DEFAULT);
				assertEquals(true, externalLocation.isFunction());
			}
		});

		executeMerge(ASK_USER);
		waitForMergeCompletion();

		ExternalManager externalManager = resultProgram.getExternalManager();
		assertTrue(externalManager.contains(libname));
		String defaultExternalName =
			SymbolUtilities.getDefaultExternalFunctionName(addr(resultProgram, address));
		ExternalLocation externalLocation =
			externalManager.getUniqueExternalLocation(libname, defaultExternalName);
		assertNotNull(externalLocation);

		assertEquals(libname + "::EXT_FUN_00000100", externalLocation.toString());
		assertEquals(addr(resultProgram, address), externalLocation.getAddress());
		assertTrue(externalLocation.getSource() == SourceType.DEFAULT);
		assertEquals(true, externalLocation.isFunction());
	}
The external function merger only detects and merges source differences when a name
difference is being merged.
Ghidra/Features/Base/src/test.slow/java/ghidra/app/merge/listing/ExternalMergerAddTest.java